※この記事は「AWSでサーバーレスなバッチ処理を作るハンズオン」の2章です。こちらの記事からスタートできます。
ここでは、Dockerを使って、ローカルPC内にDynamoDB(Local)とS3互換のMinioを立ち上げます。
可能ならば開発中もAWSのリソースに接続したいところですが、
- プログラムのミスにより高額な請求の発生
- 試行錯誤による長時間利用
は避けたいところですよね。
そこで、今回はローカルでの開発中はローカルにあるサービスにアクセスするようにします。
リポジトリ
この章における変更箇所は以下のコミットで確認できます。
また、このハンズオン全体のリポジトリはこちらです。
DynamoDB Localの起動
最初にDynamoDB Localを立ち上げます。
docker-compose.yaml
を作成しましょう。
touch docker-compose.yaml
docker-compose.yaml
に以下のコードを書き込みます。
version: '3.8' services: dynamodb-local: image: "amazon/dynamodb-local:latest" container_name: dynamodb-local hostname: dynamodb ports: - "8000:8000" volumes: - "./docker/dynamodb:/home/dynamodblocal/data" working_dir: /home/dynamodblocal command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
起動します。
docker compose up
ではDynamoDBテーブルを作成しましょう。日付をPartition Keyにしただけのシンプルなテーブルです。
※AWS CLIがインストールされていない場合、公式ガイドを参考にインストールをしてください。
aws dynamodb create-table \ --endpoint-url http://localhost:8000 \ --table-name Messages \ --attribute-definitions \ AttributeName=Date,AttributeType=S \ --key-schema \ AttributeName=Date,KeyType=HASH \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
ローカルのDynamDBに対してリクエストを送るので、--endpoint-url http://localhost:8000
というオプションがついていることを確認してください。
作成されたことを確認しましょう。
aws dynamodb describe-table \ --endpoint-url http://localhost:8000 \ --table-name Messages
何かしら情報が表示されたことを確認しましょう。
では、データを投入しておきます。
aws dynamodb put-item \ --endpoint-url http://localhost:8000 \ --table-name Messages \ --item '{ "Date": {"S": "2021/11/28"}, "Message": {"S": "Hello, World"} }'
追加してデータを確認するには以下のコマンドを実行します。
aws dynamodb get-item \ --endpoint-url http://localhost:8000 \ --table-name Messages \ --key '{"Date":{"S":"2021/11/28"}}'
補足)
開発中はDynamoDBテーブルのデータをGUIで見ると早いです。
必要に応じてdynamodb-adminをインストールしてみてください。
Minio(S3互換)の起動
続いてS3互換のMinioを立ち上げます。
DynamoDBを立ち上げたときのdocker compose
を終了させていない場合は、Ctrl + c
で終了させときます。
docker-compose.yaml
のservices
配下に以下の記述を追加します。
minio: image: quay.io/minio/minio:RELEASE.2021-10-10T16-53-30Z hostname: minio volumes: - ./docker/minio/data:/data - ./docker/minio/export:/export - ./docker/minio/policies:/policies ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: root MINIO_ROOT_PASSWORD: himitsu123 command: server --console-address ":9001" /data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3
追記したらもう一度起動しましょう。
docker compose up
問題なく起動したらMinioのコンソールにアクセスしてみます。
ログイン情報は以下です。
Username | Password |
---|---|
root | himitsu123 |
続いてbucketを作成します。
Minioのコンソールから作成してもOK。AWS CLIで作る場合は以下のコマンドを実行します。
AWS_ACCESS_KEY_ID=root \ AWS_SECRET_ACCESS_KEY=himitsu123 \ aws s3api create-bucket \ --endpoint-url http://127.0.0.1:9000 \ --bucket handson-bucket
※MinioにAWS CLIにアクセスする際には、Minio起動時に設定したルートユーザの情報を使います。
変数名 | 値 |
---|---|
AWS_ACCESS_KEY_ID | root |
AWS_SECRET_ACCESS_KEY | himitsu123 |
handson-bucket
というbucketができました。
以下のコマンド、もしくはMinioコンソールから確認してみます。
AWS_ACCESS_KEY_ID=root \ AWS_SECRET_ACCESS_KEY=himitsu123 \ aws s3 ls \ --endpoint-url http://127.0.0.1:9000
これで準備は完了です!
次のステップ
いよいよ、Lambda関数を作成していきます。