Lambdaでは、実行されるリージョンがAWS_REGIONという環境変数に入っていると、公式ドキュメントに書かれています。
一方、AWS SDKではAWS_DEFAULT_REGIONという環境変数にリージョンを設定してくれると、~./aws/configよりも優先して読み込んでClientやResourceを作成します。
AWS_DEFAULT_REGIONの場合
import os
import boto3
os.environ['AWS_DEFAULT_REGION'] = 'ap-northeast-1'
dynamodb = boto3.resource('dynamodb')
AWS_REGIONだとエラーになります。
AWS_REGIONの場合
import os
import boto3
os.environ['AWS_REGION'] = 'ap-northeast-1'
dynamodb = boto3.resource('dynamodb')
コンソール出力
botocore.exceptions.NoRegionError: You must specify a region.
でも、LambdaでClientやResourceを作成する時にリージョンを指定しなくてもエラーにはなりませんよね。何故か?
lambda_function.py
import os
import boto3
def lambda_handler(event, context):
print('AWS_REGION = {}'.format(os.getenv('AWS_REGION')))
print('AWS_DEFAULT_REGION = {}'.format(os.getenv('AWS_DEFAULT_REGION')))
ログ出力
AWS_REGION = ap-northeast-1
AWS_DEFAULT_REGION = ap-northeast-1
実はAWS_DEFAULT_REGIONにもリージョンが入っているようです。なーんだ!
