0
Help us understand the problem. What are the problem?

posted at

ec2のリストを取得する

はじめに

ec2のリストを取得します。lambdaで取得したリストをs3に出力します。

内容

s3バケットの準備

ファイルを作成するためのs3バケットを作成します。my-resource-listとしました。

lambda関数の設定

lambda関数に下記のポリシーをアタッチします。

  • AmazonEC2ReadOnlyAccess ec2を参照するため
  • my-resource-listバケットへのs3:PutObject ファイルを出力するため

また、タイムアウト時間をデフォルトの3秒から10秒にしました。これはec2.describe_instancesの実行時間が3秒を超えたためです。

lambda関数を作る

pythonでboto3を利用してec2情報を取得します。関数ec2.describe_instances()で取得したdictから必要な情報をcsvにして保管するようにしました。

import json
import boto3

BUCKET_NAME='my-resource-list' #ファイルを保管するs3バケット名
FILE_NAME = 'ec2_resources' #s3バケット内のファイル名

def lambda_handler(event, context):
    ec2 = boto3.client('ec2')

    #ec2情報の取得
    ec2_data = ec2.describe_instances()
   
    #ec2情報の必要な項目を抽出
    my_ec2_list = ''   
    for ec2_reservation in ec2_data['Reservations']:
        for ec2_instance in ec2_reservation['Instances']:
            ec2_instance_id = ec2_instance['InstanceId']
            ec2_instance_type = ec2_instance['InstanceType']
            ec2_instance_state = ec2_instance['State']['Name']
            ec2_instance_IP = ec2_instance['PrivateIpAddress']
            ec2_instance_SubnetId = ec2_instance['SubnetId']

            my_ec2_list += ec2_instance_id + ',' + ec2_instance_type + ',' + ec2_instance_state + ',' + ec2_instance_SubnetId + ',' + ec2_instance_IP + '\n'

    #s3へのアップロード
    response = upload_s3(my_ec2_list, FILE_NAME + '.csv')

    return {
        'statusCode': 200,
        #'body': jd
        'body': json.dumps(my_ec2_list)
    }

#upload to s3
def upload_s3(naiyou, filename):
    client = boto3.client('s3')
    response = client.put_object(
        Body = naiyou,
        Bucket = BUCKET_NAME,
        Key = filename,
    )
    return response

下記のようなec2の情報を取得することができます。ヘッダは付きません。

InstanceId InstanceType State SubnetId PrivateIpAddress
i-0cb686b49c8c81b27 t3a.nano running subnet-0a9dc7996b385f5e3 10.0.0.22
i-0399498a701b49fba t4g.nano running subnet-0a9dc7996b385f5e3 10.0.0.105

おわりに

ec2.describe_instances()からは他にも様々な情報を取得することができます。

参考文献

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?