LoginSignup
2
0

cdklocalを用いてAWS CDKをLocalstackにデプロイする

Last updated at Posted at 2024-05-07

はじめに

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つのスタックにまとめてざっくり用意しました。

local_test/local_test_stack.py
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を用意します。

docker-compose.yml
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 といった感じです。

image.png

つまづきポイント

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いただけると、励みになります。
よろしくお願いします。

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