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
にもリージョンが入っているようです。なーんだ!