0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

こんにちは、H×Hのセンリツ大好きエンジニアです。(同担OKです😉)

AWSを用いた開発、どうしてますか?
Lambdaでバッチ処理を行いS3バケットに保存する、みたいな動作をローカルで試してみたいですよね。

今回は、そんなあなたにピッタリのLocalStackの紹介と環境構築をしていきます!😁

LocalStackとは

AWSをローカル環境で開発・テストすることができるサービスです。
正確には、AWSをローカル環境にエミュレートしてくれるサービスです。

ローカルでAWSが試せるので、AWSの利用料は掛かりません!

ただ、サービスによってはLocalStack自体が有料プランになりますのでそこだけ注意🤯

LocalStackの環境構築

方法はいくつかありますが、今回はDockerを使っていきます!

docker-compose.yml
version: "3.8"

services:
  localstack:
    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:
      DEBUG: 1
      DOCKER_HOST: unix:///var/run/docker.sock
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"

これだけでOKです!
DEBUG: 1はデバッグモードを有効にしていますが、こちらは無くても動作します!

ポイントだけ説明すると、

docker-compose.yml
    ports:
      - "127.0.0.1:4566:4566" # LocalStack Gateway
      - "127.0.0.1:4510-4559:4510-4559" # external services port range

4556番ポートは、LocalStackのゲートウェイポートになります。
ホストの4556番ポートにマッピングしています。

docker-compose.yml
    environment:
      DOCKER_HOST: unix:///var/run/docker.sock
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"

DOCKER_HOSTは、LocalStackが内部でDockerコンテナを管理するために必要になります。

volumesはLocalStackがホストのDockerデーモンと通信するために定義しています。

また、LocalStackではAWS CLIを使用しますのでインストールします。

$ brew install awscli

その後、LocalStackが提供しているawscli-localをインストールします。
これはAWS CLIのラッパーとなります。

$ brew install awscli-local

後はDockerコンテナをビルドして起動するだけで使えるようになります!🤩

S3バケットをLocalStackコンテナ起動時に作成されるようにする

おまけ的な感じです。
S3バケットを作成し、JSONファイルを格納します。

docker-compose.yml
version: "3.8"

services:
  localstack:
    image: localstack/localstack
    ports:
      - "127.0.0.1:4566:4566"
      - "127.0.0.1:4510-4559:4510-4559"
    environment:
      DEBUG: 1
      DOCKER_HOST: unix:///var/run/docker.sock
      SERVICES: s3 # 使用するサービスを指定
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./init-scripts:/docker-entrypoint-initaws.d" # 初期化スクリプトをマウント
      - "./data:/data" # JSONファイルをマウント

SERVICES: s3で使うサービスを指定します。
今回はS3を使用します。

docker-compose.yml
    volumes:
      - "./init-scripts:/docker-entrypoint-initaws.d" # 初期化スクリプトをマウント
      - "./data:/data" # JSONファイルをマウント

init-scriptsディレクトリをコンテナ内の/docker-entrypoint-initaws.dにマウントします。

LocalStackはこのディレクトリ内のスクリプトを起動時に実行します。

init-scripts/init.sh
#!/bin/bash
# S3バケットの作成
awslocal s3 mb s3://my-bucket

# JSONファイルのアップロード
awslocal s3 cp /data/sample.json s3://my-bucket/sample.json

初期化スクリプトで、S3バケットの作成とJSONファイルのアップロードを行います。

data/sample.json
{
  "name": "John Doe",
  "age": 30,
  "city": "New York"
}

使用するJSONファイルです。

これで再ビルドして、コンテナを起動します。

http://localhost:4566/my-bucket/sample.json にアクセスすると、JSONが出力されていることが確認できます!

おわりに

ローカル環境でAWSを試せるLocalStackは如何でしたでしょうか?
気になった方は是非触ってみてください!

ここまでご覧いただき、ありがとうございました!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?