LoginSignup
0
0

LocalStack 使い方メモ

Posted at

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
./_ubuntu/Dockerfile
# 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 の正しいリージョンコードを設定する必要があるようです。

0
0
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
0