AWS Lambdaで遊ぼう #4 環境変数を活用する
もくじ
はじめに
こんにちは。中村です。
今回はLambdaにおける環境変数の活用について書いていこうと思います。
環境変数とは
特定のパラメータを環境変数に設定し、その値をソースコード上で呼び出して活用することができます。
以下のように環境変数に特定のキーと値を設定します。
環境変数に設定したキーをソースコード内で呼び出し、その値を取得する。という感じです。
以下、Pythonで書く場合
import os
def lambda_handler(event, context):
Name = os.environ['Name']
print(Name)
# 出力
# Nakam
なぜ環境変数を使うのか
同一機能のLambda関数を別の場所で使い回したい場合、または開発/検証/本番のように環境が分かれている場合に、環境ごとに値が変わるものを環境変数で管理する事で、ソースコードを修正する手間を省く事ができます。
例えば以前書いた以下の記事では、
AWS Lambdaで遊ぼう #3 LambdaからSNSでメール送信
このようなソースコードを書きました
import boto3
client = boto3.client('sns')
def lambda_handler(event, context):
params = {
'TopicArn': 'arn:aws:sns:ap-northeast-1:999999999999:sns-topic-name',
'Subject': 'Subject Lambda(python) -> SNSでメール送ったよ',
'Message': 'Message\n\nLambda -> SNSでメール送ったよ\n届いた?'
}
client.publish(**params)
しかし、同じLambdaを別のAWSアカウントで使い回す場合、ソースコード内のSNSトピックARNは別の値に変更する必要があるかもしれません。その都度ソースコードを書き換えるのは面倒だし、ミスを誘発する可能性が出てきます。そこでトピックARNの部分を環境変数にして、可変できるようにしておけば、ソースコードは全く同じものを使うことができますね。
環境変数を設定してみる
さて、上記のLambda関数を修正して環境変数が使える状態にしようと思います。
Lambda画面から設定
タブを開き、環境変数
の編集
をクリックします。

環境変数の追加
をクリックします。

キーと値を入力し、保存
をクリックします。

これで環境変数を設定できました。

ソースコードにて環境変数の値を取得します
import os
にてosモジュールをインポートし、そちらを使ってos.environ
で環境変数の値を呼び出しています。
import boto3
import os
client = boto3.client('sns')
def lambda_handler(event, context):
params = {
'TopicArn': os.environ['topic_arn'],
'Subject': 'Subject Lambda(python) -> SNSでメール送ったよ',
'Message': 'Message\n\nLambda -> SNSでメール送ったよ\n届いた?'
}
client.publish(**params)
この形であれば別のAWSアカウントや、別のSNSを使う場合でもソースコードの修正は不要になりますね!
Lambdaを実行してみる
Lambdaを動かしてみましょう
テスト
タブからテスト
を実行します。

Lambdaの実行は成功しました。

メールも届きましたね!

おわりに
ご参考にしていただけると幸いです。