Slide 1

Slide 1 text

Confidential © dip Corporation. 1 © dip Corporation. PHP(Laravel)とAWS FargateのDeploy戦略 PHPカンファレンス2021 ディップ株式会社 中川拓哉

Slide 2

Slide 2 text

Confidential © dip Corporation. 自己紹介 • 中川 拓哉 • 2018年4月にディップ株式会社に新卒入社 • PHPer歴:3年6ヶ月 • Twitter:@tkdev0728 • Qiita:@taku-0728 2

Slide 3

Slide 3 text

Confidential © dip Corporation. 今日話すこと ● EC2→Fargateに移行した話をデプロイを主軸にして話します ● PHPの話を詳しく聞きたい方はdiscordか明日のスポンサーツアーにて! 3

Slide 4

Slide 4 text

Confidential © dip Corporation. 本番環境でコンテナ使ってますか? 4

Slide 5

Slide 5 text

Confidential © dip Corporation. インフラ環境の変化 5 オンプレミス クラウド

Slide 6

Slide 6 text

Confidential © dip Corporation. インフラ環境の変化 6 EKS ECS

Slide 7

Slide 7 text

Confidential © dip Corporation. 前提 7 出典:Googleトレンド (https://trends.google.co.jp/trends/explore?q=Laravel%20EC2,Laravel%20ECS,Laravel%20EKS)

Slide 8

Slide 8 text

Confidential © dip Corporation. まだEC2が多い 8

Slide 9

Slide 9 text

Confidential © dip Corporation. ディップはどうなのか 9

Slide 10

Slide 10 text

Confidential © dip Corporation. 10 長く運用されているサービス 新しいサービス

Slide 11

Slide 11 text

Confidential © dip Corporation. 11 長く運用されているサービス 新しいサービス EC2

Slide 12

Slide 12 text

Confidential © dip Corporation. 12 長く運用されているサービス 新しいサービス EC2 Fargate

Slide 13

Slide 13 text

Confidential © dip Corporation. 13 新しいサービス ● オートスケールをやりやすい ● 開発環境が簡単に作れる ● 開発環境と本番環境の差異が少ない ● インフラ構成を他チームに展開しやすい コンテナ化した理由 Fargate

Slide 14

Slide 14 text

Confidential © dip Corporation. 14 長く運用されているサービス

Slide 15

Slide 15 text

Confidential © dip Corporation. 15 長く運用されているサービス どうやってEC2からコンテナ化するのか

Slide 16

Slide 16 text

Confidential © dip Corporation. 一言でコンテナ化と言っても... 開発環境 16 ● 記事が多い ○ 先人のノウハウが参考になる

Slide 17

Slide 17 text

Confidential © dip Corporation. 一言でコンテナ化と言っても... 開発環境 17 ● 記事が多い ○ 先人のノウハウが参考になる 本番環境 ● 検討事項が多い ○ デプロイをどうやって行うか ○ ログ管理どうするのか ○ 外部監視どうするのか

Slide 18

Slide 18 text

Confidential © dip Corporation. 一言でコンテナ化と言っても... 開発環境 18 ● 記事が多い ○ 先人のノウハウが参考になる 本番環境 ● 検討事項が多い ○ デプロイをどうやって行うか ○ ログ管理どうするのか ○ 外部監視どうするのか

Slide 19

Slide 19 text

Confidential © dip Corporation. そもそも今のデプロイは どうやっているのか 19

Slide 20

Slide 20 text

Confidential © dip Corporation. 20 今のデプロイ方法 ● 手動ローリングアップデート

Slide 21

Slide 21 text

Confidential © dip Corporation. 今のデプロイの改善したいところ ● デプロイ用ツールのJenkinsの管理が属人化している ○ ● 操作手順が多く手動での操作が必要 ○ ● せっかくAWSなのにデプロイは外部ツール ○ ● インフラチームとアプリチームが縦割りになっている 21

Slide 22

Slide 22 text

Confidential © dip Corporation. 今回意識したこと ● デプロイ用ツールのJenkinsの管理が属人化している ○ デプロイ用の資材の管理を標準化したい ● 操作手順が多く手動での操作が必要 ○ できる限り手順を自動化したい ● せっかくAWSなのにデプロイは外部ツール... ○ CI/CDもAWSで完結させたい ● インフラチームとアプリチームが縦割りになっている ○ インフラとアプリをONE TEAMにしたい 22

Slide 23

Slide 23 text

Confidential © dip Corporation. できあがったもの 23

Slide 24

Slide 24 text

Confidential © dip Corporation. Fargateを用いたデプロイフロー 24

Slide 25

Slide 25 text

Confidential © dip Corporation. Fargateを用いたアプリケーションの構成図 25 ● GitHub上でソースをマージする

Slide 26

Slide 26 text

Confidential © dip Corporation. Fargateを用いたアプリケーションの構成図 26 ● マージをトリガーにCodebuildが動く ○ PHPUnitの実行 ○ PHPInsightsの実行 ○ Laravel Mixの実行 ○ Laravel キャッシュの生成

Slide 27

Slide 27 text

Confidential © dip Corporation. Fargateを用いたアプリケーションの構成図 27 ● ビルドに成功したら ECRにdocker imageを S3に後続処理で使うソースを それぞれ配置

Slide 28

Slide 28 text

Confidential © dip Corporation. Fargateを用いたアプリケーションの構成図 28 ● S3へのPushをトリガーに CodePipeline実行

Slide 29

Slide 29 text

Confidential © dip Corporation. Fargateを用いたアプリケーションの構成図 29 ● CodePipelineがCodeDeployを実行

Slide 30

Slide 30 text

Confidential © dip Corporation. Fargateを用いたアプリケーションの構成図 30 ● CodeDeployがECRのimageと S3内のコードを基に 新規環境を待機系として生成

Slide 31

Slide 31 text

Confidential © dip Corporation. Fargateを用いたアプリケーションの構成図 31 ● 待機系と本番系を入れ替える

Slide 32

Slide 32 text

Confidential © dip Corporation. 結果 32

Slide 33

Slide 33 text

Confidential © dip Corporation. 結果 ● デプロイ用ツールのJenkinsの管理が属人化している ○ ● 操作手順が多く手動での操作が必要 ○ ● せっかくAWSなのにデプロイは外部ツール ○ ● インフラチームとアプリチームが縦割りになっている 33

Slide 34

Slide 34 text

Confidential © dip Corporation. 結果 ● デプロイ用ツールのJenkinsの管理が属人化している ○ ソースと同じリポジトリで管理することで標準化された ● 操作手順が多く手動での操作が必要 ○ ● せっかくAWSなのにデプロイは外部ツール... ○ ● インフラチームとアプリチームが縦割りになっている 34

Slide 35

Slide 35 text

Confidential © dip Corporation. 結果 ● デプロイ用ツールのJenkinsの管理が属人化している ○ ソースと同じリポジトリで管理することで標準化された ● 操作手順が多く手動での操作が必要 ○ 待機系と本番系の入れ替え以外は自動で実行されるようになった ● せっかくAWSなのにデプロイは外部ツール... ○ ● インフラチームとアプリチームが縦割りになっている 35

Slide 36

Slide 36 text

Confidential © dip Corporation. 結果 ● デプロイ用ツールのJenkinsの管理が属人化している ○ ソースと同じリポジトリで管理することで標準化された ● 操作手順が多く手動での操作が必要 ○ 待機系と本番系の入れ替え以外は自動で実行されるようになった ● せっかくAWSなのにデプロイは外部ツール... ○ CI/CDをAWSで完結できた ● インフラチームとアプリチームが縦割りになっている 36

Slide 37

Slide 37 text

Confidential © dip Corporation. 結果 ● デプロイ用ツールのJenkinsの管理が属人化している ○ ソースと同じリポジトリで管理することで標準化された ● 操作手順が多く手動での操作が必要 ○ 待機系と本番系の入れ替え以外は自動で実行されるようになった ● せっかくAWSなのにデプロイは外部ツール... ○ CI/CDをAWSで完結できた ● インフラチームとアプリチームが縦割りになっている ○ インフラとアプリで相談しながら一緒に作り上げた 37

Slide 38

Slide 38 text

Confidential © dip Corporation. 最後に総括 38

Slide 39

Slide 39 text

Confidential © dip Corporation. 総括(やってみてどうだったか) ● インフラチームとの役割の線引きが一番困った ○ Terraformなど環境の用意はインフラ ○ yamlファイルなど環境に乗せるものはアプリ ● コンテナなので一度作ると環境の複製は楽だった ● このノウハウを社内でどう展開していくかが今後の課題 39

Slide 40

Slide 40 text

Confidential © dip Corporation. 40