You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Boto3创建EC2实例并执行Linux命令时遇InvalidInstanceId错误

问题解决:SSM SendCommand提示实例状态无效

错误原因分析

你遇到的InvalidInstanceId错误,核心原因是EC2实例没有权限与AWS Systems Manager(SSM)服务通信,或者实例无法连接到SSM服务端点,导致SSM无法识别实例的有效状态。即使控制台状态检查通过,也不代表实例满足SSM的使用条件。

具体修复步骤

1. 给EC2实例添加SSM权限的IAM角色

SSM需要实例具备特定权限才能接收命令,你需要先创建一个带有AmazonEC2RoleforSSM托管策略的IAM角色(对应实例配置文件),然后修改创建实例的脚本,关联该角色:

import boto3
ec2 = boto3.resource('ec2')

# 替换为你的IAM实例配置文件名称
instance_profile_name = 'AmazonEC2RoleforSSM'

instance = ec2.create_instances(
        ImageId='ami-0b828c1c5ac3f13ee',
        MinCount=1,
        MaxCount=1,
        InstanceType='t2.micro',
        IamInstanceProfile={'Name': instance_profile_name}
)

print(f"实例ID: {instance[0].id}")

2. 确保实例能连接到SSM服务

  • 若实例在公有子网:确认实例已分配公网IP,且安全组允许**出站HTTPS(443)**流量到互联网。
  • 若实例在私有子网:需配置NAT网关,确保实例能通过NAT访问SSM服务端点。

3. 修正SendCommand脚本的细节

你的命令里echo前有多余空格,会导致执行异常,去掉后脚本如下:

import boto3
commands = ['echo "hello world"']
ssm_client = boto3.client('ssm')

output = ssm_client.send_command(
    InstanceIds=['你的实例ID'],
    DocumentName='AWS-RunShellScript',
    Parameters={'commands': commands}
)

print(output)

4. 验证SSM Agent状态(可选)

Amazon Linux 2默认预装SSM Agent,可通过控制台连接实例后执行以下命令检查运行状态:

sudo systemctl status amazon-ssm-agent

若未运行,启动服务:

sudo systemctl start amazon-ssm-agent

完成以上步骤后,等待2-3分钟让实例与SSM服务建立连接,再执行SendCommand即可成功。

内容的提问来源于stack exchange,提问作者rare77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:38:19