記事の概要
本記事では以下の構成となるようAWSリソースを作成していきます。
以下の記事で、S3に配置したソースコードからDockerイメージを作成し、ECRへpushする部分をCodeBuidで自動化しました。
DockerイメージのビルドとAmazon ECRへのプッシュをCodeBuildで自動化する
この状態だと、S3にzip化したソースコードをアップロードした後、逐一CodeBuildプロジェクトを実行する必要があります。本記事では、S3へのアップロードを検知したら自動でCodeBuildプロジェクトを実行するようにCodePipelineを設定するまでの手順を紹介します。
作成済みリソースの変更
CodePipelineでS3へのソースコードのアップロードを検知し、CodeBuildの実行をするにあたって、S3とCodeBuildをそれぞれ変更する必要があります。
S3バージョニングの有効化
下記のとおり、CodePipelineのソースにS3を指定する場合、S3のバージョニングを有効化する必要があります。
注記
ソースバケットを作成するときは、バケットでバージョニングを有効にしてください。
https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/action-reference-S3.html
バージョニングを有効化していない場合は、該当のS3バケットの「プロパティ」タブから変更します。
- バケットのバージョニングで「編集」ボタンをクリックし、バケットのバージョニングを「有効にする」を選択
ソースコードをzip化する
CodePipelineでは、必要なソースコードをzipで圧縮する必要があります。今回は、app.py
と Dockerfile
, buildspec.yml
の3つのファイルを圧縮して再アップロードします。
Codebuildの変更
ソースコードのzip化に合わせて、CodeBuildプロジェクトのソースの設定を変更します。
- ビルドプロジェクトを開いて「編集」ボタンをクリックし、「ソース」セクションで「S3 オブジェクトキーまたは S3 フォルダ」にアップロードするzipファイルの名前を入力
CodePipelineの設定
今回は、ソースコードの置き場などを設定する「ソースステージ」と、Codebuildで行っていた「ビルドステージ」の2つを設定します。デプロイステージの作成はスキップします。
ソースステージの設定
- CodePipelineの画面で「パイプラインを作成する」ボタンをクリック
- Create optionsは「Build custom pipeline」を選択
- パイプライン名は任意の値を入力し、他はデフォルトの設定のままにする
- ソースの設定で、ソースプロバイダーは「Amazon S3」を選択し、S3の構成に従って「バケット」と「S3 オブジェクトキー」を入力する。検出オプションは「Amazon CloudWatch Events (推奨)」を選択
S3 オブジェクトキーには、アップロードするzipファイル名まで含めること
ビルドステージの設定
- ビルドのプロバイダーは「Other build providers」を選択し、「AWS CodeBuild」を指定して、プロジェクト名に作成済みのビルドプロジェクトを指定する
- デプロイステージは追加しないため、「スキップする」ボタンをクリックしてパイプラインを作成する
パイプラインが作成されると同時に、実行されます。
動作確認
S3の指定したパスに、指定したファイルをアップロードする(今回だと、<s3バケット名>/build-resource
に artifact.zip
をアップロードする)と、自動でパイプラインのなかでビルドプロジェクトが実行されます。
パイプラインの実行が成功したら、ビルドプロジェクトが実行され、buildspecで指定したECRに新しいイメージが追加されているはずなので、それぞれ確認してみましょう。
- パイプライン
- ビルドプロジェクト
この記事はここまでとなります。
Next:
ここまでの設定内容をIaCで実装する▼
CDKで一発作成!S3→Codebuild→ECRでDockerイメージをpushするCodePipeline