【问题标题】:AWS CodeDeploy not working in private VPCAWS CodeDeploy 在私有 VPC 中不起作用
【发布时间】:2017-12-30 10:02:01
【问题描述】:

我在 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

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

【问题讨论】:

    标签: amazon-web-services aws-code-deploy aws-vpc


    【解决方案1】:

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

    访问 (1) CodeDeploy service endpoints(2) 访问 S3 或 Github 服务需要出站 Internet - 此访问权限是必需的到代理下载正在部署的修订版的软件部署包。

    来自CodeDeploy FAQs:

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

    (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 软件 repositorydeploy_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
    

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

    【讨论】:

    • 感谢您的回答。当我将 NAT 网关配置为允许实例与外部网络通信时,我的问题得到了解决。
    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多