はじめに
AWS CDKで書いたリソースをLocalStackで動かすところまでを行います。
手順
便利なcdklocal
があるのでそちらを使いましょう。
これを用いることで、楽にCDKをLocalstack上にデプロイできます。
npm install -g aws-cdk-local aws-cdk
cdk init app --language=python local-test
でCDKを開始しましょう。
次に、PythonでCDKのリソースを記述します。
今回は1つのスタックにまとめてざっくり用意しました。
from aws_cdk import (
Duration,
Stack,
aws_sqs as sqs,
aws_s3 as s3,
aws_dynamodb as dynamodb
)
from constructs import Construct
class LocalTestStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# example resource
sqs.Queue(
self, "TestQueue1",
queue_name='TestQueue1',
visibility_timeout=Duration.seconds(300),
)
sqs.Queue(
self, "TestQueue2",
queue_name='TestQueue2',
visibility_timeout=Duration.seconds(300),
)
dynamodb.Table(self,
'UserTable',
table_name='UserTable',
partition_key=dynamodb.Attribute(
name="id",
type=dynamodb.AttributeType.NUMBER
),
sort_key = dynamodb.Attribute(
name="nickname",
type=dynamodb.AttributeType.STRING
),
)
s3.Bucket(self,
"TestBucket",
bucket_name='test-bucket',
)
そして、dockerでlocalstackを用意します。
services:
localstack:
container_name: localstack
image: localstack/localstack:3
ports:
- 4566:4566
- 4510-4559:4510-4559
environment:
- EAGER_SERVICE_LOADING=1
- SERVICES=sts,ssm,cloudformation,iam,s3,ses,sqs,dynamodb
- AWS_DEFAULT_REGION=ap-northeast-1
- PERSISTENCE=1
volumes:
- ./localstack/volume:/var/lib/localstack
次の手順で、CDKのリソースをlocalstackにデプロイできます。
docker compose up -d
cdklocal bootstrap
# diff確認
cdklocal diff
cdklocal deploy
デプロイ後の確認
デプロイ完了すると、localstack提供のawslocal
を使用して、awslocal sqs list-queues
のように、コマンドベースで確認することができます。
また、別の方法として、LocalstackのWEBダッシュボードの「Resource Browser」から、確認できます。
例として、S3を見たい場合は、 https://app.localstack.cloud/inst/default/resources/s3 といった感じです。
つまづきポイント
SQSを使用する場合に、Localstack 1系だとうまく動作しない
このあたりのお話です。
こちらを踏まえて、今回はLocalstack3系を使用することで、該当現象を回避しました。
EAGER_SERVICE_LOADING と cdklocal
CDKの前提条件として、CloudFormationなどが必要です。
そのため、EAGER_SERVICE_LOADING=1
とする場合は、SERVICES=sts,ssm,cloudformation,iam
のように、これら4つを指定するようにしましょう。
PERSISTENCE で永続化しない?
Localstack Pro版のみかと思います。
このあたりで議論されているようです。
そのため、コミュニティ版で実施する際は永続化されないため、都度 cdklocal bootstrap
から開始することになります。
最後に
以上です。
たのしいCDKライフを!
LGTMいただけると、励みになります。
よろしくお願いします。