![](/img/trans.png)
[英]How to resize ec2 instance type dynamically using AWS Lambda function with Boto3
[英]AWS Lambda to list EC2 instance id using python boto3
我正在嘗試使用 python boto3 列出 EC2 實例 ID。 我是python的新手。
下面的代碼工作正常
import boto3
region = 'ap-south-1'
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
print('Into DescribeEc2Instance')
instances = ec2.describe_instances(Filters=[{'Name': 'instance-type', 'Values': ["t2.micro", "t3.micro"]}])
print(instances)
輸出是
START RequestId: bb4e9b27-db8e-49fe-85ef-e26ae53f1308 Version: $LATEST
Into DescribeEc2Instance
{'Reservations': [{'Groups': [], 'Instances': [{'AmiLaunchIndex': 0, 'ImageId': 'ami-052c08d70def62', 'InstanceId': 'i-0a22a6209740df', 'InstanceType': 't2.micro', 'KeyName': 'testserver', 'LaunchTime': datetime.datetime(2020, 11, 12, 8, 11, 43, tzinfo=tzlocal()), 'Monitoring': {'State': 'disabled'}
現在要從上面的輸出中去除實例 ID,我添加了下面的代碼(最后 2 行),但由於某種原因它不起作用。
import boto3
region = 'ap-south-1'
instance = []
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
print('Into DescribeEc2Instance')
instances = ec2.describe_instances(Filters=[{'Name': 'instance-type', 'Values': ["t2.micro", "t3.micro"]}])
print(instances)
for ins_id in instances['Instances']:
print(ins_id['InstanceId'])
錯誤是
{
"errorMessage": "'Instances'",
"errorType": "KeyError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 10, in lambda_handler\n for ins_id in instances['Instances']:\n"
]
}
循環迭代應該是
for ins_id in instances['Reservations'][0]['Instances']:
因為您在頂層有一個Reservation
鍵,所以數組和數組中的對象帶有Instances
鍵,它本身又是另一個您實際迭代的數組。
實際上instances['Reservations'][0]['Instances']
可能不是所有的實例。 實例按安全組分組在一起。不同的安全組意味着將有許多列表元素。 要獲取該區域中的每個實例,您需要使用以下代碼。
注意: ['Reservations'][0]['Instances']
沒有列出所有的實例,它只給你按第一個安全組分組的實例。 如果有很多組,您將無法獲得所有實例。
import boto3
region = 'ap-south-1'
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
instance_ids = []
response = ec2.describe_instances(Filters=[{'Name': 'instance-type', 'Values': ["t2.micro", "t3.micro"]}])
instances_full_details = response['Reservations']
for instance_detail in instances_full_details:
group_instances = instance_detail['Instances']
for instance in group_instances:
instance_id = instance['InstanceId']
instance_ids.append(instance_id)
return instance_ids
如果有多個保留,我喜歡這種方法:
response = ec2.describe_instances()
for reservation in response['Reservations']:
for instance in reservation['Instances']:
print(instance['InstanceId'])
這是我迄今為止發現的最簡單的解決方案:
ec2 = boto3.resource('ec2')
ids= [instance.id for instance in ec2.instances.all()]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.