LoginSignup
1
2

More than 3 years have passed since last update.

S3を操作するLambda関数をローカルで開発するための環境構築

Posted at

Serverless Frameworkを使って構築したLambda関数のローカル開発環境で、LambdaからS3を操作する関数を開発したい。AWS上のS3を直接操作してもいいが、せっかくなのでローカルで完結する環境を構築する。

ローカルでS3をエミュレートするためのツール

ローカルでS3をエミュレートするためのツールとしては、
- LocalStack
- MinIO
- S3rver
あたりがあるようだが、今回はLocalStackを使用する。

事前準備

Dockerが必要なので事前に使えるようにしておく。
自宅で使っているPCはWindows 10 Homeのため、Docker Desktop for Windowsが使えない。調べてみたらDocker Tookboxというツールを使えばいいようなので、インストールする。(参考:@idani氏のwindows 10 home で docker を導入するメモ

LocalStackを使用するための設定

プロジェクトディレクトリの直下にdocker-compose.ymlを作成し、LocalStackのDockerイメージの定義を記述する。

docker-compose.yml
version: '3'
services:
  localstack:
    image: localstack/localstack
    ports:
      - "4572:4572"
    environment:
      - SERVICES=s3
      - DATA_DIR=/var/localstack/data
    volumes:
      - "./.localstack/data:/var/localstack/data:rw"

LocalStackは様々なAWSのコンポーネントをエミュレートできるが、今回はS3だけ使うのでS3に限定した定義にする。
portsはS3の使用ポート4572のみ、SERVICESもS3のみにする。
データの永続化のためDATA_DIRを定義する。

LocalStackの実行

Docker Toolboxの「Docker Quickstart Terminal」を起動し、そこからdocker-compose.ymlがあるディレクトリに移動し、docker-compose upを実行して起動する。初回はlocalstackが自動でダウンロードされる。

$ docker-compose up
Creating network "helloworld_default" with the default driver
Pulling localstack (localstack/localstack:)...
(略)
Status: Downloaded newer image for localstack/localstack:latest
(略)
localstack_1  | Starting mock S3 (http port 4572)...
(略)
localstack_1  | 2020-02-14T13:43:37:WARNING:infra.py: Service "s3" not yet available, retrying...

本当はReady.と表示されて起動完了のはずだが、なぜかWARNINGが。
とりあえず、CLIでアクセスできるか試してみる。
なお、エンドポイントの「192.168.99.100」はDocker Toolboxが動いているVirtualBox仮想マシンのIPアドレス。
Docker Desktopの場合は「localhost」でアクセスできる。

>aws --endpoint-url=http://192.168.99.100:4572 s3 mb s3://sample-bucket
make_bucket: sample-bucket
>dir > hoge.txt
>aws --endpoint-url=http://192.168.99.100:4572 s3 cp hoge.txt s3://sample-bucket
upload: .\hoge.txt to s3://sample-bucket/hoge.txt
>aws --endpoint-url=http://192.168.99.100:4572 s3 ls s3://sample-bucket
2020-02-14 22:58:13       2641 hoge.txt

問題なく、バケットの作成、ファイルの保存ができた。
(ちなみに、2回目に起動したら相変わらずWARNINGは出たが、Ready.も出た。)

1
2
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
1
2