🐡
GitHub Actionsにて、サービスコンテナ経由で、DynamoDB Localを使う
「GitHub Actions で、DynamoDB Local を使ったテストを動かしたい」となりました。
「github actions dynamodb local」とかでググったんですが、サードパーティの Actions を使う例しかヒットしませんでした。
同方法でも良いかと思いますが、なるべく公式 Action 以外使いたくなかったので、サービスコンテナを使ってみることにしました。
この記事のコードは、下記に置いてあります。
実際のコードの抜粋
.github/workflows/ci.yml
# GitHub Actionsの定義
name: CI
on:
pull_request:
push:
branches:
- main
jobs:
sample-job-on-the-runner-machine:
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: DUMMY_AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: DUMMY_AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: ap-northeast-1
steps:
- uses: actions/checkout@v3
- run: aws dynamodb create-table --cli-input-json file://users-table.json --endpoint-url http://localhost:8000
- run: aws dynamodb describe-table --table-name users-table --endpoint-url http://localhost:8000
# 実際にDynamoDB Localを設定しているところはここ
services:
dynamodb:
image: amazon/dynamodb-local:latest
ports:
- 8000:8000
users-table.json
// サンプル用のテーブル定義
{
"TableName": "users-table",
"KeySchema": [
{
"AttributeName": "userId",
"KeyType": "HASH"
},
],
"AttributeDefinitions": [
{
"AttributeName": "userId",
"AttributeType": "S"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 1,
"WriteCapacityUnits": 1
}
}
解説
DynamoDB Local は Docker イメージとして提供されているので、サービスコンテナとして設定できます。
サービスコンテナのドキュメントには PostgreSQL と Redis の例が載っていますが、DynamoDB も同じように使えます。
services:
dynamodb:
image: amazon/dynamodb-local:latest
ports:
- 8000:8000
これだけで GitHub Actions 上にて、http://localhost:8000
で DynamoDB にアクセスできるようになります。
実際にアクセスしてみます。
# DynamoDB Localにテーブルを作ってみる
- run: aws dynamodb create-table --cli-input-json file://users-table.json --endpoint-url http://localhost:8000
# 作ったテーブルを確認する
- run: aws dynamodb describe-table --table-name users-table --endpoint-url http://localhost:8000
テーブルを作成できました。
ports の設定
services:
dynamodb:
image: amazon/dynamodb-local:latest
# ここについて
ports:
- 8000:8000
ちなみに、ports の設定は、job をランナーマシン上で動かしているため、必要です。
コンテナ上で動かす場合は、ports の設定が不要になります。
また、サービス名(この場合dynamodb
)がホスト名になるので、endpoint-url がhttp://dynamodb:8000
になります。
Discussion