ホームページ制作を大阪で安く頼むならプロットハブ!

ホームページ制作を大阪で安く頼むならプロットハブ!
毎月5社限定企画実施中

プロットハブ技術ブログ

DockerでLocalStackの開発環境を構築する

Hidekazu Koga

Hidekazu Koga

2024/9/27

はじめに

LocalStackを利用することで、ローカル環境でAWSサービスを再現し、開発やテストを行うことができます。
通常、AWS CLIやAWS SDKを使用してLocalStackリソースを操作しますが、ローカル環境にこれらのツールを直接インストールするのではなく、Dockerを使用することで、より簡単で効率的なクライアント環境を構築することができます。

本記事では、DockerでLocalStack用のクライアント環境を作成しましたので、その環境について解説します。

GitHubリポジトリ

本記事で解説するコードは以下のGitHubリポジトリからダウンロードできます。

https://github.com/hdkzkg/localstack-sample

コンテナ起動

VS Codeの拡張機能DevContainerを使用しています。DevContainerをインストールしていない方は、先にインストールしてください。

VS Codeを利用しない方も、docker composeコマンドでコンテナを起動できます。

動作確認

動作確認はlocalstack-clientコンテナにログインする必要があります。

VS CodeのDevContainerでコンテナ起動した方は、VS Codeのターミナルを開くと、localstack-clientのターミナルが表示されます。

docker composeコマンドでコンテナを起動した方は、以下のコマンドでlocalstack-clientにログインしてください。

docker exec -it localstack-client /bin/bash
AWS CLI

AWS CLIでバケットを作成します。以下のコマンドを実行してください。

awslocal s3api create-bucket --bucket sample-bucket --create-bucket-configuration LocationConstraint=ap-northeast-1

バケット作成に成功すると以下のレスポンスが返ってきます。AWS CLIでバケットが作成できることが確認できました。

{
    "Location": "http://sample-bucket.s3.localhost.localstack.cloud:4566/"
}

AWS SDKの確認用に別のバケットも作成します。

root@5a60ab62c85f:/workspace# awslocal s3api create-bucket --bucket sample-bucket2 --create-bucket-configuration LocationConstraint=ap-northeast-1
{
    "Location": "http://sample-bucket2.s3.localhost.localstack.cloud:4566/"
}
AWS SDK

AWS SDKはPythonのboto3を使用して、S3のバケット一覧を取得しています。以下のコマンドを実行してください。

python -m client.sdk_src.s3.lists

以下の結果となり、AWS CLIで作成したバケットが取得できました。

sample-bucket
sample-bucket2

コード解説

docker-compose.yml

今回作成した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"

  localstack_client:
    container_name: localstack-client
    build:
      context: .
      dockerfile: ./docker/client/Dockerfile
    tty: true
    environment:
      - LOCALSTACK_HOST=host.docker.internal
      - AWS_DEFAULT_REGION=ap-northeast-1
    volumes:
      - "./:/workspace"
    depends_on:
      - localstack
localstack

LocalStackのサービスです。公式ページのCommunity版のdocker-compose.ymlを使用しています。

Community版は無料で利用できますが、一部サービスが扱えない、コンテナを停止するとリソースが削除されるなどの制約があります。有料のPro版もあります。

localstack_client

ビルド対象のDockerfileは以下の通りです。

FROM python:3.10-slim

WORKDIR /workspace

RUN apt-get update

RUN pip install awscli awscli-local localstack-client

ポイント以下の通りです。

1行目 FROM python:3.10-slim  
AWS SDKでは、Pythonを使用します。Pythonでは公式から後述するライブラリが提供されています。

4行目 RUN pip install awscli awscli-local localstack-client
awscli:AWS CLIを使用するためのツールです。
awscli-local:LocalStackへアクセスする際に使用する、awscliのラッパーです。

awscliでは、

aws --endpoint-url=http://localhost:4566 s3api create-bucket --bucket sample-bucket --create-bucket-configuration LocationConstraint=ap-northeast-1

というように--endpoint-urlを都度指定する必要がありますが、awscli-localでは、

awslocal s3api create-bucket --bucket sample-bucket --create-bucket-configuration LocationConstraint=ap-northeast-1

のように、--endpoint-urlを省略できます。

localstack-client
LocalStackの公式からAWS SDK Pythonで簡単に利用できるためのライブラリが提供されているため、このライブラリを使用します。このライブラリを使用することで、boto3利用のコードを書く際にendpoint_urlなどの指定をする必要がなくなるため便利です。

docker-compose.ymlのenvironment
awslocal、localstack-clientでは、endpoint_urlのデフォルト値はhttp://localhost:4566となっています。localstackとlocalstack-clientは別コンテナのためlocalstack-clientからlocalhostでlocalstackコンテナを参照でないので、LOCALSTACK_HOST=host.docker.internalとしています。

まとめ

本記事では、LocalStackとLocalStackのクライアント環境構築について解説しました。クラウドサービスを直接利用することを避けたい場合は、こちらの環境を使って開発やAWSリソースを扱う練習をしていきたいと思います。

プロットハブはソフトウェア開発を
支援しています。
ご興味のある方はぜひお気軽に
ご相談ください。

一覧ページに戻る

全カテゴリ一覧

全タグ一覧

関連記事

コメント

コメントを残す

コメントが承認されると公開されます。※の入力欄は必須項目です

ホームページ制作が毎月5社限定5万5千円から!ご依頼の方はコチラ!