【问题标题】:InvalidInstanceId: An error occurred (InvalidInstanceId) when calling the SendCommand operationInvalidInstanceId:调用SendCommand操作时发生错误(InvalidInstanceId)
【发布时间】:2018-04-12 14:04:33
【问题描述】:

以下是我从 python 运行以在 aws ec2 实例中执行命令的代码

import boto3
ec2 = boto3.client('ssm',region_name='us-east-1',aws_access_key_id='xxxxxxxxxxxxxxx',aws_secret_access_key='xxxxxxxxx')
a = ec2.send_command(InstanceIds=ids, DocumentName='AWS-RunShellScript', Comment='abcdabcd', Parameters={"commands":["ifconfig"]})

但它给出了以下错误

InvalidInstanceId: An error occurred (InvalidInstanceId) when calling the SendCommand operation: 

【问题讨论】:

  • ids 是有效的 EC2 实例 ID 列表吗?错误消息说它不是。
  • @MarkB......id 是有效的......我已经检查了
  • ids 是列表还是单个字符串?它希望它是一个列表。
  • @MarkB.... ids = ['i-0ce6exxxx2e3xxxx'].....ids 是一个列表
  • 那个实例在us-east-1区域?

标签: python amazon-web-services amazon-ec2 boto3


【解决方案1】:

以下情况可能会导致此错误消息:

  • 实例 ID 无效(在您已验证的 cmets 中无效)
  • 实例位于不同的区域(在您已验证的 cmets 中不是)
  • 实例当前未处于正在运行状态
  • 实例没有安装和运行AWS SSM agent

您需要登录 AWS EC2/SSM 控制台并确保您尝试管理的实例显示在 SYSTEMS MANAGER SHARED RESOURCES - 托管实例 列表,并且他们显示 Ping 状态 在线。如果没有,您需要在尝试向相关实例发送命令之前修复该问题。

【讨论】:

  • 您必须创建策略 AmazonSSMFullAccess 并将其附加到机器上(这可能比您需要的更广泛)但这就是为什么它对我不起作用...您可以通过单击来做到这一点on(在 ec2 实例上选择时)Action > Instance Settings > Attach/Replace IAM Role 然后为具有该权限的 ec2 创建一个角色,然后附加,应该需要大约 5-10 分钟才能在SYSTEMS MANAGER SHARED RESOURCES - Managed Instances 中弹出标记提及。
  • 在终止:等待状态下尝试运行命令时遇到同样的错误。根据文档,应该可以使用运行命令,但我无法使其工作。当实例处于运行状态时,代码可以正常工作。
  • 像 Mark 所写的那样安装了 SSM 代理,并像 Glen 所写的那样创建了 IAM 角色。没用。然后我重新启动了 EC2 实例并且它工作了。也许这对某人有帮助。
  • @Joshi 如果重新启动服务器修复了它,那么听起来 SSM 代理在安装后实际上并没有运行。
  • 我的实例未显示在 Systems Manager > 会话管理器 > 启动会话中。对于用户,我必须添加一个新的内联策略,如下所示: { "Version": "2012-10-17", "Statement": [ { "Sid": "PassRole", "Effect": "Allow", "行动”:[“iam:PassRole”],“资源”:[“arn:aws:iam:::role/*”]}]}
【解决方案2】:

确保您的实例具有SSM setup。对于 Linux,您需要使用 Amazon Linux AMI 或手动安装。

运行:

aws ssm describe-instance-information --output text

从您的实例中查看 SSM 代理版本。因此,请确保您的实例在该列表中。

另请参阅:SSM send command to EC2 instance Failed

【讨论】:

    【解决方案3】:

    我收到了完全相同的错误消息,问题是 aws 中的 boto3 版本。

    当我将 boto3 添加为 lambda 层时,lambda 代码运行良好。

    【讨论】:

    • 我在 lambda 中遇到了同样的错误,但在本地工作。 boto3 作为 lambda 层是什么意思?
    【解决方案4】:

    您必须确保在您的实例上安装了 SSM 代理,它在一些 AMI 上带有 preinstalled

    另外,最终对我有用的是通过AWS Systems Manager service 上的设置。快速设置非常轻松,只需运行几分钟即可。在我运行快速设置并直接在 Systems Manager 上测试我的命令后,我的 Lambda 函数也成功运行。

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 2018-06-08
      • 2020-01-19
      • 1970-01-01
      相关资源
      最近更新 更多