LocalStack 使い方メモ
LocalStack とは
AWS の CLI / API ベースのエミュレータです。マネージメントコンソールはないっぽい。
ライセンス料を支払うとエミュレートしてくれる機能が増え、ともすると、AWS 環境無しに AWS サービスを使用したアプリを作成することもできるようです。
インストール
公式の Docker コンテナが用意されているので、それを使うと、簡単に環境構築を行えます。
- 
docker-compose.yaml 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
AWS CLI/SDK がインストールされたクライアント端末を用意しておきます。
- 
./_ubuntu/Dockerfile # Base Image FROM ubuntu:22.04 # 必要なパッケージのインストール RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y \ locales tzdata sudo 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"]
- 
コンテナの実行 
利用方法
お試し用の localstack_client コンテナに入って作業します。
フリー版だと永続データを保持できない制約があるようですが、考えようによっては、コンテナを再起動すれば初期状態に戻せるので、動作確認用途としては便利なところもあります。  
エミュレートできるサービスの確認
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 補完機能の有効化 
- 
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]: jsonAccess Key、Secret Access Key は適当でよいのですが、Region は AWS の正しいリージョンコードを設定する必要があるようです。 
- 
動作確認 環境変数 ENDPOINT_URLは docker-compose.yml のenvironmentで定義しています。
- 
IAM 関連コマンド - 
ユーザ追加 
- 
アクセスキーの生成 
- 
ユーザリストの取得 
- 
個別ユーザ情報取得 
 
- 
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 の正しいリージョンコードを設定する必要があるようです。 
 
-