- 導入
- PJのDocker化
- イメージをECS上で動かす
- CodePipelineを使った自動デプロイ <= イマココ
ECSで動くようにしただけではソースに変更があるたびにECRにプッシュしなくてはなりません。
さすがにそんな手間をかけてられないのでCodePipelineを使用してgit push
したら自動でデプロイされるようにします。
#Gitリポジトリを作成
既存PJなら存在してるはず。
なくてもとりあえず作っちゃえばいけます。
#CodePipelineを作成
CodePipelineは3つのステージに分かれてます。
今回はDockerを使うので役割は下記。
- Source:ソースコードをpullしてくる
- Build:pullしたコードを
Docker build
する - Deploy:ビルドしたコードを反映したタスクを立ち上げる
コンソールからCodePipelineを作成するとこの3つのステージを順番に設定する流れになりますが、地味に時間がかかってセッション切れになるので飛ばせるステージは飛ばすのを推奨
##Sourceステージ作成
・Gitリポジトリがあるサービス
・リポジトリ名
・ブランチ名
を指定できます。
これを指定すると、「そのブランチに変更があった時」を検知して自動でpullと一連のデプロイ処理が走ります。
今回はCodeCommitを指定しました。
##Buildステージ作成
ビルドプロジェクトを指定できます。
別途作成が必要です。
###ビルドプロジェクトの作成
buildspec.ymlを使用してビルドコマンドを作成します。
ビルド時にはこのファイルに記述したコマンドが走るので、Dockerの場合は初めにECRにプッシュする時に使った一連のコマンドを記述します。
「ビルドプロジェクトでのみ使用する環境変数」もコンソールから指定できるので、検証環境と本番環境で違う変数はこちらを使用します。
##Deployステージ作成
ビルドしたソースを本番反映する処理を選択します。
ECSの場合は、
・クラスター名
・サービス名
を指定します。
「イメージタグを指定したい」という場合は、「イメージ定義ファイル - オプショナル」にjsonファイルを指定し、ビルドプロジェクト内でそのjsonを作成します。
https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/file-reference.html
#デプロイテスト
ここまで作成したら初回デプロイが走るはず。
エラーが出ていたらログを確認しながら対応します。
#まとめ
コンソールはだいぶ親切で罠はあまりない印象でしたが、ECSへデプロイする場合、「コンテナへアクセスする権限」をきっちり入れないと失敗します。
実はこれは編集で入れられない項目なので間違えたら作り直すしかなかったり。。
まあログの場所はわかりやすいので調査はしやすいです。