Slide 1

Slide 1 text

EC2からECSへ 念願のコンテナ移行と 巨大レガシーPHPアプリケーションの再構築 2024年12月22日 江口 純矢 PHP Conference Japan 2024

Slide 2

Slide 2 text

2 経歴 2021年、コドモンにエンジニアとして新卒で入社し請求関連のプロ ダクトを作成するチームに所属。その後、プッシュ通知の基盤を新し く作り直すプロジェクトを経て、SREにジョイン。 最近ハマっていること 早起きしてスーパー銭湯に行った後、ハッピーアワーで昼飲み。 自己紹介 江口 純矢 えぐち すみや X:@egusumi1219

Slide 3

Slide 3 text

3 Mission

Slide 4

Slide 4 text

4 すべての先生に 子どもと向き合う 時間と心のゆとりを こんなプロダクトを開発しています メインプロダクトは、保育・教育施設向けWebアプリケーション。 保護者と施設のやり取りを支えるモバイルアプリケーションや、施設職員向けモバイル版 アプリケーション、外部サービスと連携するAPIなども開発しています。

Slide 5

Slide 5 text

5

Slide 6

Slide 6 text

6 レガシーシステムの運用に頭を悩ませている方 手を上げてください

Slide 7

Slide 7 text

7 コドモンでは長年このような状態でした

Slide 8

Slide 8 text

8 少し長めの導入ですが、お付き合いください

Slide 9

Slide 9 text

9 1. 環境ごとに差異が生じやすくなっている 2. 本番リリースの時間が長く、リリース頻度を増やすのが困難

Slide 10

Slide 10 text

10 1. 環境ごとに差異が生じやすくなっている 2. 本番リリースの時間が長く、リリース頻度を増やすのが困難

Slide 11

Slide 11 text

11 CONFIDENTIAL - © 2022 CoDMON Inc. 11 ローカル環境と本番環境が異なる方法で構成管理される 環境ごとに差異が生じやすくなっている ローカル環境 本番環境 コンテナ 仮想サーバー (EC2)

Slide 12

Slide 12 text

12 CONFIDENTIAL - © 2022 CoDMON Inc. 12 環境ごとに差異が生じやすくなっている ローカル環境と本番環境が異なる方法で構成管理される Docker Ansible ローカル環境 本番環境 差分が生まれやすい状態

Slide 13

Slide 13 text

13 CONFIDENTIAL - © 2022 CoDMON Inc. 13 ローカル環境と本番環境が異なる方法で構成管理される 環境ごとに差異が生じやすくなっている Docker Ansible ローカル環境 本番環境 SRE team 機能開発 team 設定変更の度に依頼 変更 時間と共に構成が複雑化

Slide 14

Slide 14 text

14 CONFIDENTIAL - © 2022 CoDMON Inc. 14 ローカル環境と本番環境が異なる方法で構成管理される 環境ごとに差異が生じやすくなっている Docker Ansible ローカル環境 本番環境 管理責務が別れてしまい SREと機能開発チームの双方に作業のコストが発生

Slide 15

Slide 15 text

15 1. 環境ごとに差異が生じやすくなっている 2. 本番リリースの時間が長く、リリース頻度を増やすのが困難

Slide 16

Slide 16 text

16 CONFIDENTIAL - © 2022 CoDMON Inc. 16 メインのEC2は複数チームで開発 本番リリースの時間が長く、リリース頻度を増やすのが困難 team B team C team A team D 開発に携わる関係者が多い EC2のデプロイ時間が長い

Slide 17

Slide 17 text

17 CONFIDENTIAL - © 2022 CoDMON Inc. 17 メインのEC2は複数チームで開発 開発に携わる関係者が多い EC2のデプロイ時間が長い リリース頻度が増やしづらい team B team C team A team D 本番リリースの時間が長く、リリース頻度を増やすのが困難

Slide 18

Slide 18 text

18 CONFIDENTIAL - © 2022 CoDMON Inc. 18 本番リリースまでの流れ 本番リリースの時間が長く、リリース頻度を増やすのが困難 ビルド 動作確認 デプロイ 動作確認 リリースする人 それぞれで動作確認 同じ場所に集合して作業 ビルド デプロイ ステージング環境 本番環境

Slide 19

Slide 19 text

19 CONFIDENTIAL - © 2022 CoDMON Inc. 19 関係者が多い分、本番リリース頻度を増やす効果が大きい 本番リリースまでの流れ ビルド 動作確認 デプロイ 動作確認 リリースする人 それぞれで動作確認 同じ場所に集合して作業 ビルド デプロイ ステージング環境 本番環境 本番リリースの時間が長く、リリース頻度を増やすのが困難

Slide 20

Slide 20 text

20 CONFIDENTIAL - © 2022 CoDMON Inc. 20 二つの課題を整理 コドモンにおけるレガシーシステムの課題

Slide 21

Slide 21 text

21 CONFIDENTIAL - © 2022 CoDMON Inc. 21 二つの課題を整理 コドモンにおけるレガシーシステムの課題 ローカル環境と本番環境が異なる方法で構成管理される ● 差分が生まれやすい ● 管理責務が別れ、SREと機能開発チームの双方に作業のコストが発生

Slide 22

Slide 22 text

22 CONFIDENTIAL - © 2022 CoDMON Inc. 22 二つの課題を整理 コドモンにおけるレガシーシステムの課題 ローカル環境と本番環境が異なる方法で構成管理される ● 差分が生まれやすい ● 管理責務が別れ、SREと機能開発チームの双方に作業のコストが発生 複数チームが関係するサービスがEC2で動いている ● EC2のデプロイ時間が長く、リリース頻度を増やす障壁になっている

Slide 23

Slide 23 text

23 CONFIDENTIAL - © 2022 CoDMON Inc. 23 二つの課題を整理 コドモンにおけるレガシーシステムの課題 ローカル環境と本番環境が異なる方法で構成管理される ● 差分が生まれやすい ● 管理責務が別れ、SREと機能開発チームの双方に作業のコストが発生 複数チームが関係するサービスがEC2で動いている ● EC2のデプロイ時間が長く、リリース頻度を増やす障壁になっている コンテナ化すれば解決する!

Slide 24

Slide 24 text

24 とはいえ...

Slide 25

Slide 25 text

25 他の業務もある中 この状況に手をつけられず

Slide 26

Slide 26 text

26 数年の時が経過しました...

Slide 27

Slide 27 text

27 時が経ち

Slide 28

Slide 28 text

28 そこで一人の若手エンジニアが

Slide 29

Slide 29 text

29 CONFIDENTIAL - © 2022 CoDMON Inc. 29 「今期コンテナ化に取り組みたいです!」 若手SRE

Slide 30

Slide 30 text

30 ところが...

Slide 31

Slide 31 text

31 実際作業に取り掛かると

Slide 32

Slide 32 text

32 CONFIDENTIAL - © 2022 CoDMON Inc. 32 メインのEC2は複数チームで開発 Apache Source Code team B team C team A team D SRE team ソースコードを複数チームで開発 プロダクトの成長により ソースコードが複雑化

Slide 33

Slide 33 text

33 CONFIDENTIAL - © 2022 CoDMON Inc. 33 メインのEC2は複数チームで開発 Apache Source Code team B team C team A team D SRE team ソースコードを複数チームで開発 プロダクトの成長により ソースコードが複雑化 なぜ、誰が、いつ、入れたか わからないパッケージが複数存在

Slide 34

Slide 34 text

34 CONFIDENTIAL - © 2022 CoDMON Inc. 34 メインのEC2は複数チームで開発 Apache Source Code team B team C team A team D SRE team ソースコードを複数チームで開発 プロダクトの成長により ソースコードが複雑化 なぜ、誰が、いつ、入れたか わからないパッケージが複数存在 複数チームからの協力が不可欠

Slide 35

Slide 35 text

35 今日伝えたいこと

Slide 36

Slide 36 text

36 巨大レガシーシステムのコンテナ移行は 総力戦

Slide 37

Slide 37 text

37 一人ではなくみんなの力で達成するもの

Slide 38

Slide 38 text

38 3 2 1 今日話すこと コンテナイメージの作成には横断的な協力が必要 安全に移行するための工夫 移行作業と多岐にわたる移行対象の監視

Slide 39

Slide 39 text

39 CONFIDENTIAL - © 2022 CoDMON Inc. 39 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 ローカル環境と本番環境が異なる方法で構成管理される ● 差分が生まれやすい ● 管理責務が別れ、SREと機能開発チームの双方に作業のコストが発生 複数チームが関係するサービスがEC2で動いている ● EC2のデプロイ時間が長く、リリース頻度を増やす障壁になっている

Slide 40

Slide 40 text

40 CONFIDENTIAL - © 2022 CoDMON Inc. 40 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 ローカル環境と本番環境が異なる方法で構成管理される ● 差分が生まれやすい ● 管理責務が別れ、SREと機能開発チームの双方に作業のコストが発生 複数チームが関係するサービスがEC2で動いている ● EC2のデプロイ時間が長く、リリース頻度を増やす障壁になっている →環境ごとの差異を減らす →本番リリース時間の短縮

Slide 41

Slide 41 text

41 CONFIDENTIAL - © 2022 CoDMON Inc. 41 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 1. 環境ごとの差異を減らす 2. 本番リリース時間の短縮

Slide 42

Slide 42 text

42 まずはインフラの全体構成図から

Slide 43

Slide 43 text

43 CONFIDENTIAL - © 2022 CoDMON Inc. 43 移行対象のEC2 EC2の時の構成 1.コンテナイメージの作成には横断的な協力が必要 マイクロサービス1 マイクロサービス2 Ansible CodeDeploy

Slide 44

Slide 44 text

44 CONFIDENTIAL - © 2022 CoDMON Inc. 44 移行対象のEC2 ECS移行後の構成 1.コンテナイメージの作成には横断的な協力が必要 マイクロサービス1 マイクロサービス2 移行対象のECS ecspresso docker Ansible CodeDeploy

Slide 45

Slide 45 text

45 CONFIDENTIAL - © 2022 CoDMON Inc. 45 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 1. 環境ごとの差異を減らす 2. 本番リリース時間の短縮

Slide 46

Slide 46 text

46 CONFIDENTIAL - © 2022 CoDMON Inc. 46 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 1. 環境ごとの差異を減らす 2. 本番リリース時間の短縮 ステージング環境と本番環境で 同一のイメージを使えれば解決

Slide 47

Slide 47 text

47 CONFIDENTIAL - © 2022 CoDMON Inc. 47 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 1. 環境ごとの差異を減らす 2. 本番リリース時間の短縮 ステージング環境と本番環境で 同一のイメージを使えれば解決 もう少し詳しく

Slide 48

Slide 48 text

48 CONFIDENTIAL - © 2022 CoDMON Inc. 48 本番リリースまでの流れ 1.コンテナイメージの作成には横断的な協力が必要 ビルド 動作確認 デプロイ 動作確認 リリースする人 それぞれで動作確認 同じ場所に集合して作業 ビルド デプロイ ステージング環境 本番環境

Slide 49

Slide 49 text

49 CONFIDENTIAL - © 2022 CoDMON Inc. 49 本番リリースまでの流れ 1.コンテナイメージの作成には横断的な協力が必要 ビルド 動作確認 デプロイ 動作確認 リリースする人 それぞれで動作確認 同じ場所に集合して作業 デプロイ ステージング環境 本番環境 ビルド

Slide 50

Slide 50 text

50 CONFIDENTIAL - © 2022 CoDMON Inc. 50 本番リリースまでの流れ 1.コンテナイメージの作成には横断的な協力が必要 ビルド 動作確認 デプロイ 動作確認 リリースする人 それぞれで動作確認 同じ場所に集合して作業 ビルド デプロイ ステージング環境 本番環境 ビルドの分だけ時間短縮

Slide 51

Slide 51 text

51 CONFIDENTIAL - © 2022 CoDMON Inc. 51 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 1. 環境ごとの差異を減らす 2. 本番リリース時間の短縮 ステージング環境と本番環境で 同一のイメージを使えれば解決

Slide 52

Slide 52 text

52 CONFIDENTIAL - © 2022 CoDMON Inc. 52 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 1. 環境ごとの差異を減らす 2. 本番リリース時間の短縮 ステージング環境と本番環境で 同一のイメージを使えれば解決 イメージの作成が最重要

Slide 53

Slide 53 text

53 CONFIDENTIAL - © 2022 CoDMON Inc. 53 まずは本番環境用のコンテナイメージの作成 1.コンテナイメージの作成には横断的な協力が必要 本番環境 Dockerfile ローカル環境

Slide 54

Slide 54 text

54 CONFIDENTIAL - © 2022 CoDMON Inc. 54 まずは本番環境用のコンテナイメージの作成 1.コンテナイメージの作成には横断的な協力が必要 本番環境 Dockerfile ローカル環境

Slide 55

Slide 55 text

55 CONFIDENTIAL - © 2022 CoDMON Inc. 55 まずは本番環境用のコンテナイメージの作成 1.コンテナイメージの作成には横断的な協力が必要 本番環境 Dockerfile ローカル環境 Amazon Linux ベースのOSの選定から

Slide 56

Slide 56 text

56 CONFIDENTIAL - © 2022 CoDMON Inc. 56 ベースイメージの選定 1.コンテナイメージの作成には横断的な協力が必要 debian:bookworm-slim ubuntu:noble amazonlinux:2023 イメージ全体の容量 1.8~2GBぐらい 1.8~2GBぐらい 2GB超 セキュリティアップデート頻度 多い 多い 少ない コミュニティ規模 開発コミュニティ大 開発コミュニティ大 AWSに閉じているため比較的 小 さい EOL 2026/6/10 2029/04/25 2025/6/30 その他 安定性重視傾向 DockerHubの公式イメージの多くは Debianベース スピード重視傾向 DebianベースのOS ・AWSと相性良し 安定性を重視して Debianを採用 採 用

Slide 57

Slide 57 text

57 ここからが大変な作業

Slide 58

Slide 58 text

58 CONFIDENTIAL - © 2022 CoDMON Inc. 58 メインのEC2は複数チームで開発 1.コンテナイメージの作成には横断的な協力が必要 Apache Source Code team B team C team A team D SRE team ソースコードを複数チームで開発 プロダクトの成長により ソースコードが複雑化

Slide 59

Slide 59 text

59 CONFIDENTIAL - © 2022 CoDMON Inc. 59 メインのEC2は複数チームで開発 1.コンテナイメージの作成には横断的な協力が必要 Apache Source Code team B team C team A team D SRE team ソースコードを複数チームで開発 プロダクトの成長により ソースコードが複雑化 なぜ、誰が、いつ、入れたか わからないパッケージが複数存在

Slide 60

Slide 60 text

60 CONFIDENTIAL - © 2022 CoDMON Inc. 60 メインのEC2は複数チームで開発 1.コンテナイメージの作成には横断的な協力が必要 Apache Source Code team B team C team A team D SRE team ソースコードを複数チームで開発 プロダクトの成長により ソースコードが複雑化 なぜ、誰が、いつ、入れたか わからないパッケージが複数存在 複数チームからの協力が不可欠

Slide 61

Slide 61 text

61 CONFIDENTIAL - © 2022 CoDMON Inc. 61 AmazonLinuxで動いていたコンテナをDebianで再構築 1.コンテナイメージの作成には横断的な協力が必要 Ansibleに書かれていたコマンドを 一つ一つDockerfileに移す

Slide 62

Slide 62 text

62 CONFIDENTIAL - © 2022 CoDMON Inc. 62 AmazonLinuxで動いていたコンテナをDebianで再構築 1.コンテナイメージの作成には横断的な協力が必要 二つのOSでphpinfo()を実行し パッケージの差分を地道に埋める Ansibleに書かれていたコマンドを 一つ一つDockerfileに移す

Slide 63

Slide 63 text

63 CONFIDENTIAL - © 2022 CoDMON Inc. 63 AmazonLinuxで動いていたコンテナをDebianで再構築 1.コンテナイメージの作成には横断的な協力が必要 二つのOSでphpinfo()を実行し パッケージの差分を地道に埋める Ansibleに書かれていたコマンドを 一つ一つDockerfileに移す

Slide 64

Slide 64 text

64 CONFIDENTIAL - © 2022 CoDMON Inc. 64 AmazonLinuxで動いていたコンテナをDebianで再構築 1.コンテナイメージの作成には横断的な協力が必要 規模が大きく 依存ライブラリの数が膨大 二つのOSでphpinfo()を実行し パッケージの差分を地道に埋める Ansibleに書かれていたコマンドを 一つ一つDockerfileに移す

Slide 65

Slide 65 text

65 CONFIDENTIAL - © 2022 CoDMON Inc. 65 AmazonLinuxで動いていたコンテナをDebianで再構築 1.コンテナイメージの作成には横断的な協力が必要 規模が大きく 依存ライブラリの数が膨大 二つのOSでphpinfo()を実行し パッケージの差分を地道に埋める Ansibleに書かれていたコマンドを 一つ一つDockerfileに移す どこで使われているか そもそもわからない

Slide 66

Slide 66 text

66 CONFIDENTIAL - © 2022 CoDMON Inc. 66 AmazonLinuxで動いていたコンテナをDebianで再構築 1.コンテナイメージの作成には横断的な協力が必要 規模が大きく 依存ライブラリの数が膨大 二つのOSでphpinfo()を実行し パッケージの差分を地道に埋める Ansibleに書かれていたコマンドを 一つ一つDockerfileに移す どこで使われているか そもそもわからない アプリケーションエンジニアやQAに 都度相談して動作確認

Slide 67

Slide 67 text

67 CONFIDENTIAL - © 2022 CoDMON Inc. 67 AmazonLinuxで動いていたコンテナをDebianで再構築 1.コンテナイメージの作成には横断的な協力が必要 二つのOSでphpinfo()を実行し パッケージの差分を地道に埋める Ansibleに書かれていたコマンドを 一つ一つDockerfileに移す アプリケーションエンジニアやQAに 都度相談して動作確認 地道な作業の積み重ねで コンテナイメージがなんとか形に 規模が大きく 依存ライブラリの数が膨大 どこで使われているか そもそもわからない

Slide 68

Slide 68 text

68 CONFIDENTIAL - © 2022 CoDMON Inc. 68 1.コンテナイメージの作成には横断的な協力が必要 元々は1人のタスクだったが、次第に協力してくれる人が増え、正式にPJに

Slide 69

Slide 69 text

69 CONFIDENTIAL - © 2022 CoDMON Inc. 69 次は出来上がったイメージを各環境で共通して使えるように 1.コンテナイメージの作成には横断的な協力が必要 とりあえず動作する イメージが完成

Slide 70

Slide 70 text

70 CONFIDENTIAL - © 2022 CoDMON Inc. 70 次は出来上がったイメージを各環境で共通して使えるように 1.コンテナイメージの作成には横断的な協力が必要 とりあえず動作する イメージが完成 次は他の環境で 動作するように変更

Slide 71

Slide 71 text

71 CONFIDENTIAL - © 2022 CoDMON Inc. 71 1.コンテナイメージの作成には横断的な協力が必要 ● ソースコードの環境依存をイメージから追い出す ○ ビルド時に環境依存値を埋め込まない形に修正 ● 追い出した環境依存値をコンテナ起動時に取得する ○ 環境変数値はコンテナ(ECSタスク)起動時にSecrets Managerから取得可能 各環境でイメージを共通化する時にやること

Slide 72

Slide 72 text

72 CONFIDENTIAL - © 2022 CoDMON Inc. 72 1.コンテナイメージの作成には横断的な協力が必要 環境変数ファイルが存在するも、生成過程が不明 環境変数 ファイル ?

Slide 73

Slide 73 text

73 CONFIDENTIAL - © 2022 CoDMON Inc. 73 1.コンテナイメージの作成には横断的な協力が必要 環境変数ファイルが存在するも、生成過程が不明 シェルスクリプト SecretsManager github actions 環境変数 ファイル ? 複数箇所で環境変数を定義 環境変数をもとにファ イルを作成

Slide 74

Slide 74 text

74 CONFIDENTIAL - © 2022 CoDMON Inc. 74 1.コンテナイメージの作成には横断的な協力が必要 環境変数ファイルが存在するも、生成過程が不明 シェルスクリプト SecretsManager github actions 環境変数 ファイル ? 複数箇所で環境変数を定義 環境変数をもとにファ イルを作成

Slide 75

Slide 75 text

75 CONFIDENTIAL - © 2022 CoDMON Inc. 75 1.コンテナイメージの作成には横断的な協力が必要 環境変数ファイルが存在するも、生成過程が不明 環境変数 ファイル 複雑なデプロイワークフローを 読み解きながら逆算 シェルスクリプト SecretsManager github actions ? 複数箇所で環境変数を定義 環境変数をもとにファ イルを作成

Slide 76

Slide 76 text

76 CONFIDENTIAL - © 2022 CoDMON Inc. 76 1.コンテナイメージの作成には横断的な協力が必要 環境変数ファイルが存在するも、生成過程が不明 開発環境にだけあるこの値はなんですか? ステージング環境にだけ この値が無いのはなぜでしょうか? 知ってそうな人にひたすら質問

Slide 77

Slide 77 text

77 CONFIDENTIAL - © 2022 CoDMON Inc. 77 1.コンテナイメージの作成には横断的な協力が必要 環境変数ファイルが存在するも、生成過程が不明

Slide 78

Slide 78 text

78 CONFIDENTIAL - © 2022 CoDMON Inc. 78 1.コンテナイメージの作成には横断的な協力が必要 環境変数ファイルが存在するも、生成過程が不明 環境変数 ファイル 複雑なデプロイワークフローを 読み解きながら逆算 シェルスクリプト SecretsManager github actions ? 複数箇所で環境変数を定義 環境変数をもとにファ イルを作成

Slide 79

Slide 79 text

79 CONFIDENTIAL - © 2022 CoDMON Inc. 79 1.コンテナイメージの作成には横断的な協力が必要 環境変数ファイルが存在するも、生成過程が不明 シェルスクリプト SecretsManager github actions 環境変数 ファイル 複雑なデプロイワークフローを 読み解きながら逆算 環境変数をもとにファ イルを作成

Slide 80

Slide 80 text

80 CONFIDENTIAL - © 2022 CoDMON Inc. 80 1.コンテナイメージの作成には横断的な協力が必要 ECS移行後は環境変数の値を1箇所に SecretsManager 環境変数 ファイル

Slide 81

Slide 81 text

81 CONFIDENTIAL - © 2022 CoDMON Inc. 81 1.コンテナイメージの作成には横断的な協力が必要 ステージング環境と本番環境で同じイメージが使えるように ステージング環境 本番環境 同じイメージを 使用 環境依存の値は SecretsManagerから取得

Slide 82

Slide 82 text

82 CONFIDENTIAL - © 2022 CoDMON Inc. 82 ローカル環境と本番環境で同じイメージが使えるように 1.コンテナイメージの作成には横断的な協力が必要 本番環境 ローカル環境 ローカル用 Dockerfile ベースとなる Dockerfile 参照 不要な監視ツールの削除など 差分だけを記述 ローカル環境と本番環境の差分が最小限に 機能開発チームもサーバーの設定が変更できるように

Slide 83

Slide 83 text

83 CONFIDENTIAL - © 2022 CoDMON Inc. 83 イメージが各環境で共通して使えるように 1.コンテナイメージの作成には横断的な協力が必要 他の環境でも動作するように

Slide 84

Slide 84 text

84 CONFIDENTIAL - © 2022 CoDMON Inc. 84 まとめ 1.コンテナイメージの作成には横断的な協力が必要 ローカル環境と本番環境が異なる方法で構成管理される ● 差分が生まれやすい ● 管理責務が別れ、SREと機能開発チームの双方に作業のコストが発生 課題

Slide 85

Slide 85 text

85 CONFIDENTIAL - © 2022 CoDMON Inc. 85 まとめ 1.コンテナイメージの作成には横断的な協力が必要 ローカル環境と本番環境が異なる方法で構成管理される ● 差分が生まれやすい ● 管理責務が別れ、SREと機能開発チームの双方に作業のコストが発生 課題 🎉開発チームでApacheの設定が変更できるように🎉

Slide 86

Slide 86 text

86 CONFIDENTIAL - © 2022 CoDMON Inc. 86 まとめ 1.コンテナイメージの作成には横断的な協力が必要 複数チームが関係するサービスがEC2で動いている ● EC2のデプロイ時間が長く、リリース頻度を増やす障壁になっている 課題

Slide 87

Slide 87 text

87 CONFIDENTIAL - © 2022 CoDMON Inc. 87 まとめ 1.コンテナイメージの作成には横断的な協力が必要 🎉本番リリースの時間が大幅短縮🎉 複数チームが関係するサービスがEC2で動いている ● EC2のデプロイ時間が長く、リリース頻度を増やす障壁になっている 課題

Slide 88

Slide 88 text

88 CONFIDENTIAL - © 2022 CoDMON Inc. 88 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 1. 環境ごとの差異を減らす 2. 本番リリース時間の短縮

Slide 89

Slide 89 text

89 CONFIDENTIAL - © 2022 CoDMON Inc. 89 コンテナ化の目的 1.コンテナイメージの作成には横断的な協力が必要 1. 環境ごとの差異を減らす 2. 本番リリース時間の短縮

Slide 90

Slide 90 text

90 一区切りついたので 他のポイントも紹介させてください

Slide 91

Slide 91 text

91 CONFIDENTIAL - © 2022 CoDMON Inc. 91 開発環境以外の環境構築の苦労 開発環境 ステージング環境 開発環境を丸ごとコピー すればステージングはすぐ作れ るだろう 若手SREの鬼の頑張りでECS化

Slide 92

Slide 92 text

92 CONFIDENTIAL - © 2022 CoDMON Inc. 92 開発環境以外の環境構築の苦労 開発環境 ステージング環境 開発環境を丸ごとコピー すればステージングはすぐ作れ るだろう 開発環境とステージング環境で差分あり 若手SREの鬼の頑張りでECS化

Slide 93

Slide 93 text

93 CONFIDENTIAL - © 2022 CoDMON Inc. 93 移行対象のEC2 Apacheの処理を効率化するためPHPを変更 マイクロサービス1 マイクロサービス2 移行対象のECS ecspresso docker Ansible CodeDeploy

Slide 94

Slide 94 text

94 CONFIDENTIAL - © 2022 CoDMON Inc. 94 移行対象のEC2 Apacheの処理を効率化するためPHPを変更 マイクロサービス1 マイクロサービス2 移行対象のECS ecspresso docker Ansible workerを使用 apacheとPHPを分離 モジュール版 PHP FastCGI版PHP preforkを使用 CodeDeploy

Slide 95

Slide 95 text

95 CONFIDENTIAL - © 2022 CoDMON Inc. 95 Apacheの処理方式を見直し Apacheの処理方式 prefork worker event メモリ httpd プロセス httpd プロセス ・・・・・ スレッド1 スレッド1 CPU コア コア コア コア httpリクエスト 命令 httpリクエスト メモリ httpd プロセス ・・・・・ スレッド1 CPU コア コア コア コア httpリクエスト 命令 httpリクエスト スレッド2 スレッド3 httpリクエスト メモリ httpd プロセス ・・・・・ スレッド1 CPU コア コア コア コア httpリクエスト 命令 httpリクエスト スレッド2 スレッド3 httpリクエスト workerとほぼ同じ プロセス数不足をトリガーに ・新規プロセスを起動 ・既存プロセスを停止 処理効率 Apacheの処理を効率化するためPHPを変更 モジュール版PHPでは使用不可 モジュール版PHPでは使用不可

Slide 96

Slide 96 text

96 CONFIDENTIAL - © 2022 CoDMON Inc. 96 処理効率が最も良いevent方式では、502エラーとなるため、workerを採用 Apacheの処理を効率化するためPHPを変更 約0.5%の割合で 502エラー Apache MPM イベントモジュールは、ロードバランサーからの接続を早期に切断す る可能性があります。 接続が早期に切断されると、Application Load Balancer では HTTP 502 エラーが生成されます。抑制するためには、代わりに MPM ワーカーモ ジュールを使用するのがベストプラクティスです。 “ELB のバックエンドサーバーとして Apache または NGINX を使用するための最適な設定を教えてください。” https://repost.aws/ja/knowledge-center/apache-backend-elb

Slide 97

Slide 97 text

97 CONFIDENTIAL - © 2022 CoDMON Inc. 97 負荷試験の結果、Apacheの処理方式を変更 Apacheの処理方式 prefork worker event メモリ httpd プロセス httpd プロセス ・・・・・ スレッド1 スレッド1 CPU コア コア コア コア httpリクエスト 命令 httpリクエスト メモリ httpd プロセス ・・・・・ スレッド1 CPU コア コア コア コア httpリクエスト 命令 httpリクエスト スレッド2 スレッド3 httpリクエスト メモリ httpd プロセス ・・・・・ スレッド1 CPU コア コア コア コア httpリクエスト 命令 httpリクエスト スレッド2 スレッド3 httpリクエスト workerとほぼ同じ プロセス数不足をトリガーに ・新規プロセスを起動 ・既存プロセスを停止 採 用 Apacheの処理を効率化するためPHPを変更 モジュール版PHPでは使用不可 モジュール版PHPでは使用不可 処理効率 約0.5%の割合で502エラー

Slide 98

Slide 98 text

98 CONFIDENTIAL - © 2022 CoDMON Inc. 98 移行対象のEC2 ECS移行後の構成 1.コンテナイメージの作成には横断的な協力が必要 マイクロサービス1 マイクロサービス2 移行対象のECS ecspresso docker Ansible CodeDeploy

Slide 99

Slide 99 text

99 2 1 3 今日話すこと コンテナイメージの作成には横断的な協力が必要 安全に移行するための工夫 移行作業と多岐にわたる移行対象の監視

Slide 100

Slide 100 text

100 ここからが本番

Slide 101

Slide 101 text

101 ここまで総力を上げて作ったコンテナを 安全にリリースしたい

Slide 102

Slide 102 text

102 とはいえ、どこで問題が起きるかわからない

Slide 103

Slide 103 text

103 CONFIDENTIAL - © 2022 CoDMON Inc. 103 安全に移行するための工夫 2.安全に移行するための工夫 1. PRを大きくせず、ビッグバンリリースしないための工夫 2. 移行前のEC2に影響を与えずに ECSへリリースするための工夫 3. ECS移行前に本番環境で動作確認するための工夫 4. 段階的に移行するための工夫

Slide 104

Slide 104 text

104 CONFIDENTIAL - © 2022 CoDMON Inc. 104 安全に移行するための工夫 2.安全に移行するための工夫 1. PRを大きくせず、ビッグバンリリースしないための工夫 2. 移行前のEC2に影響を与えずに ECSへリリースするための工夫 3. ECS移行前に本番環境で動作確認するための工夫 4. 段階的に移行するための工夫

Slide 105

Slide 105 text

105 CONFIDENTIAL - © 2022 CoDMON Inc. 105 PRを大きくせず、ビッグバンリリースしないための工夫 2.安全に移行するための工夫 移行前のEC2 移行後のECS 変更差分大

Slide 106

Slide 106 text

106 CONFIDENTIAL - © 2022 CoDMON Inc. 106 PRを大きくせず、ビッグバンリリースしないための工夫 2.安全に移行するための工夫 移行前のEC2 移行後のECS 変更差分大 巨大 Pull Request 非互換な変更のため 移行直前にマージ予定

Slide 107

Slide 107 text

107 CONFIDENTIAL - © 2022 CoDMON Inc. 107 なぜ非互換なPRになったのか? 2.安全に移行するための工夫 移行前のEC2 移行後のECS 変更差分大 モジュール版PHP FastCGI版PHP prefork worker

Slide 108

Slide 108 text

108 CONFIDENTIAL - © 2022 CoDMON Inc. 108 なぜ非互換なPRになったのか? 2.安全に移行するための工夫 移行前のEC2 移行後のECS 変更差分大 PHPの設定を .htaccessに記述 PHPの設定を user.iniに記述 モジュール版PHP FastCGI版PHP prefork worker

Slide 109

Slide 109 text

109 CONFIDENTIAL - © 2022 CoDMON Inc. 109 なぜ非互換なPRになったのか? 2.安全に移行するための工夫 移行前のEC2 移行後のECS 変更差分大 PHPの設定を .htaccessに記述 PHPの設定を user.iniに記述 変更をマージすると EC2で動作しなくなる モジュール版PHP FastCGI版PHP prefork worker

Slide 110

Slide 110 text

110 CONFIDENTIAL - © 2022 CoDMON Inc. 110 なぜ非互換なPRになったのか? 2.安全に移行するための工夫 移行前のEC2 移行後のECS 変更差分大 PHPの設定を .htaccessに記述 PHPの設定を user.iniに記述 EC2とECSの両方で動く 書き方に変更し、PRをマージ モジュール版PHP FastCGI版PHP prefork worker preforkの時のみ 設定を読み込む書き方に変更

Slide 111

Slide 111 text

111 CONFIDENTIAL - © 2022 CoDMON Inc. 111 なぜ非互換なPRになったのか? 2.安全に移行するための工夫 移行前のEC2 移行後のECS 変更差分大 PHPの設定を .htaccessに記述 PHPの設定を user.iniに記述 EC2とECSの両方で動く 書き方に変更し、PRをマージ モジュール版PHP FastCGI版PHP 巨大PRの解体をきっかけに 段階的な移行を意識するように

Slide 112

Slide 112 text

112 CONFIDENTIAL - © 2022 CoDMON Inc. 112 安全に移行するための工夫 2.安全に移行するための工夫 1. PRを大きくせず、ビッグバンリリースしないための工夫 2. 移行前のEC2に影響を与えずに ECSへリリースするための工夫 3. ECS移行前に本番環境で動作確認するための工夫 4. 段階的に移行するための工夫

Slide 113

Slide 113 text

113 CONFIDENTIAL - © 2022 CoDMON Inc. 113 移行前のEC2に影響を与えずにECSへリリースするための工夫 2.安全に移行するための工夫 移行前EC2 移行後ECS 両方を同じ状態に

Slide 114

Slide 114 text

114 CONFIDENTIAL - © 2022 CoDMON Inc. 114 移行前のEC2に影響を与えずにECSへリリースするための工夫 2.安全に移行するための工夫 移行前EC2 移行後ECS 両方を同じ状態に test slack slack call 既存ワークフロー

Slide 115

Slide 115 text

115 CONFIDENTIAL - © 2022 CoDMON Inc. 115 移行前のEC2に影響を与えずにECSへリリースするための工夫 2.安全に移行するための工夫 移行前EC2 移行後ECS 両方を同じ状態に test slack slack call 既存ワークフローに追加できない 合計20 1 つのワークフロー ファイルから最大 20 個の一意の再利用可能なワークフローを呼 び出すことができます。 “ワークフローの再利用 > 制限事項” https://docs.github.com/ja/actions/sharing-automations/reusing-workflows 既存ワークフロー

Slide 116

Slide 116 text

116 CONFIDENTIAL - © 2022 CoDMON Inc. 116 移行前のEC2に影響を与えずにECSへリリースするための工夫 2.安全に移行するための工夫 移行前EC2 移行後ECS 既存ワークフロー test slack slack call ECS用ワークフロー test slack call work flow run経由で実行 ECSへのデプロイ結果が既存ワークフローに影響しない

Slide 117

Slide 117 text

117 CONFIDENTIAL - © 2022 CoDMON Inc. 117 安全に移行するための工夫 2.安全に移行するための工夫 1. PRを大きくせず、ビッグバンリリースしないための工夫 2. 移行前のEC2に影響を与えずに ECSへリリースするための工夫 3. ECS移行前に本番環境で動作確認するための工夫 4. 段階的に移行するための工夫

Slide 118

Slide 118 text

118 CONFIDENTIAL - © 2022 CoDMON Inc. 118 ECS移行前に本番環境で動作確認するための工夫 2.安全に移行するための工夫 本番環境の作成はできたものの、実際に意図した動作をするか不安 特に、本番固有のインフラリソースなどはステージング環境で動作保証できない

Slide 119

Slide 119 text

119 CONFIDENTIAL - © 2022 CoDMON Inc. 119 ECS移行前に本番環境で動作確認するための工夫 2.安全に移行するための工夫 本番環境の作成はできたものの、実際に意図した動作をするか不安 特に、本番固有のインフラリソースなどはステージング環境で動作保証できない ユーザーに公開する前に動作確認したい

Slide 120

Slide 120 text

120 CONFIDENTIAL - © 2022 CoDMON Inc. 120 ルール1 target_group1に転送 移行対象のEC2 ECS移行前に本番環境で動作確認するための工夫 2.安全に移行するための工夫 移行対象のECS target_group1 ユーザー 開発者 443/ https

Slide 121

Slide 121 text

121 CONFIDENTIAL - © 2022 CoDMON Inc. 121 ルール1 target_group1に転送 移行対象のEC2 ECS移行前に本番環境で動作確認するための工夫 2.安全に移行するための工夫 移行対象のECS target_group1 ユーザー 開発者 443/ https xxxx/ https ルール2 target_group2に転送 target_group2 開発者以外はアクセスできない OIDCによる認証 ユーザーに公開する前に動作確認可能

Slide 122

Slide 122 text

122 CONFIDENTIAL - © 2022 CoDMON Inc. 122 安全に移行するための工夫 2.安全に移行するための工夫 1. PRを大きくせず、ビッグバンリリースしないための工夫 2. 移行前のEC2に影響を与えずに ECSへリリースするための工夫 3. ECS移行前に本番環境で動作確認するための工夫 4. 段階的に移行するための工夫

Slide 123

Slide 123 text

123 CONFIDENTIAL - © 2022 CoDMON Inc. 123 移行対象のEC2 当初考えていた移行の方法 2.安全に移行するための工夫 マイクロサービス1 マイクロサービス2 移行対象のECS

Slide 124

Slide 124 text

124 CONFIDENTIAL - © 2022 CoDMON Inc. 124 移行対象のEC2 当初考えていた移行の方法 2.安全に移行するための工夫 マイクロサービス1 マイクロサービス2 移行対象のECS Route53の加重ルーティング により段階移行

Slide 125

Slide 125 text

125 CONFIDENTIAL - © 2022 CoDMON Inc. 125 移行対象のEC2 当初考えていた移行の方法 2.安全に移行するための工夫 マイクロサービス1 マイクロサービス2 移行対象のECS Route53の加重ルーティング により段階移行 各マイクロサービスECSに 新しいALB用ターゲットグループが必要 ECS サービスに登録できる ターゲットグループの上限は5つ

Slide 126

Slide 126 text

126 CONFIDENTIAL - © 2022 CoDMON Inc. 126 移行対象のEC2 当初考えていた移行の方法 2.安全に移行するための工夫 マイクロサービス1 マイクロサービス2 移行対象のECS Route53の加重ルーティング により段階移行 各マイクロサービスECSに 新しいALB用ターゲットグループが必要 ECS サービスに登録できる ターゲットグループの上限は5つ 各マイクロサービスチームで ターゲットグループを作る手間が発生 既にターゲットグループが 3つ以上登録されている マイクロサービスが複数存在

Slide 127

Slide 127 text

127 CONFIDENTIAL - © 2022 CoDMON Inc. 127 移行対象のEC2 当初考えていた移行の方法 2.安全に移行するための工夫 マイクロサービス1 マイクロサービス2 移行対象のECS Route53の加重ルーティング により段階移行 各マイクロサービスECSに 新しいALB用ターゲットグループが必要 ECS サービスに登録できる ターゲットグループの上限は5つ 各マイクロサービスチームで ターゲットグループを作る手間が発生 既にターゲットグループが 3つ以上登録されている マイクロサービスが複数存在 別の方法を検討

Slide 128

Slide 128 text

128 CONFIDENTIAL - © 2022 CoDMON Inc. 128 移行対象のEC2 リスナールールに着目し再検討 2.安全に移行するための工夫 マイクロサービス1 マイクロサービス2 移行対象のECS ルール1 target_group1:100% ルール2 target_group2:100% ルール3 target_group_3:100% target_group2 target_group3 target_group1

Slide 129

Slide 129 text

129 CONFIDENTIAL - © 2022 CoDMON Inc. 129 移行対象のEC2 リスナールールに着目し再検討 2.安全に移行するための工夫 マイクロサービス1 マイクロサービス2 移行対象のECS ルール1 target_group1:100% ルール2 target_group2:100% ルール3 target_group_3:100% target_group2 target_group3 target_group1

Slide 130

Slide 130 text

130 CONFIDENTIAL - © 2022 CoDMON Inc. 130 移行対象のEC2 リスナールールに着目し再検討 2.安全に移行するための工夫 マイクロサービス1 マイクロサービス2 移行対象のECS ルール1 target_group1:100% target_group4:0% ルール2 target_group2:100% ルール3 target_group_3:100% target_group2 target_group3 target_group1 target_group4 リスナールールによって ターゲットグループで加重設定

Slide 131

Slide 131 text

131 CONFIDENTIAL - © 2022 CoDMON Inc. 131 移行対象のEC2 リスナールールに着目し再検討 2.安全に移行するための工夫 マイクロサービス1 マイクロサービス2 移行対象のECS ルール1 target_group1:100% target_group4:0% ルール2 target_group2:100% ルール3 target_group_3:100% target_group2 target_group3 target_group1 target_group4 リスナールールによって ターゲットグループで加重設定 各マイクロサービス用の ターゲットグループの新規作成が不要

Slide 132

Slide 132 text

132 CONFIDENTIAL - © 2022 CoDMON Inc. 132 まとめ 2.安全に移行するための工夫 1. PRを大きくせず、ビッグバンリリースしないための工夫 →EC2とECSの両方で動くようにソースコードを修正 2. 移行前のEC2に影響を与えずに ECSへリリースするための工夫 →EC2へのデプロイが完了した後 ECSがデプロイされる仕組みを作成 3. ECS移行前に本番環境で動作確認するための工夫 →ALBに認証を設けて、開発者だけが ECSで動作確認できる仕組みを作成 4. 段階的に移行するための工夫 →ALBの加重設定を使用し、徐々にトラフィックを流せる仕組みを作成

Slide 133

Slide 133 text

133 ついでに

Slide 134

Slide 134 text

134 デプロイ方式について

Slide 135

Slide 135 text

135 CONFIDENTIAL - © 2022 CoDMON Inc. 135 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 フロントとバックエンドが同一のECSに

Slide 136

Slide 136 text

136 CONFIDENTIAL - © 2022 CoDMON Inc. 136 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 ローリングアップデート前 ローリングアップデート後 ローリングアップデート フロントとバックエンドが同一のECSに

Slide 137

Slide 137 text

137 CONFIDENTIAL - © 2022 CoDMON Inc. 137 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 ローリングアップデート前 ローリングアップデート後 ローリングアップデート ローリングアップデート中は 新旧のインスタンスが混在 フロントとバックエンドが同一のECSに

Slide 138

Slide 138 text

138 CONFIDENTIAL - © 2022 CoDMON Inc. 138 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 ローリングアップデート前 ローリングアップデート後 ローリングアップデート フロントとバックエンドが同一のECSに ローリングアップデート中は 新旧のインスタンスが混在 デプロイ期間中 フロントとバックエンドが で不一致が生じる

Slide 139

Slide 139 text

139 CONFIDENTIAL - © 2022 CoDMON Inc. 139 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 ローリングアップデート前 ローリングアップデート後 ローリングアップデート フロントとバックエンドが同一のECSに ローリングアップデート中は 新旧のインスタンスが混在 フロントのみS3などに分離 Blue/Greenデプロイに 変更する デプロイ期間中 フロントとバックエンドが で不一致が生じる

Slide 140

Slide 140 text

140 CONFIDENTIAL - © 2022 CoDMON Inc. 140 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 ローリングアップデート前 ローリングアップデート後 ローリングアップデート フロントとバックエンドが同一のECSに ローリングアップデート中は 新旧のインスタンスが混在 フロントのみS3などに分離 Blue/Greenデプロイに 変更する デプロイ期間中 フロントとバックエンドが で不一致が生じる

Slide 141

Slide 141 text

141 CONFIDENTIAL - © 2022 CoDMON Inc. 141 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 ローリングアップデート前 ローリングアップデート後 ローリングアップデート フロントとバックエンドが同一のECSに ローリングアップデート中は 新旧のインスタンスが混在 フロントのみS3などに分離 Blue/Greenデプロイに 変更する 採 用 デプロイ期間中 フロントとバックエンドが で不一致が生じる

Slide 142

Slide 142 text

142 CONFIDENTIAL - © 2022 CoDMON Inc. 142 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 Blue Blue/Greenデプロイ

Slide 143

Slide 143 text

143 CONFIDENTIAL - © 2022 CoDMON Inc. 143 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 Blue Green Blue/Greenデプロイ

Slide 144

Slide 144 text

144 CONFIDENTIAL - © 2022 CoDMON Inc. 144 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 Blue Green Blue/Greenデプロイ トラフィックを一気に切り替える

Slide 145

Slide 145 text

145 CONFIDENTIAL - © 2022 CoDMON Inc. 145 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 Blue Green Blue/Greenデプロイ トラフィックを一気に切り替える

Slide 146

Slide 146 text

146 CONFIDENTIAL - © 2022 CoDMON Inc. 146 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 Green Blue/Greenデプロイ ALBのリスナールールによる加重設定と Blue/Greenデプロイは併用できない

Slide 147

Slide 147 text

147 CONFIDENTIAL - © 2022 CoDMON Inc. 147 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 Green Blue/Greenデプロイ ALBのリスナールールによる加重設定と Blue/Greenデプロイは併用できない 段階移行期間中は Blue/Greenデプロイが使えない

Slide 148

Slide 148 text

148 CONFIDENTIAL - © 2022 CoDMON Inc. 148 ローリングアップデートとBlue/Greenの比較 2.安全に移行するための工夫 Green Blue/Greenデプロイ ALBのリスナールールによる加重設定と Blue/Greenデプロイは併用できない Blue/Greenデプロイを使用する場合 対象のECSサービスに登録できる ターゲットグループは 1つまで デプロイ方式を ローリングアップデートから Blue/Greenに切り替える際 ECS Serviceを作り直す必要がある

Slide 149

Slide 149 text

149 制約の多いBlue/Greenデプロイは 基本的には採用しない方針に

Slide 150

Slide 150 text

150 フロントとバックエンドが分離されてない 今回のサービスではBlue/Greenデプロイを採用

Slide 151

Slide 151 text

151 CONFIDENTIAL - © 2022 CoDMON Inc. 151 最終的な移行計画 2.安全に移行するための工夫

Slide 152

Slide 152 text

152 CONFIDENTIAL - © 2022 CoDMON Inc. 152 移行対象のEC2 最終的な移行計画 2.安全に移行するための工夫 移行対象のECS ルール1 target_group1:100% target_group1

Slide 153

Slide 153 text

153 CONFIDENTIAL - © 2022 CoDMON Inc. 153 移行対象のEC2 最終的な移行計画 2.安全に移行するための工夫 移行対象のECS ルール1 target_group1:100% target_group4:0% target_group1 target_group4 段階移行中はローリングアップデート

Slide 154

Slide 154 text

154 CONFIDENTIAL - © 2022 CoDMON Inc. 154 移行対象のEC2 最終的な移行計画 2.安全に移行するための工夫 移行対象のECS ルール1 target_group1:50% target_group4:50% target_group1 target_group4 段階移行中はローリングアップデート

Slide 155

Slide 155 text

155 CONFIDENTIAL - © 2022 CoDMON Inc. 155 最終的な移行計画 移行対象のEC2 2.安全に移行するための工夫 移行対象のECS ルール1 target_group1:0% target_group4:100% target_group1 target_group4 段階移行中はローリングアップデート

Slide 156

Slide 156 text

156 CONFIDENTIAL - © 2022 CoDMON Inc. 156 移行対象のEC2 最終的な移行計画 2.安全に移行するための工夫 移行対象のECS ルール1 target_group1:0% target_group4:100% target_group1 target_group4 不要な加重設定を削除 段階移行中はローリングアップデート

Slide 157

Slide 157 text

157 CONFIDENTIAL - © 2022 CoDMON Inc. 157 移行対象のEC2 最終的な移行計画 2.安全に移行するための工夫 移行対象のECS ルール1 target_group4:100% target_group4 不要な加重設定を削除 段階移行中はローリングアップデート

Slide 158

Slide 158 text

158 CONFIDENTIAL - © 2022 CoDMON Inc. 158 移行対象のEC2 最終的な移行計画 2.安全に移行するための工夫 移行対象のECS ルール1 target_group4:100% target_group4 段階移行完了後 Blue/Greenデプロイに切り替え

Slide 159

Slide 159 text

159 CONFIDENTIAL - © 2022 CoDMON Inc. 159 移行対象のEC2 最終的な移行計画 2.安全に移行するための工夫 移行対象のECS ルール1 target_group4:100% target_group4 段階移行完了後 Blue/Greenデプロイに切り替え

Slide 160

Slide 160 text

160 3 2 1 今日話すこと コンテナイメージの作成には横断的な協力が必要 安全に移行するための工夫 移行作業と多岐にわたる移行対象の監視

Slide 161

Slide 161 text

161 いよいよ最後

Slide 162

Slide 162 text

162 CONFIDENTIAL - © 2022 CoDMON Inc. 162 移行作業の流れ 4.移行作業と多岐にわたる移行対象の監視 移行完了後 Blue/Greenデプロイに切り替え EC2のトラフィックを徐々にECSへ

Slide 163

Slide 163 text

163 実はもう少し複雑

Slide 164

Slide 164 text

164 CONFIDENTIAL - © 2022 CoDMON Inc. 164 多岐にわたる移行対象 4.移行作業と多岐にわたる移行対象の監視 移行対象のEC2 移行対象のECS ルール1 target_group1:100% target_group4:0% target_group1 target_group4

Slide 165

Slide 165 text

165 CONFIDENTIAL - © 2022 CoDMON Inc. 165 多岐にわたる移行対象 4.移行作業と多岐にわたる移行対象の監視 移行対象のEC2 移行対象のECS ルール1 target_group1:100% target_group4:0% target_group1 target_group4 ×2

Slide 166

Slide 166 text

166 CONFIDENTIAL - © 2022 CoDMON Inc. 166 多岐にわたる移行対象 4.移行作業と多岐にわたる移行対象の監視 移行対象のEC2 移行対象のECS ルール1 target_group1:100% target_group4:0% target_group1 target_group4 ×2 ×2

Slide 167

Slide 167 text

167 CONFIDENTIAL - © 2022 CoDMON Inc. 167 多岐にわたる移行対象 4.移行作業と多岐にわたる移行対象の監視 移行対象のEC2 移行対象のECS ルール1 target_group1:100% target_group4:0% target_group1 target_group4 ×2 ×2 ×2 合計4種類のEC2インスタンスが ECSへの移行対象

Slide 168

Slide 168 text

168 CONFIDENTIAL - © 2022 CoDMON Inc. 168 本当の移行作業の流れ 4.移行作業と多岐にわたる移行対象の監視 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ 影響の範囲を抑えながら 順次実行

Slide 169

Slide 169 text

169 CONFIDENTIAL - © 2022 CoDMON Inc. 169 本当の移行作業の流れ 4.移行作業と多岐にわたる移行対象の監視 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ EC2のトラフィックを徐々にECSへ 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ 影響の範囲を抑えながら 順次実行 移行完了後 Blue/Greenデプロイに切り 替え

Slide 170

Slide 170 text

170 CONFIDENTIAL - © 2022 CoDMON Inc. 170 本当の移行作業の流れ 4.移行作業と多岐にわたる移行対象の監視 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ EC2のトラフィックを徐々にECSへ 移行完了後 Blue/Greenデプロイに切り 替え EC2のトラフィックを徐々にECSへ 影響の範囲を抑えながら 順次実行 移行完了後 Blue/Greenデプロイに切り 替え フロントとバックエンドの不一致が 起きないサービスではローリングアップデートを採用

Slide 171

Slide 171 text

171 CONFIDENTIAL - © 2022 CoDMON Inc. 171 移行作業中の監視 4.移行作業と多岐にわたる移行対象の監視 移行対象のEC2 移行対象のECS ルール1 target_group1:100% target_group4:0% target_group1 target_group4 ×2 ×2 ×2

Slide 172

Slide 172 text

172 CONFIDENTIAL - © 2022 CoDMON Inc. 172 移行作業中の監視 4.移行作業と多岐にわたる移行対象の監視 移行対象のEC2 移行対象のECS ルール1 target_group1:100% target_group4:0% target_group1 target_group4 ×2 ×2 ×2 EC2とECSの両方を監視

Slide 173

Slide 173 text

173 CONFIDENTIAL - © 2022 CoDMON Inc. 173 移行対象の監視ダッシュボードを確認 移行作業と多岐にわたる移行対象の監視 4.移行作業と多岐にわたる移行対象の監視

Slide 174

Slide 174 text

174 CONFIDENTIAL - © 2022 CoDMON Inc. 174 移行対象の監視ダッシュボードを確認 移行作業と多岐にわたる移行対象の監視 4.移行作業と多岐にわたる移行対象の監視 怪しいメトリクスがあれば、関係しそうなチームに確認

Slide 175

Slide 175 text

175 CONFIDENTIAL - © 2022 CoDMON Inc. 175 移行作業中注意したこと 4.移行作業と多岐にわたる移行対象の監視 ● 移行作業のスケジュールを事前に開発部以外の他部署にも共有 ● ECSへの加重は1%からスタートし、徐々に移行 ● ログやALBのエラーをEC2と比較しながら常に監視 ● 怪しい箇所は「EC2でも起きているか?」を観点に都度確認

Slide 176

Slide 176 text

176 CONFIDENTIAL - © 2022 CoDMON Inc. 176 移行作業中注意したこと 4.移行作業と多岐にわたる移行対象の監視 ● 移行作業のスケジュールを事前に開発部以外の他部署にも共有 ● ECSへの加重は1%からスタートし、徐々に移行 ● ログやALBのエラーをEC2と比較しながら常に監視 ● 怪しい箇所は「EC2でも起きているか?」を観点に都度確認 現在も移行作業中です

Slide 177

Slide 177 text

177 ですが

Slide 178

Slide 178 text

178 改めて今回の成果

Slide 179

Slide 179 text

179 CONFIDENTIAL - © 2022 CoDMON Inc. 179 まとめ コンテナ移行したことで得られた成果 ローカル環境と本番環境が異なる方法で構成管理される ● 差分が生まれやすい ● 管理責務が別れ、SREと機能開発チームの双方に作業のコストが発生 課題 🎉開発チームでApacheの設定が変更できるように🎉

Slide 180

Slide 180 text

180 CONFIDENTIAL - © 2022 CoDMON Inc. 180 まとめ コンテナ移行したことで得られた成果 🎉本番リリースの時間が大幅短縮🎉 複数チームが関係するサービスがEC2で動いている ● EC2のデプロイ時間が長く、リリース頻度を増やす障壁になっている 課題

Slide 181

Slide 181 text

181 最後に

Slide 182

Slide 182 text

182 移行作業を振り返って

Slide 183

Slide 183 text

183 CONFIDENTIAL - © 2022 CoDMON Inc. 183 AmazonLinuxで動いていたコンテナをDebianで再構築 二つのOSでphpinfo()を実行し パッケージの差分を地道に埋める Ansibleに書かれていたコマンドを 一つ一つDockerfileに移す アプリケーションエンジニアやQAに 都度相談して動作確認 地道な作業の積み重ねで コンテナイメージがなんとか形に 規模が大きく 依存ライブラリの数が膨大 どこで使われているか そもそもわからない

Slide 184

Slide 184 text

184 CONFIDENTIAL - © 2022 CoDMON Inc. 184 環境変数ファイルが存在するも、生成過程が不明 開発環境にだけあるこの値はなんですか? ステージング環境にだけ この値が無いのはなぜでしょうか? 知ってそうな人にひたすら質問

Slide 185

Slide 185 text

185 CONFIDENTIAL - © 2022 CoDMON Inc. 185 元々は1人のタスクだったが、次第に協力してくれる人が増え、正式にPJに

Slide 186

Slide 186 text

186 多くの人に支えられていることを 実感するプロジェクトでした

Slide 187

Slide 187 text

187 皆さんも、大きな挑戦をしたとき周りの支えに 救われた経験があるのではないでしょうか?

Slide 188

Slide 188 text

188 今日伝えたいこと

Slide 189

Slide 189 text

189 巨大レガシーシステムのコンテナ移行は 総力戦

Slide 190

Slide 190 text

190 一人ではなくみんなの力で達成するもの

Slide 191

Slide 191 text

191 まだまだ多くの協力が必要です

Slide 192

Slide 192 text

192 コドモン採用ページ 開発ブログ コドモンでは一緒に働きたい仲間を募集しています!

Slide 193

Slide 193 text

193 ご清聴ありがとうございました!

Slide 194

Slide 194 text

No content