AWS CodeDeploy无法同时部署在多个可用区中吗?

cod*_*282 5 amazon-web-services aws-code-deploy

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

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

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

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

我已经搜索了大约三天的时间来解决此问题,但是AWS文档中没有提及。在生产环境中,我计划使用附加到自动缩放组的两个可用区。我想知道我是否忽略了CodeDeploy之外的其他内容。我应该检查什么?先感谢您。

[更新]我更新了ASG和ASG Config屏幕快照。没什么特别的,它是vanila和默认过程。我从AWS支持中心等待了5天,但仍在等待响应。

Auto Scaling组----- Auto Scaling组

Auto Scaling组启动配置----- Auto Scaling组启动配置

cod*_*282 3

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

  1. 单击 Ec2LaunchSettings 中的“Shutdown with Syspre”按钮安全关闭服务器。然后您就可以像往常一样创建 AMI。

Ec2Launch设置 GUI

  1. 手动运行 C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule 脚本。参数“-Schedule”是必需的。然后您就可以像往常一样创建 AMI。

初始化实例.ps1

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

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

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

特别是在文档中

.....在 Windows PowerShell 中,运行以下命令,以便系统安排脚本作为 Windows 计划任务运行。该脚本在下次启动期间运行一次,然后禁用这些任务再次运行......

C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
Run Code Online (Sandbox Code Playgroud)