ブログ

AWS 開発環境| LocalStack をさわってみた。

AWS で開発する際、開発環境の費用は気になりませんか?

AWS さわり始めの頃に課金体系を理解しておらず、精神的にもお財布的にも大ダメージをくらったことのあるエンジニア横田です。

本ブログでは、ローカルマシン上に AWS 環境をエミュレートする機能をもつクラウドサービスエミュレータ「LocalStack」をご紹介します!
どうか本ブログを読んでくださった読者の皆様が筆者と同じ道を通りませんように。。

AWS 開発環境 LocalStack とは?

冒頭でもお伝えしたとおり、LocalStack とはローカルマシン上に AWS 環境をエミュレートする機能をもつクラウドサービスエミュレータです。 

ローカルに AWS 環境が作成されるので料金を気にせず使用でき、また、既存の AWS 環境に影響を与えることもありません。基本的な API 群を利用できる「Community 版(無料)」や、すべての API を利用できる「Pro 版(有料)」があります。

詳しくは公式サイト*1 をご確認ください。

AWS 開発環境 LocalStack を使う準備

AWS CLI を使用するため、インストールがまだの方は先にインストールしておいてください。
「AWS CLI って何?」という方は、弊社のブログにて紹介しておりますので、ぜひ こちら からご確認ください!

AWS CLI でも LocalStack 環境は操作できるのですが、毎回エンドポイントを指定してあげる必要があり少々手間です。なので、LocalStack が用意してくれている AWS CLI ラッパー「awslocal」コマンド*2 をインストールしておきます。

$ pip3 install awscli-local

ご参考までに「awslocal」を使用する場合としない場合のコマンド例をご紹介します。
「awslocal」をインストールしなくとも LocalStack は利用できるので、インストールはお好みで実施ください。

使用する場合:
$ aws s3 mb s3://localstack-bucket --endpoint-url=http://localhost:4566
使用しない場合:
$ awslocal s3 mb s3://localstack-bucket

AWS CLI のインストールが完了したら、GitHub から LocalStack 環境をクローンします。

LocalStackを利用する方法は色々あるのですが、今回は docker-compose で起動します。
その他の方法については公式サイト*3 をご確認ください。

$ git clone https://github.com/localstack/localstack.git

クローンした docker-compose.yml を確認しておきます。

$ cd localstack
$ cat 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
      - "127.0.0.1:53:53"                # DNS config (only required for Pro)
      - "127.0.0.1:53:53/udp"            # DNS config (only required for Pro)
      - "127.0.0.1:443:443"              # LocalStack HTTPS Gateway (only required for Pro)
    environment:
      - DEBUG=${DEBUG-}
      - PERSISTENCE=${PERSISTENCE-}
      - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR-}
      - LOCALSTACK_API_KEY=${LOCALSTACK_API_KEY-}  # only required for Pro
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

今回はクローンしたままの状態で docker-compose up しますが、必要に応じて編集してください。

AWS 開発環境 LocalStack を使ってみよう

それでは LocalStack 環境に S3 バケットを作成してみます。

まずは LocalStack 環境を起動します。

$ docker-compose up -d
Starting localstack_main ... done

起動しました!

各 AWS サービスが使用できるかどうかを確認してみます。
available が表示されていれば使用可能な状態です。

$ curl -s "http://127.0.0.1:4566/health" | jq .
{
  "features": {
    "initScripts": "initialized"
  },
  "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": "running",
    "s3control": "available",
    "secretsmanager": "available",
    "ses": "available",
    "sns": "available",
    "sqs": "available",
    "ssm": "available",
    "stepfunctions": "available",
    "sts": "available",
    "support": "available",
    "swf": "available"
  },
  "version": "1.0.5.dev"
}

大丈夫そうですね!

では、LocakStack 環境で S3 バケットを作成します。

$ awslocal s3 mb s3://localstack-bucket
make_bucket: localstack-bucket

$ awslocal s3 ls
2022-08-26 13:22:20 localstack-bucket

LocalStack 環境に S3 バケットが作成されました!

もちろんその他の操作も可能です。
試しにテストファイルを作成しアップロードしてみます。

$ cat test.txt
this is test

$ awslocal s3 cp ./test.txt s3://localstack-bucket/
upload: ./test.txt to s3://localstack-bucket/test.txt

$ awslocal s3 ls s3://localstack-bucket
2022-08-26 13:30:50         13 test.txt

アップロードできました!

ローカルの test.txt を削除して、アップロードした test.txt をダウンロードしてみます。

$ rm -f test.txt

$ awslocal s3 cp s3://localstack-bucket/test.txt ./test.txt
download: s3://localstack-bucket/test.txt to ./test.txt

$ cat test.txt
this is test

ダウンロードも問題なさそうですね!

LocalStack 環境で使用中の AWS サービスは “available” から “running” となるので、どのサービスを使用しているのかわからなくなったときはステータスをご確認ください。

$ curl -s "http://127.0.0.1:4566/health" | jq .
{
  "features": {
    "initScripts": "initialized"
  },
  "services": {
  ~~~ 省略 ~~~ 

    "s3": "running",

  ~~~ 省略 ~~~ 
}

AWS 開発環境 LocalStack(まとめ)

いかがでしたでしょうか?

無料の「Community 版」では利用できる API 群が限定されるものの、料金のことを気にすることなく AWS CLI の練習や Lambda の開発・検証といったような利用が気軽に行え、とても便利だと感じました。

とはいえ、場合によっては「エミュレータだけじゃなく、実際に AWS アカウントを利用したい。」「開発環境はできる限り料金を抑えたい。。でも自分でいちいち AWS リソースを停止するのは面倒くさいし忘れそう。。」というお声もあるかと思います。

そんなときはターン・アンド・フロンティアにお任せください!

「土日は停止させておきたい」「月曜日だけ時間指定で利用したい」等、お客様毎の利用スケジュールにあわせて EC2 や RDS の起動・停止を管理いたします。

少しでも興味を持っていただけましたら、本ブログ右上の[お問い合わせ]ボタンよりお気軽にお問い合わせくださいませ。


【筆者実行環境】

  • PC:MacBook Air (M1, 2020)
  • OS:macOS Monterey 12.4
  • aws cli :aws-cli/2.2.44 Python/3.8.8 Darwin/21.5.0 exe/x86_64 prompt/off
  • Docker:version 20.10.16
  • docker-compose:version 1.29.2

*1  LocalStack 公式サイト https://localstack.cloud/
*2 GitHub - LocalStack AWS CLI https://github.com/localstack/awscli-local
*3 LocalStack | docs - Get LocalStack Up and Running https://docs.localstack.cloud/get-started/#get-localstack-up-and-running

元記事発行日: 2022年09月29日、最終更新日: 2022年10月11日