AWS CodeDeploy无法同时跨多个可用区部署?

时间:2018-01-10 04:55:04

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

在屏幕截图下方,它似乎仅在一个可用区中成功。

我检查了codedeploy日志中是否有失败的实例,我发现有错误,我认为它被认为是一个内部部署的实例。

  

2018-01-10 04:40:22 INFO [codedeploy-agent(2696)]: On Premises配置文件不存在或不可读

     

2018-01-10 04:40:43错误[codedeploy-agent(2696)]:CodeDeploy实例代理服务:CodeDeploy实例代理服务:启动或运行期间出错:InstanceMetadata :: InstanceMetadataError - 不是EC2实例和区域环境变量AWS_REGION中未提供。请使用环境变量AWS_REGION .......

指定您的区域

我已经为这个问题搜索了大约三天,但AWS文档中没有提及。在生产环境中,我计划使用附加到自动缩放组的两个可用区。我想知道我是否忽略了除CodeDeploy之外的其他事情......我该怎么办?提前谢谢。

[更新] 我用ASG和ASG Config screent shot更新了。没有什么特别的,它是vanila和默认流程。我在AWS支持中心等待了5天,但仍在等待回复。

Auto Scaling Group ----- Auto Scaling Group

Auto Scaling Group启动配置----- Auto Scaling Group Launch Config

1 个答案:

答案 0 :(得分:2)

最后,我发现了为什么codedeploy在Windows 2016上跨多个可用区域失败的原因。此外,这个问题似乎是Windows 2016 EC2本身的问题,而不是ASG或codedeploy(我还没有在linux上测试过)。我找到了两种解决方案,

  1. 单击Ec2LaunchSettings中的“使用Syspre关闭”按钮,安全关闭服务器。然后你可以创建AMI作为用户。
  2. Ec2LaunchSetting GUI

    1. 手动运行C:\ ProgramData \ Amazon \ EC2-Windows \ Launch \ Scripts \ InitializeInstance.ps1 -Schedule脚本。参数“-Schedule”是必需的。然后你可以创建AMI作为用户。
    2. InitializeInstance.ps1

      第一种方法是直观方便的方式(GUI),第二种方法适用于自动化PowerShell脚本。我已经确认这两种方法都可以成功部署到多个AZ。 codedeployagent记录的日志中没有错误。

      更具体地说,codedeployagent在部署时会留下各种日志,我发现代理似乎使用了169.254.169.254中的元信息。当我失败时,日志会说“你是On-Premise Instance。”。可能部署失败,因为实例无法获取元信息。在下面的文档中,我收到了很多帮助,列出了我的所有解决方案。

      https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html

      特别是在文件中

        

      .....在Windows PowerShell中,运行以下命令,以便系统将脚本计划为作为Windows计划任务运行。该脚本在下次引导期间运行一次,然后禁止这些任务再次运行....

      C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule