今回の記事では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
push images
次はlocalstackのImageを下記のコマンドで取得します。
docker pull localstack/localstack |
Create venv python Environment
Pythonの仮想環境を作成します。
mkdir yourvenv python3 –m 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
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します。
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しましょう。
メールアドレスもしくはGithubアカウントさえあればSign inできます。
Done!まずこちらはLocalstackが実際稼働してるLocalhostからSystem Statusの確認画面になります。下図のように、Localstackの状態はRunningになっています。
もちろん、他のPCからでもLocalstackの稼働状態を確認できます。まずはEditをクリックします。
IPアドレスを設定し、Save bookmarkで設定を保存していきましょう。
Done!
例えばDynamoDBの状態を確認したい場合は、DynamoDBをクリックします。
DynamoDBにあるTableを確認できます。
また、DynamoDBの中に格納されたKeyとValueも確認できました。