AWS CodeBuild 在 DOWNLOAD_SOURCE 上失败 - CLIENT_ERROR

我现在在 DOWNLOAD_SOURCE 阶段遇到 CodeBuild 失败。

CLIENT_ERROR: RequestError: send request failed caused by: Get "https://codepipeline-us-east-1-215861945190.s3.amazonaws.com/diag-upload-pipe/SourceArti/jiUJWyf": dial tcp 52.217.106.244:443: i/o timeout for primary source and source version arn:aws:s3:::codepipeline-us-east-1-215861945190/diag-upload-pipe/SourceArti/jiUJWyf

我尝试添加 S3 权限以实现完全访问无济于事。我还尝试在此处的评论中遵循 Ryan Williams 的建议: DOWNLOAD_SOURCE Failed AWS CodeBuild

仍然无法克服这个错误。

我有我的 VPC

  • VPC(rtb05b) 路由的主路由表 - 具有本地目标的 10.0.0.0/16 和具有 nat-0ad 目标的 0.0.0.0/0
  • 子网关联 - subnet-0a7
  • subnet-0a7 路由 10.0.0.0/16 与本地目标和 0.0.0.0/0 与 nat-0ad 目标
  • 混合路由路由表 - rtb-026 路由 10.0.0.0/16 与本地目标和 0.0.0.0/0 与互联网网关 igw-0305 目标
  • 混合路由表的关联子网是私有子网和公共子网

我觉得路由肯定有问题,因为存在 i/o 超时,但我终其一生都无法弄清楚我哪里出错了。

stack overflow AWS CodeBuild Fails on DOWNLOAD_SOURCE - CLIENT_ERROR
原文答案

答案:

作者头像

我遇到了完全相同的问题。就我而言,这是由于 CodeBuild 中的安全组出口设置所致。

这是我使用 CloudFormation 构建资源时所做的。

步骤 1:为 CodeBuild 创建一个安全组

  CodeBuildSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !Ref VPC

第 2 步:设置 Egress 以允许所有出站流量到第 1 步中创建的 SecurityGroup。

  CodeBuildEgressAllAccess:
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
      GroupId: !Ref CodeBuildSecurityGroup
      CidrIp: '0.0.0.0/0'
      FromPort: -1
      ToPort: -1
      IpProtocol: '-1'

第 3 步:设置出口以允许出站流量连接到 RDS MySQL。

  CodeBuildEgressToMySQL:
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
      GroupId: !Ref CodeBuildSecurityGroup
      DestinationSecurityGroupId: !Ref RdsMySQLSecurityGroup
      FromPort: 3306
      ToPort: 3306
      IpProtocol: tcp

当我使用此内容部署堆栈时,允许进入 SecurityGroup for CodeBuild 的唯一出站流量是 RDS MySQL。

在第 2 步中创建的所有允许的出口规则都被忽略。因此,诸如 Internet、S3 等的出站流量将被拒绝。

作者头像

您的构建项目环境应该只属于私有子网,它在路由表中有 0.0.0.0/0 到 NAT 的路由。还要检查他们的安全组以允许 https 请求。

相关问题