Fusic Tech Blog

Fusion of Society, IT and Culture

sam local start-apiでDynamoDB Localをゆるふわに使う
2020/12/30

sam local start-apiでDynamoDB Localをゆるふわに使う

こんにちは、清家です。

今回はちょっとしたTipsです。

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 MacDocker 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の連携が出来ます。
労力を最小限で開発を行いたいときに便利なので試してみてください。

Shiro Seike

Shiro Seike

Company:Fusic CO., LTD. Slides:slide.seike460.com blog:blog.seike460.com Program Language:PHP , Go Interest:Full Serverless Architecture