0

我正在处理“修补 AMI 并更新 Auto Scaling 组”并按照 AWS文档进行配置,但我卡在“任务 3:创建运行手册、修补 AMI 并更新 Auto Scaling 组”并出现以下错误. 为了解决这个问题,我在启动实例(startInstances)时添加了“用户数据”。因为它只接受base64,所以转换并提供了base64(UmVzdGFydC1TZXJ2aWNlIEFtYXpvblNTTUFnZW50Cg==)。

我尝试使用以下用户数据执行但两者都不起作用,即使我尝试使用相同的命令应用新步骤但未能修补 AMI。

  1. 尝试了以下脚本:

    <powershell> powershell.exe -Command Start-Service -Name AmazonSSMAgent </powershell> <persist>true</persist>

  2. 尝试启动并重新启动 SSM 代理。

    Restart-Service AmazonSSMAgent
    

    base64:UmVzdGFydC1TZXJ2aWNlIEFtYXpvblNTTUFnZW50Cg==

YAML 示例:

mainSteps:
  - name: startInstances
    action: 'aws:runInstances'
    timeoutSeconds: 1200
    maxAttempts: 1
    onFailure: Abort
    inputs:
      ImageId: '{{ sourceAMIid }}'
      InstanceType: m3.large
      MinInstanceCount: 1
      MaxInstanceCount: 1
      SubnetId: '{{ subnetId }}'
      UserData: UmVzdGFydC1TZXJ2aWNlIEFtYXpvblNTTUFnZW50Cg==

不过,我看到以下错误。

Step timed out while step is verifying the SSM Agent availability on the target instance(s). SSM Agent on Instances: [i-xxxxxxxx] are not functioning. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.

您的建议/解决方案对我有很大帮助。谢谢你。

4

1 回答 1

0

我已经解决并解决了这个问题。

问题是实例上缺少安全组。要将 SSM 服务的 SendCommand API 与实例上的 SSM 代理通信,需要一个允许 HTTPS 端口 443 的安全组。我附加了允许 443 端口的 SG,然后 SSM 代理可以与 EC2 实例通信。

EC2 实例 IAM 角色应附加 SSM 代理完全访问策略。

当 SSM 代理未在 EC2 实例上运行时,我们可能会遇到同样的问题,因为我们需要在系统管理器文档上提供用户数据或在 YAML 或 JSON 中添加新步骤。

如果您正在处理 Windows 实例,请使用以下脚本启动 SSM 代理。如果其 Linux 服务器使用 Linux 脚本/命令。

{
  "schemaVersion": "2.0",
  "description": "Start SSM agent on instance",
  "mainSteps": [
    {
      "action": "aws:runPowerShellScript",
      "name": "runPowerShellScript",
      "inputs": {
        "runCommand": [
          "Start-Service AmazonSSMAgent"
        ]
      }
    }
  ]
}
于 2021-12-29T16:02:09.113 回答