Skip to content

Commit 2789b44

Browse files
authored
Merge pull request #544 from j5ik2o/feature/localstack-rmu-lambda
Feature/localstack rmu lambda
2 parents c4891c8 + 4d0e1da commit 2789b44

4 files changed

Lines changed: 82 additions & 39 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ jobs:
119119
- test-read-api-server
120120
steps:
121121
- uses: actions/checkout@v4
122+
- name: Install AWS CLI
123+
uses: unfor19/install-aws-cli-action@v1
124+
with:
125+
version: 2
122126
- uses: docker/setup-buildx-action@v3
123127
- run: |
124128
docker buildx create --name amd-arm --driver docker-container --platform linux/amd64

docs/BUILD_AND_TEST.ja.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,19 @@ $ makers build
3333
ファイルはgitの管理下に含めてください。このときに、DBサーバに接続する必要があるので、`makers docker-compose-up-db`
3434
を実行しておく必要があります。
3535

36+
## LocalStack上でのLambdaデプロイ
37+
38+
`makers docker-compose-up` を実行すると、コンテナ起動後に LocalStack へ Lambda が自動デプロイされます。手動で再デプロイしたい場合は次のコマンドを利用してください。
39+
40+
```shell
41+
$ makers build-read-model-updater-lambda
42+
$ makers deploy-read-model-updater-localstack
43+
```
44+
45+
`build-read-model-updater-lambda` は Docker 上で Lambda 互換バイナリをビルドして `dist/lambda/read-model-updater/bootstrap.zip` を生成します。
46+
`deploy-read-model-updater-localstack` は AWS CLI を利用し、LocalStack に Lambda 関数を作成した後で `journal` テーブルのストリームとイベントソースマッピングを貼ります。
47+
環境変数は `common.env` から読み込まれるため、LocalStack のエンドポイントやダミー認証情報を適宜設定してください。
48+
3649
## テスト方法
3750

3851
テストを実行する前に、Dockerを必ず起動してください。
@@ -46,16 +59,3 @@ $ makers test
4659
で制限しています。
4760
つまり、`RUST_TEST_THREADS=1 cargo test`でないとテストが正常に実行できないのでご注意ください。
4861
`makers test`ではデフォルトで`RUST_TEST_THREADS=1`となっているので、そのまま実行しても問題ありません。
49-
50-
## LocalStack上でのLambdaデプロイ
51-
52-
ローカルで DynamoDB Streams → Lambda → MySQL の経路を再現する場合は次の手順を踏んでください。
53-
54-
```shell
55-
$ makers build-read-model-updater-lambda
56-
$ makers deploy-read-model-updater-localstack
57-
```
58-
59-
`build-read-model-updater-lambda` は Docker 上で Lambda 互換バイナリをビルドして `dist/lambda/read-model-updater/bootstrap.zip` を生成します。
60-
`deploy-read-model-updater-localstack` は AWS CLI を利用し、LocalStack に Lambda 関数を作成した後で `journal` テーブルのストリームとイベントソースマッピングを貼ります。
61-
環境変数は `common.env` から読み込まれるため、LocalStack のエンドポイントやダミー認証情報を適宜設定してください。

docs/BUILD_AND_TEST.md

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
1-
## Copy and edit `common.env.default` as `common.env
1+
## `common.env.default` `common.env` にコピーして編集する
22

33
```shell
44
$ cp common.env.default common.env
55
```
66

7-
PREFIX of environment variables (All alphanumeric characters. Change PREFIX (all alphanumeric characters, lower case
8-
only) and APPLICATION_NAME as appropriate.
9-
It is recommended to generate the PREFIX with `pwgen -A`.
7+
環境変数の PREFIX(英数字のみ。英字は小文字)と APPLICATION_NAME を適宜変更してください。PREFIX は `pwgen -A` などで生成すると便利です。
108

119
```shell
1210
$ pwgen -A
1311
```
1412

15-
If you do not have `pwgen`, install it with `brew install pwgen`.
13+
`pwgen` が未インストールの場合は `brew install pwgen` で導入できます。
1614

1715
## ビルド方法
1816

19-
Be sure to start Docker before performing the build.
17+
ビルドを実行する前に Docker を必ず起動しておきます。
2018

21-
Start DB only with the following command before performing the build. (to allow sqlx to connect to the DB)
19+
sqlx が DB に接続できるよう、先に DB だけ起動します。
2220

2321
```shell
2422
$ makers docker-compose-up-db
@@ -28,33 +26,25 @@ $ makers docker-compose-up-db
2826
$ makers build
2927
```
3028

31-
Note: If you add or modify SQL to be issued by sqlx, you will need to run `cargo sqlx prepare` directly under each
32-
project (a JSON file will be generated in `.sqlx/`), but you can set up `cargo sqlx prepare` is set to run.
33-
So, please be sure to run `makers build` when you add or modify SQL. Please include the generated `.sqlx/*.json` file
34-
under git's control. At this time, you need to connect to the DB server, so you need to
35-
run `makers docker-compose-up-db`.
29+
補足: sqlx で実行する SQL を追加・変更した場合は、各プロジェクト直下で `cargo sqlx prepare` を実行する必要があります(`.sqlx/` に JSON が生成されます)。このリポジトリでは `makers build` 中に自動で `cargo sqlx prepare` が走るようにしているため、SQL 変更時は必ず `makers build` を実行し、生成された `.sqlx/*.json` を Git 管理下に含めてください。なお DB 接続が必要なので、あらかじめ `makers docker-compose-up-db` を実行しておいてください。
3630

37-
## テスト方法
31+
## LocalStack 上での Lambda デプロイ
3832

39-
Be sure to start Docker before running the test.
33+
`makers docker-compose-up` を実行すると、コンテナ起動後に LocalStack へ Lambda が自動デプロイされます。手動で再デプロイしたい場合は次のコマンドを利用します。
4034

4135
```shell
42-
$ makers test
36+
$ makers build-read-model-updater-lambda
37+
$ makers deploy-read-model-updater-localstack
4338
```
4439

45-
Note: You can also test with `cargo test`, but this time the number of tests to run simultaneously is limited by an
46-
environment variable (`RUST_TEST_THREADS=1`) due to the use of testcontainers.
47-
In other words, please note that tests cannot be run properly unless `RUST_TEST_THREADS=1 cargo test` is used.
48-
With `makers test`, the default is `RUST_TEST_THREADS=1`, so you can run the test as it is.
49-
## Deploying the Lambda to LocalStack
40+
`build-read-model-updater-lambda` は Docker 上で Lambda 互換バイナリをビルドし、`dist/lambda/read-model-updater/bootstrap.zip` を生成します。`deploy-read-model-updater-localstack` は AWS CLI を用いて LocalStack に関数を作成(または更新)し、`journal` テーブルのストリームとイベントソースマッピングを設定します。設定値は `common.env` から読み込まれるため、LocalStack のエンドポイントやダミー資格情報を事前に記入してください。
5041

51-
To emulate the DynamoDB Streams → Lambda → MySQL flow locally, run the following:
42+
## テスト方法
43+
44+
テストを実行する前に Docker を必ず起動してください。
5245

5346
```shell
54-
$ makers build-read-model-updater-lambda
55-
$ makers deploy-read-model-updater-localstack
47+
$ makers test
5648
```
5749

58-
`build-read-model-updater-lambda` builds the Lambda-compatible binary inside Docker and places the ZIP at `dist/lambda/read-model-updater/bootstrap.zip`.
59-
`deploy-read-model-updater-localstack` relies on the AWS CLI to create or update the function on LocalStack and wires it to the `journal` table stream.
60-
Configuration values are read from `common.env`, so configure the LocalStack endpoint and dummy credentials before executing the commands.
50+
補足: `cargo test` でもテスト可能ですが、testcontainers を利用している関係で同時実行数を環境変数(`RUST_TEST_THREADS=1`)で制限しています。`RUST_TEST_THREADS=1 cargo test` 以外では正しく動作しないため注意してください。`makers test` ではデフォルトで `RUST_TEST_THREADS=1` が設定されているので、そのまま実行すれば問題ありません。

tools/scripts/docker-compose-up.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,32 @@ set -eu
55
# shellcheck disable=SC2046
66
cd $(dirname "$0") || exit
77

8+
ROOT_DIR=$(git rev-parse --show-toplevel 2>/dev/null || (cd .. && pwd))
9+
10+
if [ ! -f "$ROOT_DIR/common.env" ]; then
11+
cp "$ROOT_DIR/common.env.default" "$ROOT_DIR/common.env"
12+
fi
13+
14+
LAMBDA_BOOTSTRAP_PATH="$ROOT_DIR/dist/lambda/read-model-updater/bootstrap"
15+
16+
build_lambda() {
17+
"$ROOT_DIR/tools/scripts/build-read-model-updater-lambda.sh"
18+
}
19+
20+
if [ "${DOCKER_COMPOSE_UP_BUILD_LAMBDA:-1}" = "1" ]; then
21+
REBUILD=0
22+
if [ ! -f "$LAMBDA_BOOTSTRAP_PATH" ]; then
23+
REBUILD=1
24+
else
25+
if [ -n "$(find "$ROOT_DIR/applications/read-model-updater" "$ROOT_DIR/modules/rmu" -type f -newer "$LAMBDA_BOOTSTRAP_PATH" -print -quit)" ]; then
26+
REBUILD=1
27+
fi
28+
fi
29+
if [ $REBUILD -eq 1 ]; then
30+
build_lambda
31+
fi
32+
fi
33+
834
export ARCH=$(uname -m)
935
echo "ARCH=${ARCH}"
1036
export TAG_PREFIX="aarch64"
@@ -33,3 +59,26 @@ shift $(($OPTIND - 1))
3359

3460
docker compose -p cqrs-es-example-rs -f ../docker-compose/docker-compose-databases.yml ${F_OPTION} down -v --remove-orphans
3561
docker compose -p cqrs-es-example-rs -f ../docker-compose/docker-compose-databases.yml ${F_OPTION} up --remove-orphans --force-recreate --renew-anon-volumes -d "$@"
62+
63+
if [ "${DOCKER_COMPOSE_UP_DEPLOY_LAMBDA:-1}" = "1" ]; then
64+
65+
export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-test}
66+
export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-test}
67+
export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:-ap-northeast-1}
68+
export AWS_REGION=${AWS_REGION:-ap-northeast-1}
69+
LOCALSTACK_ENDPOINT_URL=${LOCALSTACK_ENDPOINT_URL:-http://localhost:4566}
70+
71+
RETRY=0
72+
MAX_RETRY=${LOCALSTACK_WAIT_MAX_RETRY:-30}
73+
WAIT_INTERVAL=${LOCALSTACK_WAIT_INTERVAL:-2}
74+
until aws --endpoint-url "$LOCALSTACK_ENDPOINT_URL" --region "$AWS_REGION" dynamodb list-tables >/dev/null 2>&1; do
75+
RETRY=$((RETRY + 1))
76+
if [ $RETRY -ge $MAX_RETRY ]; then
77+
echo "LocalStack is not ready after waiting, aborting Lambda deployment." >&2
78+
exit 1
79+
fi
80+
sleep "$WAIT_INTERVAL"
81+
done
82+
83+
"$ROOT_DIR/tools/scripts/deploy-read-model-updater-localstack.sh"
84+
fi

0 commit comments

Comments
 (0)