繁体   English   中英

Boto3 运行 ec2 后只返回一个实例 id

[英]Boto3 returns only one instance id after running ec2

以下代码根据给定要求运行实例,例如 3,但它创建标签、将负载均衡器目标组添加到仅一个实例也仅返回一个实例 ID,并跳过其余两个实例。

我不明白为什么,你能帮我吗?

import boto3
import json
import botocore
import os
import sys
from collections import defaultdict

AMI = 'ami-047a51fa27710816e'
INSTANCE_TYPE = 't2.micro'
KEY_NAME = 'mikey'
REGION = 'us-east-1'


client = boto3.client('ec2', region_name=REGION)
client= boto3.client('ec2')

def lambda_handler(event, context):

    instance = client.run_instances(
        ImageId=AMI,
        InstanceType=INSTANCE_TYPE,
        KeyName=KEY_NAME,
        MaxCount=3,
        MinCount=3
    )
    
    print ("New instance created:", instance)
    instance_id = instance['Instances'][0]['InstanceId']
    waiter = client.get_waiter('instance_running')
    waiter.wait(InstanceIds=[instance_id],
    WaiterConfig={
        'Delay': 15
    })
    print (instance_id)
    
    response_tags = client.create_tags(
    Resources=[
        instance_id,
    ],
    Tags=[
        {
            'Key': 'Name',
            'Value': 'test'
        },
    ]
    )
    print ("Tags added")
    clients=boto3.client('elbv2')

    response_tg = clients.register_targets(
        TargetGroupArn='arn:aws:elasticloadbalancing:us-east-1:123456789123:targetgroup/target-demo/c64e6bfc00b4658f',
        Targets=[
           {
            'Id': instance_id
           },
        ]
   )
    return ('Instance created', instance_id)

run_instances调用实际上将返回所有实例 id,您只是在处理其中一个。

这是您显式仅提取单个实例 id 的地方。

instance_id = instance['Instances'][0]['InstanceId']

你应该做的是用这样的方式处理所有这些:

instance = client.run_instances() # Your full call here
instance_ids = [item['InstanceId'] for item in instance['Instances']]

waiter = client.get_waiter('instance_running')
waiter.wait(InstanceIds=instance_ids)

#... now all your instances are running
response_tags = client.create_tags(
    Resources=instance_ids,
    Tags=[{"Key": "Name", "Value": "Test"}]
)

elb_client = boto3.client("elbv2")

response_tg = elb_client.register_targets(
    TargetGroupArn="arn...",
    Targets=[{"Id": instance_id} for instance_id in instance_ids]
)

变量instance_ids现在是一个包含三个实例 ID 的列表,您还必须更新register_targetscreate_tags调用以反映这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM