ssm.describe_instance_information() で取得したインスタンスID、プラットフォーム名、プラットフォームバージョンが格納されている DynamoDB のテーブルをCSVに吐き出す。
lambda-python3.8
import json
import csv
import boto3
def export_s3():
# lambda 上に展開する一次ファイルの定義。 /tmp/配下が使えるよ。
local_path = "/tmp/platform.csv"
# s3 に保存するファイルの定義。/xxx/plaform.csv のような感じでディレクトリ指定可能
s3_path = "platform.csv"
# 吐き出す先の S3 バケットの指定
bucket_name = "jiro-platform"
# DynamoDB のテーブル名。今回は事前に作ってある想定。
table_name = 'platform-information'
# DynamoDB のクライアントを定義
ddb_client = boto3.client('dynamodb')
# scan にて DynamoDB テーブルの中身(Item)を get_data に一旦投入
get_data = ddb_client.scan(
TableName=table_name
)
# CSV における列を定義。ここでは3列。インスタンスID、プラットフォーム名、プラットフォームバージョン
fieldnames = ['instanceid', "platform_name", "platform_version"]
# lambda の /tmp 領域に 一時的な csvファイルを作成・オープンし、get_data から1行ずつ読み出しては csvファイルに書き出し。をfor 文で回す。
with open(local_path, 'w') as f:
writer = csv.DictWriter(f, fieldnames = fieldnames)
writer.writeheader()
for data in get_data['Items']:
instanceid = data['instanceid']['S']
platform_name = data['platform_name']['S']
platform_version = data['platform_version']['S']
writer.writerow({"instanceid":instanceid, "platform_name":platform_name, "platform_version": platform_version})
# s3 クライアント、s3バケット定義
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
# /tmp内のローカルファイルを s3 にアップロード
bucket.upload_file(local_path, s3_path)