0

我想在新启动的实例上通过 boto3 运行一系列 bash 命令。

从一些研究来看,似乎需要将这个新实例与 SSM 相关联才能实现这一目标。

以下是否有任何明显的错误或遗漏的步骤?还有更好的方法来实现既定目标吗?

第 1 步 - 获取客户和资源

import boto3

ec2c = boto3.client('ec2')
ec2r = boto3.resource('ec2')
ssmc = boto3.client('ssm')

第 2 步 - 创建并等待实例

instances = ec2r.create_instances(
    ImageId = 'ami-####',
    InstanceType = 't2.micro',
    MinCount = 1,
    MaxCount = 1,
    SecurityGroupIds = ['sg-####'])

instance_ids = [i.id for i in instances]
instance = instances[0]

instance.wait_until_running()

第 3 步 - 将实例与 IAM 配置文件关联

“角色名称”AmazonEC2RoleforSSM附加了策略

res = ec2c.associate_iam_instance_profile(
    IamInstanceProfile={
        'Arn': 'arn:aws:iam::###:instance-profile/RoleName',
        'Name': 'RoleName'
    },
    InstanceId = instance.id
)

第 4 步 - 检查关联

print(ssmc.describe_instance_information()['InstanceInformationList'])

> []

(我认为这个空列表是下一步失败的原因)

第 5 步 - 运行命令

resp = ssmc.send_command(
    DocumentName = "AWS-RunShellScript",
    Parameters = {'commands': [mkdir app]},
    InstanceIds = instance_ids
)

> botocore.errorfactory.InvalidInstanceId: An error occurred ...
> ... (InvalidInstanceId) when calling the SendCommand operation:
4

1 回答 1

0

You're getting the InvalidInstanceId exception because the ssm agent is not running on your instance.

于 2018-01-15T04:45:41.490 回答