I m trying to list out EC2 instance id using python boto3. I m new to python.
Below Code is working fine
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)
Output is
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'}
Now to strip instance id from above output, I have added below code(last 2 lines) and for some reason its not working.
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'])
Error is
{
"errorMessage": "'Instances'",
"errorType": "KeyError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 10, in lambda_handler\n for ins_id in instances['Instances']:\n"
]
}
The loop iteration should be
for ins_id in instances['Reservations'][0]['Instances']:
since you have a Reservation
key at the top level, then an array and objects in the array with the Instances
key which itself is yet another array that you then actually iterate.