如何在 boto3 中为 AWS EC2 实例设置标签

How to set tags for AWS EC2 instance in boto3

我是 Boto3 的新手,想创建一个 VPC、子网和一些 ec2 实例。基本架构有一个 VPC,2 个不同可用性区域(us-east-1a 和 b)内的 2 个子网,并应用允许 SSHping 的安全组。

我的问题是如何为每个资源指定附加选项。 Python SDK(与 Javadoc 的工作方式不同)没有显示所需的参数和示例选项,所以我很困惑。

如何为资源指定 tags? (例如 ec2 实例)。我需要设置nameowner

instances2 = ec2.create_instances(ImageId='ami-095575c1a372d21db', InstanceType='t2.micro', MaxCount=1, MinCount=1, NetworkInterfaces=[{'SubnetId': subnet2.id, 'DeviceIndex': 0, 'AssociatePublicIpAddress': True, 'Groups': [sec_group.group_id]}])
instances2[0].wait_until_running()
print(instances1[0].id)

您需要 TagSpecifications 参数并将 'ResourceType' 设置为 'instance':

TagSpecifications=[
    {
      'ResourceType': 'instance',
      'Tags': [
        {
          'Key': 'name',
          'Value': 'foobar'
        },
        {
          'Key': 'owner',
          'Value': 'me'
        },
      ]
    },
  ],

它在文档中,但您确实需要知道您在寻找什么...

以下适用于 python 3.7 和 boto3 1.12.39

参考 - https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html?highlight=create_instances#EC2.ServiceResource.create_instances

    AMI = os.environ['AMI']
    INSTANCE_TYPE = os.environ['INSTANCE_TYPE']
    KEY_NAME = os.environ['KEY_NAME']
    SUBNET_ID = os.environ['SUBNET_ID']    

    TAG_SPEC = [
        {
        "ResourceType":"instance",
        "Tags": [
                {
                    "Key": "Name",
                    "Value": "EC2_INSTANCE_TEST_AUTOGENERATED"
                }
            ]
    }
    ]

    ec2 = boto3.resource('ec2')

    instance = ec2.create_instances(
        ImageId = AMI,
        InstanceType = INSTANCE_TYPE,
        KeyName = KEY_NAME,
        SubnetId = SUBNET_ID,
        TagSpecifications = TAG_SPEC,
        MaxCount = 1,
        MinCount = 1
        )