[英]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_targets
和create_tags
调用以反映这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.