5

我在 VPC 中有私有子网,路由表如下:

XX.X.0.X/16 local
0.0.0.0/0 nat-0XXXXXXXXX

使用上述配置 AWS CodeDeploy 失败并出现错误,Error code: HEALTH_CONSTRAINTS因为/opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log.

但是,当我通过添加具有以下路由表的 Internet 网关将其更改为允许公共访问时,AWS CodeDeploy 成功完成。

XX.X.0.X/16 local   
0.0.0.0/0 igw-0XXXXXXXXX

我是否缺少任何其他配置?

4

1 回答 1

6

CodeDeploy 代理需要对 Internet 的出站访问才能访问 4 个不同的服务端点。为了使服务正常工作,需要访问所有这些端点。

访问(1) CodeDeploy 服务端点(2)访问 S3 或 Github 服务需要对 Internet 的出站访问 - 代理需要此访问权限才能下载正在部署的修订版的软件部署包。

来自CodeDeploy 常见问题解答:

...安装在 Amazon EC2 实例上的 AWS CodeDeploy 代理必须能够访问公共 AWS CodeDeploy 和 Amazon S3 服务终端节点。有关更多信息,请参阅 AWS CodeDeploy 终端节点和 Amazon S3 终端节点。

(3) CodeDeploy 代理会定期检查软件更新,并在新版本发布后 24 小时内自动更新。正确配置的 CodeDeploy 代理实例将允许 IAM S3 访问AWS CodeDeploy Resource Kit Reference存储桶,以便它可以在可用时访问新软件。未能在此处提供更新访问可能会在服务升级时破坏您的实施,或限制对新功能的访问。

(4)关于 CodeDeploy 命令和控制,代理的源代码显示了对特殊命令https端点的引用,称为AWS_DEPLOY_CONTROL_ENDPOINT

在 aws-codedeploy-agent 软件存储库中,该deploy_control_endpoint.rb文件具有以下内容:

require 'aws-sdk-core'

module Aws
  module Plugins
    class DeployControlEndpoint < Seahorse::Client::Plugin
      option(:endpoint) do |cfg|
        url = ENV['AWS_DEPLOY_CONTROL_ENDPOINT']
        if url.nil?
          url = "https://codedeploy-commands.#{cfg.region}.amazonaws.com"
          if "cn" == cfg.region.split("-")[0]
            url.concat(".cn")
          end
        end
        url
      end
    end
  end
end

虽然显然没有记录,但也需要访问此端点。

于 2017-12-30T01:05:54.977 回答