LocalStack#ローカル環境でLocalstackを使ってみよう

今回の記事ではSeeedStudioのreComputer R1025-10にLocalStackのインストール手順を1から説明します。LocalStackを使うことで、AWS環境を自分のローカルでも自由に使えます。もちろん無料版は使用制限はありますが、環境構築前にコードの開発したりAWSの勉強したりできます。また、ローカル環境なので料金も気にすることなります。

さ、FAを楽しもう。

LocalStackは、ラップトップやCI環境上で1つのコンテナで動作するクラウドサービスエミュレーターだ。 LocalStackを使えば、リモートのクラウドプロバイダーに接続することなく、AWSアプリケーションやLambdasを完全にローカルマシン上で実行できます。

https://github.com/localstack/localstack?tab=readme-ov-file

複雑なCDKアプリケーションやTerraformコンフィギュレーションをテストしている場合でも、AWSサービスについて学び始めたばかりの場合でも、LocalStackはテストと開発のワークフローをスピードアップし、簡素化するのに役立ちます。

LocalStackは、AWS Lambda、S3、DynamoDB、Kinesis、SQS、SNSなど、増え続けるAWSサービスをサポートしています。また、 LocalStack Proは、クラウド開発を容易にするための追加APIと高度な機能をサポートしています。

つまり、AWSアプリケーションをローカルで開発およびテストすることで、開発時間を短縮し、製品のベロシティを向上させます。 不必要なAWS支出を削減し、AWS開発アカウントを維持する複雑さとリスクを取り除きます。

また、コミュニティ版は商用利用が可能です(Apache 2.0オープンソースライセンスで配布)。

Installation

ではLocalstackをマシンにインストールしていきましょう。

Docker installation

最初にマシンにdocker 環境がインストールされていることを確認してください。

Docker can run with-out root

また、sudoを使用したり、rootユーザーとして実行したりしないでください。 LocalStackのインストールと起動は、すべてローカルの非rootユーザーで行う必要があります。 

Reference Link

Docker#非Root UserでDockerを実行する手順

push images

次はlocalstackのImageを下記のコマンドで取得します。

docker pull localstack/localstack

Create venv python Environment

Pythonの仮想環境を作成します。

mkdir yourvenv
python3m venv yourvenv
source yourvenv/bin/activate

Install localstack

先ほど作成した仮想環境をActivateした状態でlocalstackをインストールします。

python3 -m pip install —user localstack

configure docker-compose

docker-composeツールを作成し、Containerを構築します。

下図のコマンドでdocker-compose.ymlを作成します。

mkdir comp
cd comp
nano docker-compose.yml

こちらはdocker-compose.ymlの中身です。

Services:
  localstack:
    container_name: “${LOCALSTACK_DOCKER_NAME:-localstack-main}”
    image: localstack/localstack
    ports:
      – “4566:4566”            # LocalStack Gateway
      – “4510-4559:4510-4559”  # external services port range
      – ‘443:443’
    environment:
      # LocalStack configuration: https://docs.localstack.cloud/references/configuration/
      – DEBUG=${DEBUG:-0}
      – PERSISTENCE=1
      – DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      – “${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack”
      – “/var/run/docker.sock:/var/run/docker.sock”

Reference Link

PLCNEXT#Play with InfluxDB x telegraf

install aws/awscil

AWSコマンドラインインターフェース(CLI)は、コマンドラインインターフェースを介してAWSサービスを作成および管理するための統一ツールです。 LocalStack内に実装されたサービスに適用可能なすべてのCLIコマンドは、LocalStackに対して操作するときに実行できます。

pip install awscli
pip install awscli-local

また以下のエラーが発生した場合、cacheをクリアする必要があります。

ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.

pip cache purge

Start!

こちらのコマンドでContainerを起動しましょう。

docker compose up

Done!Localstackが起動できました。

Test with bucket

こちらのコマンドで新しいbucket “my-first-bucket”を作成します。

awslocal s3 mb s3://my-first-bucket
make_bucket: my-first-bucket

次はBucketが作成したかをCheckします。

http://yourip/my-first-bucket

Done!

health

jqをインストールします。jqは、JSONデータを処理するための軽量のコマンドラインツールです。JSON(JavaScript Object Notation)形式のデータを簡単に解析、変換、フィルタリング、整形することができ、スクリプトやコマンドラインベースの処理において非常に便利です。

sudo apt-get install jq

次はこちらのコマンドでLocalstackの運用状態を確認します。

(testlocal) recomputer@reComputer-R100x://home/recomputer/Desktop/testlocal $ curl -s “http://192.168.13.159:4566/_localstack/health” | jq

Done!Localstackから各Servicesの運用状態が返ってきました。

{
  “services”: {
    “acm”: “available”,
    “apigateway”: “available”,
    “cloudcontrol”: “available”,
    “cloudformation”: “available”,
    “cloudwatch”: “available”,
    “config”: “available”,
    “dynamodb”: “available”,
    “dynamodbstreams”: “available”,
    “ec2”: “available”,
    “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”: “running”,
    “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.8.2.dev139”
}

Service status 

次はこちらのコマンドでLocalstackのサービスの状態を確認していきましょう。

localstack status services

Upload

次はこちらのコマンドでLocal SystemのFileをs3 bucketにUploadしてみます。

(testlocal) recomputer@reComputer-R100x://home/recomputer/Desktop/testlocal $ awslocal s3 cp test.text s3://my-first-bucket
upload: ./test.text to s3://my-first-bucket/test.text

Check the files in S3 bucket

今度はこちらのコマンドで先ほどUploadしたFileを確認してみましょう。

(testlocal) recomputer@reComputer-R100x://home/recomputer/Desktop/testlocal $ awslocal s3 ls s3://my-first-bucket
2024-11-20 07:54:56         44 test.text

Done!

Persistence

Localstackの無料版ではデータの永続化ができないので、ローカル環境で起動のたびに作成したデータがなくなります。毎回起動したあとにデータを再設定するのも手間がかかりますので、初期化用Scriptを用意し、Dockerコンテナ起動時に自動で初期化するようにします。

Scriptは以下のDirectoryに配置します。

/etc/localstack/init/ready.d

start.shを作成します。

nano start.sh

こちらはstart.shの中身です。

#!/bin/bash

printtime(){
  echo $(date)”:”
}

echo “Starting up…”

echo $(printtime)”create bucket..”
awslocal s3 mb s3://my-first-bucket


services:
  localstack:
    container_name: “${LOCALSTACK_DOCKER_NAME:-localstack-main}”
    image: localstack/localstack
    ports:
      – “4566:4566”            # LocalStack Gateway
      – “4510-4559:4510-4559”  # external services port range
      – ‘443:443’
    environment:
      # LocalStack configuration: https://docs.localstack.cloud/references/configuration/
      – DEBUG=${DEBUG:-0}
      – PERSISTENCE=1
      – DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      – “${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack”
      – “/var/run/docker.sock:/var/run/docker.sock”
      – ./start.sh:/etc/localstack/init/ready.d/start.sh
    command: [“/bin/bash”, “/ect/localstack/ready.d/init/start.sh”]

Done!docker compose updでLocalstackを起動するとScriptが自動的に実行されました。

Using AWS instead of AWSLocal CLI

また、純粋のAWS CLIにもLocalStackをアクセスすることができますが、最初に”Unable to locate credentials. You can configure credentials by running “aws configure”.”というエラーが表示されます。

(testlocal) recomputer@reComputer-R100x://home/recomputer/Desktop/testlocal $ aws s3 ls –endpoint-url http://localhost:4566
Unable to locate credentials. You can configure credentials by running “aws configure”.

このエラーは、実際にはLocalStackではなくAWS CLIによって発生します。 awsのconfigureを実行し、AWSのアクセスキーIDを入力するプロンプトが表示されたら、testを入力し、もう一度testを入力し、デフォルトのリージョンであるus-east-1を入力することで、CLIのLocalStackで使用する(デフォルトの)プロファイルを設定する必要があります。

(testlocal) recomputer@reComputer-R100x://home/recomputer/Desktop/testlocal $ aws configure
AWS Access Key ID [None]: test
AWS Secret Access Key [None]: test
Default region name [None]: us-east-1
Default output format [None]:
(testlocal) recomputer@reComputer-R100x://home/recomputer/Desktop/testlocal $ aws s3 ls –endpoint-url http://localhost:4566
2024-11-20 08:30:27 my-first-bucket

Resource Blowser

そしてLocalstackに登録すれば、現在ネットワークで稼働してるLocalstackの状態を確認できます。下記のLinkからLocalstackにSign inしましょう。

https://www.localstack.cloud/

メールアドレスもしくはGithubアカウントさえあればSign inできます。

Done!まずこちらはLocalstackが実際稼働してるLocalhostからSystem Statusの確認画面になります。下図のように、Localstackの状態はRunningになっています。

もちろん、他のPCからでもLocalstackの稼働状態を確認できます。まずはEditをクリックします。

IPアドレスを設定し、Save bookmarkで設定を保存していきましょう。

Done!

例えばDynamoDBの状態を確認したい場合は、DynamoDBをクリックします。

DynamoDBにあるTableを確認できます。

また、DynamoDBの中に格納されたKeyとValueも確認できました。

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする