はじめに
ソフトウェア開発において、クラウドサービスを利用する機会が増えてきていると思います。Amazon Web Services (AWS) はその中でも最も利用されるクラウドサービスの一つです。
しかし、開発環境でAWSリソースを直接利用することについて、以下のような懸念点があるのではないでしょうか?
- 料金形態を理解せず使用して、請求額がとんでもないことになった
- コストが心配で利用を控えたり、制限をかけたりして開発が非効率になっている
- テスト用のリソースを削除するのに手間がかかる
LocalStackを使用すれば、これらの問題を解決できます。本記事では、LocalStackの概要やインストール方法について解説します。
LocalStackとは?
LocalStackは、ローカル開発環境でAWSのクラウドサービスをエミュレートするオープンソースツールです。AWSの主要なサービス(例:S3、DynamoDB、SQS、Lambdaなど)をローカル環境で再現し、開発者がクラウドサービスを利用する必要がありません。LocalStackはDockerコンテナ内で動作し、簡単にセットアップできます。
料金体系
LocalStackには、無料のCommunity版と有料のPro版があります。Pro版の料金はこちらのページに記載があります。
Community版とPro版の主な違いは、下記の通りです。
- 利用可能なAWSサービスの違い(Community版ではRDSやECSなどは利用不可)
- Community版ではリソースが永続化されない(LocalStackを再起動すると既存のリソースが削除される)
Community版、Pro版で利用可能なサービスについては、こちらのページを参照してください。一覧で(Pro)と記載のサービスはPro版のみで利用可能です。
セットアップ
前提条件
LocalStackはDockerコンテナ内で動作するため、あらかじめDockerをインストールしておく必要があります。インストールがまだの方はこちらのページからご自身の端末に応じたDockerをインストールしてください。
インストール
公式ページには、数種類のインストール方法が記載されていますが、本記事では、Docker-Composeで環境構築します。
docker-composeファイル
公式ページに記載されているdocker-compose.ymlファイルをそのまま利用します。
本記事ではCommunity版のdocker-compose.ymlを使用しています。
version: "3.8"
services:
localstack:
container_name: "${LOCALSTACK_DOCKER_NAME:-localstack-main}"
image: localstack/localstack
ports:
- "127.0.0.1:4566:4566" # LocalStack Gateway
- "127.0.0.1:4510-4559:4510-4559" # external services port range
environment:
# LocalStack configuration: https://docs.localstack.cloud/references/configuration/
- DEBUG=${DEBUG:-0}
volumes:
- "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
起動確認
Dockerが起動したらhttp://localhost:4566/_localstack/health
へアクセスします。
起動していれば、以下のレスポンスが返ってきます。利用可能なサービスを確認することができます。
{
"services": {
"acm": "available",
"apigateway": "available",
"cloudformation": "available",
"cloudwatch": "available",
"config": "available",
"dynamodb": "available",
"dynamodbstreams": "available",
"ec2": "available",
"es": "available",
"events": "available",
"firehose": "available",
"iam": "available",
"kinesis": "available",
"kms": "available",
"lambda": "available",
"logs": "available",
"opensearch": "available",
"redshift": "available",
"resource-groups": "available",
"resourcegroupstaggingapi": "available",
"route53": "available",
"route53resolver": "available",
"s3": "available",
"s3control": "available",
"scheduler": "available",
"secretsmanager": "available",
"ses": "available",
"sns": "available",
"sqs": "available",
"ssm": "available",
"stepfunctions": "available",
"sts": "available",
"support": "available",
"swf": "available",
"transcribe": "available"
},
"edition": "community",
"version": "3.5.1.dev"
}
S3を使った動作確認
前提条件
ここでは AWS CLI v2 を使用して、確認しています。
AWS CLI v2 をインストールしたい方は、こちらのページに従ってインストールを行って下さい。
profileの作成
profileを作成します。下記のコマンドを実行してください。プロファイル作成に必要な情報の入力が求められます。
aws configure --profile localstack
AWS Access Key ID [None]: test
AWS Secret Access Key [None]: test
Default region name [None]: np-northeast-1
Default output format [None]: json
AWS Access Key ID
AWS secret Access Key
は任意の値で問題ないですが、Default region name
にはAWSのリージョンコードを入力する必要があります。
バケットの作成
AWS CLIの下記のコマンドを実行します。
aws --profile localstack --endpoint-url=http://localhost:4566 s3api create-bucket --bucket sample-bucket --create-bucket-configuration LocationConstraint=ap-northeast-1
下記のようなレスポンスが表示されれば、成功です。
{
"Location": "http://sample-bucket.s3.localhost.localstack.cloud:4566/"
}
下記のコマンドを実行するとバケットの一覧を取得します。先程作成したバケットが確認できました。
your directory> aws --profile localstack --endpoint-url=http://localhost:4566 s3 ls
2024-07-12 21:14:12 sample-bucket
リソース操作についての補足
この記事ではAWS CLIでリソースの操作を行いましたが、LocalStack CLI というツールも用意されています。AWS CLIでは都度--endpoint-url=http://localhost:4566
を記述しないといけませんが、LocalStack CLIでは--endpoint-url=http://localhost:4566
を省略できます。また AWS SDK での操作も可能です。
まとめ
この記事では、LocalStackの特徴とセットアップ方法について解説しました。LocalStackを使用することで、コストを削減でき、また実際のAWS環境を汚すことなく様々なテストができるようになると思います。
AWSを使用した開発の際には、LocalStackを活用して効率的な開発を行っていきたいと思います。
コメント