プライベートなCodeBuild環境からCodeCommitにアクセスしました
いわさです。
CodeBuildでのビルド実行時にVPC内部のプライベートなリソース(RDSなど)にアクセスしたい場合、CodeBuildのビルド環境の設定で、VPC設定を行うことで、VPC上でコンテナが実行されアクセスできるようになります。
Amazon Virtual Private Cloud による AWS CodeBuild の使用
その際に、CodeBuildに設定したVPC/サブネットが外部へのアクセスが許されていない場合はCodeCommitにもアクセスできないだろうということで、CodeCommitのVPCエンドポイントを試しました。
NATが解決してくれそうですが、使えない場合を想定しています。
サンプルソースコード用意
コードやBuildSpecの中身については本日は言及しません。
以下のサンプルでサッとCodeBuildの設定をして、動作確認していきたいと思います。
コンソールを使用した AWS CodeBuild の開始方法
S3で実行
まずはサンプルに従って、S3をソースに実行してみます。
成功しました。
CodeCommitで実行
次にコード一式をCodeCommitのリポジトリへプッシュし、ソースに実行してみます。この時点ではVPC設定を行いません。
成功しました。
プライベートサブネット上に配置し実行
ビルド環境にてVPC設定を行い、プライベートサブネット上で実行してみます。
ビルドプロジェクト -> ビルドの詳細タブ の 環境セクションを編集します。
VPCとプライベートサブネットを設定して、「VPC設定の確認」を押します。
CodeBuild が、サブネット ID が subnet-098ae8c8af58c2650 であるターゲット NAT ゲートウェイの 0.0.0.0/0 送信先を見つけられないため、IDが vpc-084db422d9f7f52f1 である VPC が、インターネットに接続していない可能性があります
上記警告が出ますが、無視して進めます。
失敗しました。
DOWNLOAD_SOURCEフェーズでタイムアウトしていました。
CodeCommitのエンドポイントを作成し実行
AWS CodeCommit とインターフェイス VPC エンドポイントの使用
VPCからCodeCommitのエンドポイントを作成します。
com.amazonaws.ap-northeast-1.git-codecommit
を使います。
セキュリティグループは、CodeBuildで設定したセキュリティグループからのHTTPSインバウンドを許可しておきます。
DOWNLOAD_SOURCEフェーズに成功しました。
しかし実行結果のログが確認できません。
Logsのエンドポイントを作成し実行
com.amazonaws.ap-northeast-1.logsのエンドポイントを作成します。
git-codecommitと同様にCodeBuildからのHTTPSインバウンドだけ許可します。
成功しました。
実行結果のログも確認出来ました。
まとめ
CodeCommitのVPCエンドポイントでプライベートなCodeBuild環境からアクセスすることが出来ました。
しかし、サンプルではMavenのインストールなどで外部へのアクセスが必要だったため、BUILDフェーズ以降は失敗してしまいました。
このように環境構築時に外部パッケージをダウンロードをすることは往々にしてあると思います。
外部アクセス出来ない場合は、カスタムコンテナイメージなどでパッケージのインストールを済ませておくのが良いかなと思っています。
また、この記事ではCodeCommitとCodeBuildのみで構成しましたが、ソースプロバイダーがCodePipelineの場合はまた別の問題が出てきますのでご注意ください。