最初は、CodeCommitリポジトリへのコミットによってトリガーされる単純なCodePipelineセットアップがあり、ソースコードをアーティファクトとして出力する「ステージ」と、CodeBuildを使用してそのソース出力からコードを実行する別の「ステージ」がありました。次に、CodeBuildの「ステージ」でRDSにアクセスしたいので、RDSのVPC設定をCodeBuildプロジェクトに追加しました。
問題は、CodeBuildがCodeCommitソースにアクセスできなくなったことです。次のエラーが表示されます。
CLIENT_ERROR: RequestError: send request failed caused by: Get https://mypipeline-artifactstorebucket-twlrq7tj45fq.s3.amazonaws.com/MYPipeline-data-pipe/RepoSource/PKGw3xs: dial tcp 52.216.160.35:443: i/o timeout for primary source and source version arn:aws:s3:::mypipeline-artifactstorebucket-twlrq7tj45fq/MYPipeline-data-pipe/RepoSource/PKGw3xs
CodeBuildプロジェクトにVPCを追加すると、デフォルト設定も削除されますか? (おそらく、元々はデフォルトのVPCを使用していましたか?)
CodeBuildがRDSとCodeCommitの両方にアクセスできるようにするにはどうすればよいですか?
VPCベースのCodeBuildがアクセスできるものは、CodeBuildコンテナに使用しているサブネット構成によって異なります。
プライベートサブネットに配置する場合は、サブネットがNATゲートウェイ経由のインターネットアクセス用に構成されていることを確認してください。
パブリックサブネットで実行している場合は、デフォルトでパブリックIPを割り当てるように構成されていることを確認してください。
詳細については、この回答を参照してください:VPC内のパブリックおよびプライベートサブネット
また、他の制限がないことを確認してください。セキュリティグループがインターネットへのアウトバウンドアクセスを許可している、NACLが設定されていない、など。
簡単なテスト:は、CodeBuildコンテナーを実行しているのと同じサブネットで小さなEC2インスタンスを起動し、そこからcodebuildエンドポイントに到達できるかどうかテストします(例:curl https://mypipeline-artifactstorebucket.../PKGw3xs
)。
言い換えると:はい、CodeBuildはVPCで実行でき、引き続きCodeCommitにアクセスできますが、サブネットネットワーク構成は正しい必要があります。
それが役に立てば幸い:)
VPCのRDSにコードをデプロイできるように、CodeBuildでCodeDeployからコードを取得しようとすると、同じ問題が発生しました。 CodeBuildがVPCの外部にある場合は、CodeCommitに正常に接続できましたが、CodeDeployをVPCに配置すると、エラーメッセージが表示されました
CLIENT_ERROR: Get https://git-codecommit.ap-southeast-2.amazonaws.com/v1/repos/repo-name/info/refs?service=name: dial tcp 1.2.3.4:443: i/o timeout for primary source and source version refs/heads/master
私はこれに関するドキュメントをまったく見つけることができなかったので、私は上記の記述に基づいて試行錯誤を行いました。何がうまくいくか、何がうまくいかないかを調べるために、かなりの数の組み合わせを試しました。これが私が見つけたものです:
これが他の誰かがCodeBuildまたはCodePipelineをVPCに接続してEC2、RDS、ECS、またはその他のサービスにデプロイするのに役立つことを願っています。
私がconfiguredしたときに私はそのようなエラーがありました
Type: AWS::CodeBuild::Project
Properties:
Source:
BuildSpec: buildspec-ProdCf.yml
....
しかし、実際にはymlファイルはサブディレクトリにありました。