ローカルでAWSダイナモを走らせる方法


DynamoDBインスタンスをローカルで実行するのは、テストのために大きいか、どんなコストも発生させることなく回避することです.クラウド内のダイナモとまったく同じように動作します.ローカルインスタンスを作成し、エンドポイント(js)を追加するか、またはエンドポイント(URL)を追加して、AWS SDKのDynamoDBオブジェクトを作成するとき、またはCLIを使用するときに- Endpoint URLオプションを指定します.

ステップ1 -ローカルインスタンスの作成
最も簡単な方法は、DynamoDB Dockerイメージを介してです.あなたのコードをテストしている方法とあなたが作っていることによって、このためのプロセスはわずかに異なります.

を使用している場合
私が最初にこれをしようとしていた時、私はAWS SAMを使ってServerless APIを構築していました.これは、コンテナの完全なAPIゲートウェイを行うでしょう.したがって、SAMコンテナとDynamoDBコンテナがネットワーク上で互いに話をする必要がありました.私は、rynop's answer on StackOverflowにネットワークとコンテナをセットアップするDocker構成ファイルを見つけました.これが私のバージョンです.
version: '3.5'

services:
  dynamo:
    container_name: local-dynamodb
    image: amazon/dynamodb-local
    networks:
      - local-dynamodb
    ports:
      - '8000:8000'
    volumes:
      - dynamodata:/home/dynamodblocal
    working_dir: /home/dynamodblocal
    command: '-jar DynamoDBLocal.jar -sharedDb -dbPath .'

networks:
  local-dynamodb:
    name: local-dynamodb

volumes:
  dynamodata: {}
これを実行するには、Docker Composeというファイルに保存します.YMLと実行docker-compose up -d dynamoこれが設定されたら、プロジェクトフォルダの以下のようなコマンドを実行して、ダイナモとSAMコンテナをお互いに話しかけることができます.この環境で動作していることを検出するには、ラムダコード内のAWSNER SAMRIGHTローカル環境変数を確認できます.DBに接続するには、エンドポイントURLとしてhttp://dynamo:8000を使用します.
sam build --use-container
sam local start-api --docker-network local-dynamodb --skip-pull-image --profile default --parameter-overrides 'ParameterKey=StageName,ParameterValue=local'

あなたが何かを使っているならば
コンテナーでコードを実行している場合は、上記と同様の操作を行う必要があります.さもなければ、あなたはそのようにそれをすることができます(コンテナはhttp://localhost:8000でアクセス可能です).
docker run --rm -d  -p 8000:8000/tcp amazon/dynamodb-local:latest
これは、ポート8000がlocalhostに転送されたDynamoDBコンテナの最新バージョンを実行します.したがって、設定する必要のあるエンドポイントURLはhttp://localhost:8000です.

2 -テーブルを作成する
テーブルを作成するには、以下の内容を使用してJSONファイルを作成します(環境に必要に応じて調整します).
{
    "TableName": "testTable",
    "KeySchema": [
      { "AttributeName": "id", "KeyType": "HASH" }
    ],
    "AttributeDefinitions": [
      { "AttributeName": "id", "AttributeType": "N" }
    ],
    "ProvisionedThroughput": {
      "ReadCapacityUnits": 2,
      "WriteCapacityUnits": 2
    }
}
aws dynamodb create-table --cli-input-json file://local-db-create.json --endpoint-url http://localhost:8000