Amazon web services AWS CodeDeploy不可能同时跨多个可用性区域部署?

Amazon web services AWS CodeDeploy不可能同时跨多个可用性区域部署?,amazon-web-services,aws-code-deploy,Amazon Web Services,Aws Code Deploy,在屏幕截图下方,它似乎只在一个可用区域成功。 我检查了一个失败实例的codedeploy日志,发现有一个错误,我认为它被识别为内部部署实例 2018-01-10 04:40:22信息[codedeploy agent(2696)]:本地配置文件不存在或不可读 2018-01-10 04:40:43错误[codedeploy agent(2696)]:codedeploy实例代理服务:codedeploy实例代理服务:启动或运行期间出错:InstanceMetadata::InstanceMet

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

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

2018-01-10 04:40:22信息[codedeploy agent(2696)]:本地配置文件不存在或不可读

2018-01-10 04:40:43错误[codedeploy agent(2696)]:codedeploy实例代理服务:codedeploy实例代理服务:启动或运行期间出错:InstanceMetadata::InstanceMetadataError-环境变量AWS_region中未提供EC2实例和区域。请使用环境变量AWS\U region指定您所在的地区

我已经为这个问题搜索了大约三天,但是AWS文档中没有提到。在生产环境中,我计划使用两个连接到自动缩放组的可用性区域。我不知道我是否忽略了除CodeDeploy之外的其他东西。。。我应该检查什么?先谢谢你

[更新] 我用ASG和ASG配置屏幕截图更新。没有什么特别的,这是vanila和默认流程。我在AWS支持中心等了5天,但仍在等待响应

自动缩放组-----

自动缩放组启动配置-----

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

  • 单击Ec2LaunchSettings中的“Shutdown with Syspre”按钮安全关闭服务器。然后,您可以将AMI创建为usal
  • 手动运行C:\ProgramData\Amazon\EC2 Windows\Launch\Scripts\InitializeInstance.ps1-计划脚本。参数“-Schedule”是必需的。然后,您可以将AMI创建为usal
  • 第一种方法是直观方便的方式(GUI),第二种方法适合于自动化powershell脚本。我已经证实,这两种方法都成功地部署到多个AZ。codedeployagent记录的日志中没有错误

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

    特别是在文件中,

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


    为什么不将ELB连接到codedeploy配置实例,在两个不同的实例中添加实例?@KushVyas我已经使用ELB+ASG组合进行了测试,但是如果可用性区域不同,它仍然无法部署。为了简化问题,我已经配置了这种情况。您可以尝试登录到ec2并发布命令
    curl的输出吗http://169.254.169.254/latest/meta-data
    @Ravi该实例似乎有问题。当我输入169.254.169.254时,我无法连接。另一方面,元数据在成功部署的实例上被正确地看到。这似乎就是问题所在。我的ASG启动配置的AMI有问题吗?我的AMI在ap-Southwest-1a,因此ap-Southwest-1b中的实例似乎无法部署。@Hyusu AMI因地区而不同,而不是因AZ而不同,因此只要您使用相同的AMI,它就应该可以工作。谢谢您的所有评论。
    C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule