LocalStack 使い方メモ
LocalStack とは
AWS の CLI / API ベースのエミュレータです。マネージメントコンソールはないっぽい。
ライセンス料を支払うとエミュレートしてくれる機能が増え、ともすると、AWS 環境無しに AWS サービスを使用したアプリを作成することもできるようです。
実行環境準備
公式の Docker コンテナが用意されているので、それを使うと、簡単に環境構築を行えます。
version: "3.8"
services:
# LocalStack
localstack:
container_name: localstack
image: localstack/localstack
ports:
- "127.0.0.1:4566:4566"
- "127.0.0.1:4510-4559:4510-4559"
environment:
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
# LocalStack 操作用の Linux クライアント
localstack_client:
build: ./_ubuntu
container_name: localstack_client
hostname: localstack_client
restart: always
#volumes:
# - ./volume/home:/home
tty: true
#command: >
# sh -c "bash"
environment:
TZ: Asia/Tokyo
ENDPOINT_URL: http://localstack:4566
# Base Image
FROM ubuntu:22.04
# 必要なパッケージのインストール
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
locales tzdata sudo zip unzip bzip2 p7zip-full \
curl wget jq \
vim git \
python3 python3-pip \
&& apt-get autoremove -y \
&& apt-get autoclean -y \
&& apt-get clean -y
# localesの設定
RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG="ja_JP.UTF-8" \
LANGUAGE="ja_JP:ja" \
LC_ALL="ja_JP.UTF-8"
# AWSCLIv2
WORKDIR /opt
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
./aws/install && \
rm -rf aws awscliv2.zip
RUN apt-get install -y groff
# AWS SDK
RUN pip3 install boto3
RUN useradd -u 1000 -g 100 -G sudo -s /bin/bash -d /home/ubuntu ubuntu && \
echo "ubuntu:ubuntu" | chpasswd
USER ubuntu
WORKDIR /home/ubuntu
CMD ["bash"]
-
コンテナの実行
docker compose up -d --build
利用方法
お試し用の localstack_client
コンテナに入って作業します。
フリー版だと永続データを保持できない制約があるようですが、考えようによっては、コンテナを再起動すれば初期状態に戻せるので、動作確認用途としては便利なところもあります。
docker exec -it localstack_client bash
エミュレートできるサービスの確認
curl http://localstack:4566/_localstack/health | jq
{
"services": {
"acm": "available",
"apigateway": "available",
"cloudformation": "available",
"cloudwatch": "available",
"config": "available",
"dynamodb": "available",
"dynamodbstreams": "available",
"ec2": "running",
"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.1.1.dev"
}
AWS CLI
-
AWS CLI のサブコマンド tab 補完機能の有効化
echo "complete -C '`which aws_completer`' aws" >> $HOME/.bashrc source $HOME/.bashrc
-
AWS CLI の初期化
aws configure --profile localstack AWS Access Key ID [None]: dummy AWS Secret Access Key [None]: dummy Default region name [None]: ap-northeast-1 Default output format [None]: json
Access Key、Secret Access Key は適当でよいのですが、Region は AWS の正しいリージョンコードを設定する必要があるようです。
-
動作確認
aws ec2 describe-instances \ --profile localstack \ --endpoint-url $ENDPOINT_URL
環境変数
ENDPOINT_URL
は docker-compose.yml のenvironment
で定義しています。
AWS SDK
-
Boto 3 (AWS SDK for Python)
-
サンプルコード
import boto3 ACCESS_KEY = "dummy" SECRET_ACCESS_KEY = "dummy" REGION_NAME = "ap-northeast-1" ENDPOINT_URL = "http://localstack:4566" ec2 = boto3.client( "ec2", aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_ACCESS_KEY, region_name=REGION_NAME, endpoint_url=ENDPOINT_URL ) ec2_instances = ec2.describe_instances() print(ec2_instances)
Access Key、Secret Access Key は適当でよいのですが、Region は AWS の正しいリージョンコードを設定する必要があるようです。
-