サクッとAWS

AWS初心者のメモ書き

【AWS】Lambdaの環境変数を実行毎に変更する_#005

今回のゴール

AWS Lambdaに設定している環境変数の値を、
Lambda実行の度に変更します。
※本記事では、翌日の日付に変更します。

環境変数をLambda関数の実行の度に任意に変更することで、
同一のLamnda関数を連続実行させつつ、処理範囲を変更できます。
例)5分毎の同一Lambda関数起動で、売上情報CSVを1日ずつ作成する。

構成図

リソース一覧

  ・Lambda関連(ロール、関数)
   …Lambda用のロールを作成。
    今回用の関数を定義。

 

作成手順

  1. Lambda用 IAMロール作成

    ・ポリシーを新規作成します。今回は「policy-lambda」で作成しました。

    JSON
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "lambda:GetFunctionConfiguration",
                    "lambda:UpdateFunctionConfiguration"
                ],
                "Resource": "*"
            }
        ]
    }

    ・ロールを新規作成します。今回は「policy-lambda」で作成しました。
     ◆信頼関係

     ◆信頼関係のJSON
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "lambda.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }


    ◆許可ポリシー



  2. 関数作成

    ・Lambda>関数>関数を作成 の順でクリックします。


    ・下記設定で「関数の作成」をクリックします。
     ◆ランタイム:Pyrhon X.XX
     ◆アーキテクチャx86_64
     ◆実行ロール:上記で作成したロール

     
    ・「設定」タブで各種設定を変更します。
     ◆一般設定:タイムアウト値を1分に設定します。
      ※初期値の3秒では、処理が完了しない場合があるため
      

     ◆環境変数:下記のよう設定します。
      ※今回は、環境変数「ENV_DATE」、値「2025-03-01」で設定しました。


    ・「コード」タブで下記のようにコードを記載し、Deployします。

    ◆コード

    import boto3
    import os
    import logging
    import datetime
    from dateutil.relativedelta import relativedelta

    FUNCTION_NAME = os.environ.get('AWS_LAMBDA_FUNCTION_NAME')
    client = boto3.client('lambda')

    def lambda_handler(event, context):
        # 環境変数を取得
        response = client.get_function_configuration(FunctionName=FUNCTION_NAME)
        env_vars = response['Environment']['Variables']
        str_date = env_vars.get('ENV_DATE')

        # 環境変数を+1日する
        new_date = (datetime.datetime.strptime(str_date, "%Y-%m-%d") + datetime.timedelta(days=1)).strftime("%Y-%m-%d")
        env_vars['ENV_DATE'] = new_date
        client.update_function_configuration(FunctionName=FUNCTION_NAME, Environment={'Variables': env_vars})
        print(new_date)
        return {
            'statusCode': 200,
            'body': 'Finish!'
        }

     

  3. 関数テスト実行

    ・「テスト」タブでテストイベントを新規作成・保存します。
     今回の関数では、任意の引数はないので、JSONはブランクにしておきます。


    ・「コード」タブでテスト実行します。


    ・正常終了しました!


    環境変数も翌日になっていました!