プライベートなCodeBuild環境から、CodePipelineを使ってCodeCommitにアクセスしました
いわさです。
先日プライベートなVPC環境でCodeBuildからCodeCommitへアクセスすることが出来ました。
プライベートなCodeBuild環境からCodeCommitにアクセスしました
CodeBuild単体で使用している場合は動作しますが、CodePipelineを組み合わせた環境の場合、失敗します。
今日はソースプロバイダをCodePipelineにした場合でも同環境でアクセスできるように設定を変更します。
ソースプロバイダの変更
ソースプロバイダをCodePipelineにするには、CodePipelineの新規作成フローの中で、CodeBuildの新規作成を行う必要があります。
ビルドステージを追加するメニューにてプロジェクトの新規作成を行います。
左がCodeBuildから新規作成した場合、右がCodePipelineから新規作成した場合です。
CodePipelineから新規作成した場合はソースプロバイダの選択が省略されます。
作成すると、ソースプロバイダが"CodePipeline"になります。
冒頭で触れた先日の記事では、CodeCommitへのVPCエンドポイントを作成することで、VPC上で実行されたCodeBuildコンテナからCodeCommitにアクセスし、ソースコードのダウンロードを行うことが出来ました。
まず、今回同じ設定状態でどうなるか試してみます。
DOWNLOAD_SOURCEフェーズでタイムアウトしました。
CodeCommit権限の付与
CodePipelineから新規作成したCodeBuildプロジェクトを単体実行してみてください。
もしそれで認証エラーが起きる場合はCodeCommitを操作するポリシーを付与する必要があります。
対象ロールはCodeBuildの環境セクションに記載されているロールです。
単体実行で認証エラーが起きなくなったあとにもう一度CodePipelineから再実行します。
まだ、DOWNLOAD_SOURCEフェーズでタイムアウトが発生すると思います。
S3 VPCエンドポイントの作成
ソースプロバイダが"CodePipeline"の場合、CodeBuildがgitリポジトリからソースコードをダウンロードするのではなく、CodePipelineによってCodeCommitとCodeBuildの間の受け渡しを行います。
CodePipelineはステージ間の受け渡しにAmazon S3を使用しています。
よってここではプライベートなVPC上のCodeBuild環境からS3にアクセスする必要があるため、S3のVPCエンドポイントが必要になります。
逆に、先日作成した git-codecommitのVPCエンドポイントは不要になります。(logsは必要)
これで実行してみます。
成功しました!
これで、カスタムコンテナイメージを用意するなどすればVPCエンドポイントで完結するプライベートな環境が作成できそうです。