LocalStackでイベント駆動型アーキテクチャを構築する
はじめに
LocalStackって聞いたことありますか?AWSをローカルでエミュレートできるツールです。
いちいちクラウドに接続する手間が省け、開発の初期段階で大活躍します。セキュリティの心配もなく、迅速なテストとデバッグが可能になります。
この記事では、LocalStackを使って、シンプルな在庫管理システムの構築を行います。興味が湧いたら、以下のリンクからLocalStackのより詳しい内容をご確認ください。
構築するアーキテクチャについて
今回はシンプルな在庫管理システムをイメージしたアーキテクチャを考えました。
簡単な一連の流れは以下となっています:
- S3に帳票データとなるcsvをPUT
- ObjectCreatedイベントをトリガーにLambdaを起動し、csvのレコードをメッセージに変換しSQSへ送信
- SQSをトリガーに更に別のLambdaを起動し、DynamoDBにデータを登録
環境構築について
こちらがGitHubリポジトリです:
https://github.com/yosuke7040/localstack-test
コンテナ
Docker Composeで準備します。こちらのサンプルは公式にもありそちらも是非参考にしてください。
また、DyanmoDBも使うため、値を簡単に確認するためにdynamodb-adminも準備しています。
Terraform
インフラの構築を簡単に行うためにTerraformを使いました。こちらも良ければ参考にしていただければと思います。
Terraformで環境構築中にアプリケーションのソースコードもビルドするようにしています。
(素直にzipファイルをリポジトリに用意しておくでも良かった気がしています…)
今回は、ビルドしたzipファイルをS3にアップロードし、そのバケットとキーを使用してLambdaを更新する構成を採用しています。
動作確認
必要なツール
以下の用意をお願いします。
- Go 1.22
- awslocal
- Terraform 1.6以上
機能の修正やデプロイ、実行ログの確認が必要な場合は、Taskfile.yamlの内容を確認し利用してください。
- Task(https://taskfile.dev/)
手順
以下の手順に従って、環境のセットアップと動作確認を行います。
-
docker compose使ってコンテナを立ち上げます。
docker compose up -d
-
Terraformを使ってAWSサービスのデプロイを行います。
cd terraform terraform init terraform apply
環境を削除したい場合は、terraform destroyを実行してください。
-
下記のコマンドで、S3に帳票用のCSVファイルをアップロードします。これによりシステムの処理が開始されます。
awslocal s3 cp data/sample.csv s3://inventory-updates-bucket
少し待つと、Lambdaが起動し、最終的にはDynamoDBにデータが登録されることが確認できます。
-
localhost:8001にアクセスすることで、Dynamoにデータが登録されたか確認できます。
まとめ
LocalStackを利用して、イベント駆動型のアーキテクチャを構築し、動作確認を行うことができました。
このツールを使えば、AWS環境をエミュレートして、ローカルで安全かつ迅速に開発を進めることが可能です。
今回の例では、在庫管理システムをモデルにしましたが、これを応用して様々なサービスやアプリケーションの開発に役立てることができます。
興味がある方は、是非LocalStackを使ってみてください。
Discussion