👌
AWSをローカルで試せる LocalStack を使ってみる
LocalStackとは?
LocalStack は、クラウド アプリケーションを開発するための使いやすいテスト/モック フレームワークです。 LocalStack を使用すると、ローカルのテスト環境を数秒で立ち上げることができ、実際の AWS 環境と同じ機能を得ることができます。
無料で使えるものと有料のものがあるが、以下で確認できる。
(思っていたより有料のものが多い印象だが、S3やLambda、DynamoDBなど基礎的なAWSサービスは無料で試せるのでかなり嬉しい。)。
準備
以下を参考に準備をしていく。
前提条件
- python (Python 3.7 ~ 3.10)
- pip (Python package manager)
- Docker
LocalStackのインストール
pip install localstack
※ root
ではないユーザーで実行すること(sudo
もNG)。
確認
$ localstack --version
1.0.4
LocalStackの起動
$ localstack start -d
__ _______ __ __
/ / ____ _________ _/ / ___// /_____ ______/ /__
/ / / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/
/ /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,<
/_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_|
💻 LocalStack CLI 1.0.4
[14:57:10] starting LocalStack in Docker mode 🐳 localstack.py:138
preparing environment bootstrap.py:667
configuring container bootstrap.py:675
starting container bootstrap.py:681
[14:57:11] detaching bootstrap.py:685
LocalStackの状態チェック
$ localstack status services
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ Service ┃ Status ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
│ acm │ ✔ available │
│ apigateway │ ✔ 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 │ ✔ available │
│ s3control │ ✔ available │
│ secretsmanager │ ✔ available │
│ ses │ ✔ available │
│ sns │ ✔ available │
│ sqs │ ✔ available │
│ ssm │ ✔ available │
│ stepfunctions │ ✔ available │
│ sts │ ✔ available │
│ support │ ✔ available │
│ swf │ ✔ available │
└──────────────────────────┴─────────────┘
CLIのインストール
LocalStackを操作するには様々な方法がある(下記参照)。
今回はawslocal
を使う。
awslocal
はawscli
のLocalStack用ラッパーであり、いくつかのパラメータ指定などを省略できる。
$ pip install awscli-local[ver1]
確認
$ awslocal --version
aws-cli/1.25.62 Python/3.8.2 Darwin/21.6.0 botocore/1.27.61
実践
まずはS3の静的Webサイトホスティングを試してみる。
手順は以下のサイトを参考にした(クラウドのAWSをつかった手順なので、適宜読み替え)。
S3の静的Webサイトホスティング
バケットの作成
$ awslocal s3api create-bucket --bucket sample-bucket
{
"Location": "/sample-bucket"
}
バケットの確認
$ awslocal s3api list-buckets
{
"Buckets": [
{
"Name": "sample-bucket",
"CreationDate": "2022-09-03T00:15:06.000Z"
}
],
~~
}
バケットのアクセスブロックを設定
$ awslocal s3api put-public-access-block --bucket sample-bucket --public-access-block-configuration "BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false"
確認
$ awslocal s3api get-public-access-block --bucket sample-bucket
{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": false,
"IgnorePublicAcls": false,
"BlockPublicPolicy": false,
"RestrictPublicBuckets": false
}
}
ポリシーのアタッチ
ポリシーの内容
以下の内容でpolicy.json
を作成する。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::for-test-page/*"
}
]
}
アタッチ
$ awslocal s3api put-bucket-policy --bucket sample-bucket --policy file://policy.json
確認
$ awslocal s3api get-bucket-policy --bucket sample-bucket | jq
{
"Policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\", \n \"Principal\": \"*\", \n \"Action\": \"s3:GetObject\", \n \"Resource\": \"arn:aws:s3:::for-test-page/*\" \n } \n ] \n}\n"
}
表示したいWebページのアップロード
Webページ(index.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>test page</title>
</head>
<body>
This is test page.
</body>
</html>
アップロード
$ awslocal s3 cp index.html s3://sample-bucket/index.html
upload: ./index.html to s3://sample-bucket/index.html
Webサイトの設定
$ awslocal s3 website s3://sample-bucket --index-document index.html
ブラウザからのアクセス
ポート番号の確認
$ localstack config show | grep EDGE_PORT
│ EDGE_PORT │ 4566 │
│ EDGE_PORT_HTTP │ 0 │
ブラウザでアクセス
LocalStackでは、リージョン名を省いて指定できる。
<bucket-name>.s3.<region>.localhost.localstack.cloud
<bucket-name>.s3.<region>.amazonaws.com
<bucket-name>.localhost.localstack.cloud
今回はbucket-name
はsample-bucket
、ポートは4566
なのでURLは下記となる。
https://sample-bucket.localhost.localstack.cloud:4566/index.html
ブラウザでアクセスすると、index.htmlに設定した内容が表示される。はず。
所感
- 料金などの心配をせずにAWSの勉強ができる。
- これは
awscli
の仕様なのかもしれないが、操作によっては何も表示されない場合があり成功したのか失敗したのかがわかりにくい。 - いろいろ試してみたい。
Discussion