LoginSignup
0
1

More than 1 year has passed since last update.

dynamodb のアイテムを CSV にして S3 に吐き出してみた。Lambda で。

Last updated at Posted at 2021-06-04

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)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1