web-dev-qa-db-ja.com

VPC設定のあるCodeBuildがCodeCommitソースのダウンロードに失敗する

最初は、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の両方にアクセスできるようにするにはどうすればよいですか?

3
twiz

VPCベースのCodeBuildがアクセスできるものは、CodeBuildコンテナに使用しているサブネット構成によって異なります。

プライベートサブネットに配置する場合は、サブネットがNATゲートウェイ経由のインターネットアクセス用に構成されていることを確認してください

パブリックサブネットで実行している場合は、デフォルトでパブリックIPを割り当てるように構成されていることを確認してください

詳細については、この回答を参照してください:VPC内のパブリックおよびプライベートサブネット

また、他の制限がないことを確認してください。セキュリティグループがインターネットへのアウトバウンドアクセスを許可している、NACLが設定されていない、など。


簡単なテスト:は、CodeBuildコンテナーを実行しているのと同じサブネットで小さなEC2インスタンスを起動し、そこからcodebuildエンドポイントに到達できるかどうかテストします(例:curl https://mypipeline-artifactstorebucket.../PKGw3xs)。

言い換えると:はい、CodeBuildはVPCで実行でき、引き続きCodeCommitにアクセスできますが、サブネットネットワーク構成は正しい必要があります。

それが役に立てば幸い:)

2
MLu

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はVPCに関連付ける必要があります。 CodeBuildがVPCにENI(プライベートIPアドレス、効果的に)を割り当てることを想像します。
  • CodeBuildは、VPC CIDR範囲への下りを許可するセキュリティグループに関連付ける必要があります。 CodeCommiを呼び出していないため、イングレスルールは必要ないようです。
  • Git-codecommitインターフェースのエンドポイントが必要です(com.amazonaws.ap-southeast-2.git-codecommit)
  • Git-codecommitエンドポイントは、CodeBuildからの入力を許可するセキュリティグループに関連付ける必要があります。これを行う最も簡単な方法は、おそらくVPC範囲からのイングレスを許可することですが、おそらく、CodeBuildがイングレスに使用するセキュリティグループを参照するだけで済みます。
  • インターネットへのゲートウェイ/ルートが存在するかどうかは関係ありません。私は最初、インターネットアクセスのないプライベートサブネットでこれを実行していましたが、インターネットゲートウェイを追加し、VPCに関連付けてから、サブネットをインターネットゲートウェイ(0.0.0.0/0)にルーティングしました

これが他の誰かがCodeBuildまたはCodePipelineをVPCに接続してEC2、RDS、ECS、またはその他のサービスにデプロイするのに役立つことを願っています。

0
Tim

私がconfiguredしたときに私はそのようなエラーがありました

    Type: AWS::CodeBuild::Project
    Properties:
        Source: 
            BuildSpec: buildspec-ProdCf.yml
            ....

しかし、実際にはymlファイルはサブディレクトリにありました。

0
Putnik