我在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网关更改它以允许公共(public)访问时
具有以下路由表的AWS CodeDeploy已成功完成竞争。
XX.X.0.X/16 local
0.0.0.0/0 igw-0XXXXXXXXX

我是否还缺少其他配置?

最佳答案

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

要访问S3或Github服务,需要访问Internet才能访问(1)CodeDeploy service endpoints(2)-代理必须具有此访问权限,才能下载要部署的修订版的软件部署包。

CodeDeploy FAQs:



(3) CodeDeploy代理将定期check for software updates,并在新版本发布后的24小时内自动进行自我更新。正确配置的CodeDeploy代理实例将允许IAM S3访问AWS CodeDeploy Resource Kit Reference存储桶,以便它可以在可用时访问新软件。如果无法在此处提供更新访问权限,则在升级服务时可能会破坏您的实现,或限制对新功能的访问。

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

从aws-codedeploy-agent软件repository中,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

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

关于amazon-web-services - AWS CodeDeploy在私有(private)VPC中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48023692/

10-11 06:56