あのときの、ほら!あれ、あれ!

SIer勤務のAWSなエンジニア(父)が好きなことをアウトプットして人生のなにがしかに役立てたり役立てなかったりするブログ

LambdaでS3にアップロードされたjsonパラメーターを読み込む

ここ最近、業務でCloudFormationを使用する機会がかなり多くなりました。
主にStacksetsの機能を使用して複数のアカウントに対して同時デプロイを行うのですが
Stacksetsの実行はGUIでパラメーター入力しているような状態で
あまりイケてる感じはしません。

ということで、以前に勉強用として作ったStackTemplateを活用して
「S3へのパラメーターファイル(json)のアップロードをトリガーにCFnを実行する」Lambdaを作ってみたいと思っています。

とはいえほとんど知見がないので今日はS3へアップロードしたjsonファイルを
PythonのDictへ格納するところまでしか進みませんでした(作業時間:約3時間)涙

OutPut

import json
import boto3
import logging
import pprint

client = boto3.client('s3')
s3 = boto3.resource('s3') 

##S3にアップロードされたパラメーターファイルを取得
def importParameter(event, context):

    # set logging
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)

    # set "bucket name" and "object name"
    BUCKET = 's3-lambda-cfn-bucket'
    TEST_FILE = 'parameters/parameter.json'
    
    # get s3 object
    try:
        response = client.get_object(Bucket = BUCKET, Key = TEST_FILE)
        body = response['Body'].read()
        bodystr = body.decode('utf-8')
        #bodystr = json.dumps(body)
        js = json.loads(bodystr)
    except Exception as e:
        return logger.error("Failed to get object: {}".format(e))
        
    return {
        'parameters': js
    }

参考にさせて頂いたサイト