LocalStackをつかってローカル環境でAWSサービスにアクセスしてみた

はじめに

AWSのサービスをローカル環境で利用できる LocalStack を紹介したいと思います。
S3、Lambda、DynamoDB、SQSなど、AWSサービスをローカル環境で疑似的に利用できて、料金などを気にすることなくテストやコードの動作確認を行うことが出来ます。

目次

LocalStackとは

LocalStackとは、ローカル環境でAWSのサービスをエミュレートするフレームワークです。
pipやdockerを用いて簡単に環境構築が可能です。
LocalStackは無料版と有料版があり、無料版は利用できるAWSサービスに制限があったり、データが永続化できないといった違いがあります。

LocalStack

今回は LocalStack をインストールして S3,SQS を使ってみました。

インストールと起動

  • awscli-localインストール

AWS CLI でも LocalStack 環境は操作できるのですが、毎回エンドポイントを指定する必要があったり少々手間なので、AWS CLIをLocalStack向けにラップした awslocal コマンドをインストールして使いました。

awslocal の場合
awslocal s3 mb s3://test-bucket1

AWS CLI の場合
aws s3 mb s3://test-bucket2 --endpoint-url=http://localhost:4566

  • GitHub から LocalStack 環境をクローン
  • docker-compose.ymlの作成

設定は公式ドキュメントを参考にしています。

  • docker-composeで起動します
  • AWSサービスの確認


available は使用可能な状態
running は使用中

これで、LocalStack の使用できる環境準備が出来ました。

S3 バケットにファイルアップロードしてみた

バケットを作成して、ファイルをアップロードしてみます。

  • バケットの作成
  • ファイルアップロードとバケット確認

SQS キューにメッセージを送信してみた

C#のサンプルコードで、作成したキューにメッセージの送受信をしてみます。

  • キューの作成
  • キューの確認
  • キューにメッセージの送信と取得するサンプルコード(C#)

送信したメッセージと取得したメッセージを確認(コマンドで確認)

vscodeでコード実行時のコンソールのログを確認

データの永続化

無料版ではデータの永続化ができないので、ローカル環境で起動のたびに作成したリソースやデータが消えてしまいます。
起動のたびにリソースを作成したり、データを入れたりするのは面倒なので、初期化用のスクリプトを準備して、Dockerコンテナ起動時に自動で初期化するようにしました。

スクリプトは、/etc/localstack/init/ready.dに配置します。

init-aws.sh

docker-compose.yml

 

まとめ

LocalStackを使うことで、AWS環境を自分のローカルで自由に使うことが出来ました。
無料版なので制限はありますが、環境構築前に先行してコードの開発が行えたり、ローカル環境なので料金も気にすることなく、自由に使うことは出来ると感じました。

 

投稿者プロフィール

YoshiSaaaan
2023/1にスカイアーチネットワークスにJoin
AWSを日々勉強中