LocalStackでイベント駆動型アーキテクチャを構築する

2024/03/13に公開

はじめに

LocalStackって聞いたことありますか?AWSをローカルでエミュレートできるツールです。
いちいちクラウドに接続する手間が省け、開発の初期段階で大活躍します。セキュリティの心配もなく、迅速なテストとデバッグが可能になります。
この記事では、LocalStackを使って、シンプルな在庫管理システムの構築を行います。興味が湧いたら、以下のリンクからLocalStackのより詳しい内容をご確認ください。
https://www.localstack.cloud/

構築するアーキテクチャについて

今回はシンプルな在庫管理システムをイメージしたアーキテクチャを考えました。
簡単な一連の流れは以下となっています:

  1. S3に帳票データとなるcsvをPUT
  2. ObjectCreatedイベントをトリガーにLambdaを起動し、csvのレコードをメッセージに変換しSQSへ送信
  3. SQSをトリガーに更に別のLambdaを起動し、DynamoDBにデータを登録

環境構築について

こちらがGitHubリポジトリです:
https://github.com/yosuke7040/localstack-test

コンテナ

Docker Composeで準備します。こちらのサンプルは公式にもありそちらも是非参考にしてください。
https://github.com/yosuke7040/localstack-test/blob/main/compose.yaml#L3-L21

また、DyanmoDBも使うため、値を簡単に確認するためにdynamodb-adminも準備しています。

Terraform

インフラの構築を簡単に行うためにTerraformを使いました。こちらも良ければ参考にしていただければと思います。
Terraformで環境構築中にアプリケーションのソースコードもビルドするようにしています。
(素直にzipファイルをリポジトリに用意しておくでも良かった気がしています…)
https://github.com/yosuke7040/localstack-test/blob/main/terraform/main.tf#L131-L150

今回は、ビルドしたzipファイルをS3にアップロードし、そのバケットとキーを使用してLambdaを更新する構成を採用しています。

動作確認

必要なツール

以下の用意をお願いします。

  • Go 1.22
  • awslocal
  • Terraform 1.6以上

機能の修正やデプロイ、実行ログの確認が必要な場合は、Taskfile.yamlの内容を確認し利用してください。

手順

以下の手順に従って、環境のセットアップと動作確認を行います。

  1. docker compose使ってコンテナを立ち上げます。

    docker compose up -d
    
  2. Terraformを使ってAWSサービスのデプロイを行います。

    cd terraform
    terraform init
    terraform apply
    

    環境を削除したい場合は、terraform destroyを実行してください。

  3. 下記のコマンドで、S3に帳票用のCSVファイルをアップロードします。これによりシステムの処理が開始されます。

    awslocal s3 cp data/sample.csv s3://inventory-updates-bucket
    

    少し待つと、Lambdaが起動し、最終的にはDynamoDBにデータが登録されることが確認できます。

  4. localhost:8001にアクセスすることで、Dynamoにデータが登録されたか確認できます。

まとめ

LocalStackを利用して、イベント駆動型のアーキテクチャを構築し、動作確認を行うことができました。
このツールを使えば、AWS環境をエミュレートして、ローカルで安全かつ迅速に開発を進めることが可能です。
今回の例では、在庫管理システムをモデルにしましたが、これを応用して様々なサービスやアプリケーションの開発に役立てることができます。
興味がある方は、是非LocalStackを使ってみてください。

Discussion