グローバルテーブルを設定した DynamoDB テーブルに対して、強い整合性のある読み込みをしても失敗する場合に確認すること
原因
例えば、東京/シンガポールリージョンでグローバルテーブルの設定をした DynamoDB のテーブルが存在するとして、 両リージョンで用意している同じコードの Lambda が、下記のように実装されている場合。
import * as DynamoDB from 'aws-sdk/clients/dynamodb'; const DYNAMODB_API_VERSION = '2012-10-08'; const REGION = 'ap-northeast-1' // ★ 東京リージョン固定 export const dynamodbDocumentClient = new DynamoDB.DocumentClient({ apiVersion: DYNAMODB_API_VERSION, region: REGION, });
シンガポールリージョンにある Lambda から何かしらのデータを PUT した後、 シンガポールリージョンにある DynamoDB テーブルに対して GET しようとした場合、 PUT したデータがシンガポールリージョンにコピーされる前に読み込みが走る場合があり、 強い整合性であろうと関係なく、データが取得できない現象が発生する。
対処法
const REGION = process.env.AWS_REGION!;
特別事情がない限り、同リージョンの Lambda から同リージョンの DynamoDB にアクセスした方が良い。 そもそも、マルチリージョンに対応する場合、片方のリージョンが障害を起こしても問題なく動かす必要性があるため、 意味なくリージョンを跨いだ実装はしない方が良いと思う。