Table of Contents
samでDynamoDB Localを使いたい
タイトルママなのですが、開発中にDynamoDB Localと
sam (AWS Serverless Application Model)を組み合わせて使いたいことは多々あると思います。
DynamoDB Localを利用する時はDockerを利用する事が多いと思いますが、
ホスト側の8000番ポートにマッピングする事が多いです。
一方でsam local start-api
などで開発中の関数を起動しようとすると
9000番で別のコンテナのポートをマッピングします。
これは別のコンテナなので、SAMのコンテナの8000番にアクセスしても、DynamoDB Localにはアクセス出来ません。
うまくDockerのネットワークを構築して対応することも出来ますが、
大抵の場合、ゆるふわにアクセスしたいです。
今回のような場合、Docker Desktop for MacとDocker Desktop for Windows
の
host.docker.internal
を使ってホスト側のポートにアクセスするとゆるふわにアクセス出来ます。
設定例
開発用の環境変数に以下のような値を仕込みます。
Environment:
Variables:
DynamodbEndpoint: "http://host.docker.internal:8000"
これをsam側で設定します。
今回はGoのコードになります。
// NewDynamodbClient NewDynamodbClient
func NewDynamodbClient() *dynamodb.DynamoDB {
config := setCommonConfig()
dynamodbEndpoint := os.Getenv("DynamodbEndpoint")
if dynamodbEndpoint != "" {
config.Endpoint = aws.String(dynamodbEndpoint)
}
sess := session.Must(session.NewSession(config))
return dynamodb.New(sess)
}
これでゆるふわにsam local start-api
したLambdaでとDynamoDB Localの連携が出来ます。
労力を最小限で開発を行いたいときに便利なので試してみてください。