Slide 1

Slide 1 text

©Fusic Co., Ltd. 1 LocalstackとcdklocalでつくるCDK開発環境入門 2024.07.06 草場裕史 @h_kusav AWS CDK Conference Japan 2024

Slide 2

Slide 2 text

©Fusic Co., Ltd. 2 草場 裕史 Kusaba Hirofumi ● 年齢: 30 ● 普段: AWSやPHPアプリを触って います ● 趣味: ゲーム / EDM 本日は福岡より参りました。 初登壇です! よろしくお願いします! 自己紹介 はじめに 株式会社Fusic 所属

Slide 3

Slide 3 text

©Fusic Co., Ltd. 3 CONTENTS 目次 1. LocalStackとは? 2. Localstackを使ってみよう 3. cdklocalとは? 4. cdklocalを使ってみよう 5. LocalstackのTips

Slide 4

Slide 4 text

©Fusic Co., Ltd. 4 LocalstackのTips LocalstackとcdklocalでつくるCDK開発環境入門 ● Localstackのリソースブラウザ ● Localstack 無料版と有料版の違い ● 永続化不可に抗う with CDK ○ Localstack起動時にcdklocalを実行する話 ● Localstackの環境変数の SERVICES

Slide 5

Slide 5 text

©Fusic Co., Ltd. 5 LocalStackとは? 1

Slide 6

Slide 6 text

©Fusic Co., Ltd. 6 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門 Localstackとは? docker上でAWSサービスをエミュレート し、開発・テストするためのプ ラットフォーム

Slide 7

Slide 7 text

©Fusic Co., Ltd. 7 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門 例えば、端末上の dockerにAWSリソースをデプロイできる

Slide 8

Slide 8 text

©Fusic Co., Ltd. 8 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門 Localstackのインストール方法は複数ある ● Localstack CLI ● Localstack Desktop ● Docker-Compose ● Docker ● Helm

Slide 9

Slide 9 text

©Fusic Co., Ltd. 9 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門 Localstackのインストール方法は複数ある ● Localstack CLI ○ 公式曰く、もっとも簡単に始められる ● Localstack Desktop ○ GUI操作が可能 ● Docker-Compose ○ 個人的にオススメ ○ Localstackの環境変数を管理しやすい ○ 複数環境を管理しやすい ● Docker ● Helm ○ k8s向け

Slide 10

Slide 10 text

©Fusic Co., Ltd. 10 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門 services: localstack: container_name: localstack image: localstack/localstack:3.5 ports: - 4566:4566 - 4510-4559:4510-4559 environment: - AWS_DEFAULT_REGION=ap-northeast-1 volumes: - ./localstack/volume:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" docker-compose.yml docker-compose.ymlの例

Slide 11

Slide 11 text

©Fusic Co., Ltd. 11 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門 Localstack上のリソース操作は、 AWS CLIや、Localstack社が提供する awslocalコマンドで可能 # エンドポイントを設定すると、Localstackに対してaws-cliを実行できる aws sqs create-queue --queue-name test-queue --endpoint-url http://localhost:4566 # awslocalをインストール pip install awscli-local # awslocalを使えば、エンドポイントの指定が不要 awslocal sqs create-queue --queue-name test-queue

Slide 12

Slide 12 text

©Fusic Co., Ltd. 12 Localstackを使ってみよう 2

Slide 13

Slide 13 text

©Fusic Co., Ltd. 13 Localstackを使ってみよう LocalstackとcdklocalでつくるCDK開発環境入門 services: localstack: container_name: localstack image: localstack/localstack:3.5 ports: - 4566:4566 - 4510-4559:4510-4559 environment: - AWS_DEFAULT_REGION=ap-northeast-1 volumes: - ./localstack/volume:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" docker-compose.yml docker-compose.ymlを書いて、 docker compose up を実行

Slide 14

Slide 14 text

©Fusic Co., Ltd. 14 Localstackを使ってみよう LocalstackとcdklocalでつくるCDK開発環境入門 awslocalコマンドでキューをつくる

Slide 15

Slide 15 text

©Fusic Co., Ltd. 15 Localstackを使ってみよう LocalstackとcdklocalでつくるCDK開発環境入門 awslocalコマンドでキューを確認 こんな感じで Localstackが使えます

Slide 16

Slide 16 text

©Fusic Co., Ltd. 16 cdklocalとは? 3

Slide 17

Slide 17 text

©Fusic Co., Ltd. 17 cdklocalとは? LocalstackとcdklocalでつくるCDK開発環境入門 Localstack社が提供する cdklocalを用いると、 Localstackに対してCDKを実行することができる # インストール npm install -g aws-cdk-local aws-cdk # 実行 cdklocal bootstrap cdklocal deploy

Slide 18

Slide 18 text

©Fusic Co., Ltd. 18 cdklocalとは? LocalstackとcdklocalでつくるCDK開発環境入門 Localstack社が提供する cdklocalを用いると、 Localstackに対してCDKを実行することができる ちなみに、 SAMに対応した samlocal、Terraformに対応した tflocalも ある # インストール npm install -g aws-cdk-local aws-cdk # 実行 cdklocal bootstrap cdklocal deploy

Slide 19

Slide 19 text

©Fusic Co., Ltd. 19 cdklocalを使ってみよう 4

Slide 20

Slide 20 text

©Fusic Co., Ltd. 20 cdklocalを使ってみよう LocalstackとcdklocalでつくるCDK開発環境入門 services: localstack: container_name: localstack image: localstack/localstack:3.5 ports: - 4566:4566 - 4510-4559:4510-4559 environment: - AWS_DEFAULT_REGION=ap-northeast-1 volumes: - ./localstack/volume:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" docker-compose.yml 同様に、docker compose up を実行

Slide 21

Slide 21 text

©Fusic Co., Ltd. 21 cdklocalを使ってみよう LocalstackとcdklocalでつくるCDK開発環境入門 from aws_cdk import ( Duration, Stack, aws_sqs as sqs, aws_s3 as s3, ) from constructs import Construct class CdkLocalTestStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) sqs.Queue( self, "TestQueue1", visibility_timeout=Duration.seconds(300), ) s3.Bucket(self, "TestBucket", bucket_name='test-bucket', ) cdk/stacks/cdk_local_test_stack.py PythonのCDKスタックを準備 ..

Slide 22

Slide 22 text

©Fusic Co., Ltd. 22 cdklocalを使ってみよう LocalstackとcdklocalでつくるCDK開発環境入門 cdklocal bootstrapを実行

Slide 23

Slide 23 text

©Fusic Co., Ltd. 23 cdklocalを使ってみよう LocalstackとcdklocalでつくるCDK開発環境入門 cdklocal deployを実行!

Slide 24

Slide 24 text

©Fusic Co., Ltd. 24 ここまでのまとめ LocalstackとcdklocalでつくるCDK開発環境入門 Localstackを用いて、 docker上にAWS環境をエミュレート Point 01 awslocalコマンドで、 Localstackに対してawscliを実行 Point 02 cdklocalを用いて、 Localstackに対してCDKを実行 Point 03

Slide 25

Slide 25 text

©Fusic Co., Ltd. 25 LocalStackのTips 5

Slide 26

Slide 26 text

©Fusic Co., Ltd. 26 LocalstackのTips LocalstackとcdklocalでつくるCDK開発環境入門 ● Localstackのリソースブラウザ ● Localstack 無料版と有料版の違い ● 永続化不可に抗う with CDK ○ Localstack起動時にcdklocalを実行する話 ● Localstackの環境変数の SERVICES

Slide 27

Slide 27 text

©Fusic Co., Ltd. 27 Localstackのリソースブラウザ Localstackのリソースをビジュアライズ

Slide 28

Slide 28 text

©Fusic Co., Ltd. 28 Localstackのリソースブラウザ LocalstackとcdklocalでつくるCDK開発環境入門 Localstack上のリソースは、 awslocalを用いて各サービスの describeコマンドなどで確認できる。 ただ、コマンド連発はシンドイ ...

Slide 29

Slide 29 text

©Fusic Co., Ltd. 29 Localstackのリソースブラウザ LocalstackとcdklocalでつくるCDK開発環境入門 Localstack上のリソースは、 awslocalを用いて各サービスの describeコマンドなどで確認できる。 ただ、コマンド連発はシンドイ ... => Localstack上のAWSリソースがビジュアライズされる、 リソースブラウザや Localstack Desktopを使おう! リソースブラウザは、 WEBブラウザから Localstackにログインして使える https://app.localstack.cloud/inst/default/resources

Slide 30

Slide 30 text

©Fusic Co., Ltd. 30 Localstackのリソースブラウザ LocalstackとcdklocalでつくるCDK開発環境入門

Slide 31

Slide 31 text

©Fusic Co., Ltd. 31 Localstackのリソースブラウザ LocalstackとcdklocalでつくるCDK開発環境入門 例えば、S3ならS3バケットの 一覧や中身の確認、 作成・削除などができる

Slide 32

Slide 32 text

©Fusic Co., Ltd. 32 Localstack 無料版と有料版の違い

Slide 33

Slide 33 text

©Fusic Co., Ltd. 33 Localstack 無料版と有料版の違い LocalstackとcdklocalでつくるCDK開発環境入門 Localstackには、下記 2種類のdockerイメージがある。 ● Localstack Community ○ 無料版 ● Localstack Pro ○ 各種有料プランに対応 主な違いは、下記の 2点。 ● エミュレートできる AWSサービスの違い ● 作成したAWSリソースの永続化の違い

Slide 34

Slide 34 text

©Fusic Co., Ltd. 34 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門

Slide 35

Slide 35 text

©Fusic Co., Ltd. 35 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門

Slide 36

Slide 36 text

©Fusic Co., Ltd. 36 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門

Slide 37

Slide 37 text

©Fusic Co., Ltd. 37 LocalStackとは? LocalstackとcdklocalでつくるCDK開発環境入門

Slide 38

Slide 38 text

©Fusic Co., Ltd. 38 Localstack 無料版と有料版の違い LocalstackとcdklocalでつくるCDK開発環境入門 「作成した AWSリソースの 永続化の違い」とは ...? 無料版では、 作成したLocalstack上のAWS サービスは 基本的に永続化されない。 つまり、dockerをstopすると、 作成したAWSリソースは なくなってしまう services: localstack: container_name: localstack image: localstack/localstack:3.5 ports: - 4566:4566 - 4510-4559:4510-4559 environment: - AWS_DEFAULT_REGION=ap-northeast-1 - DEBUG=1 - PERSISTENCE=1 volumes: - ./localstack/volume:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" https://docs.localstack.cloud/user-guide/state-management/persistence/

Slide 39

Slide 39 text

©Fusic Co., Ltd. 39 永続化に抗う with CDK

Slide 40

Slide 40 text

©Fusic Co., Ltd. 40 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 永続化できないのであれば、 docker起動後に 毎回 cdk bootstrapから始めることになってしまい、シンドイ ... https://docs.localstack.cloud/references/init-hooks/

Slide 41

Slide 41 text

©Fusic Co., Ltd. 41 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 永続化できないのであれば、 docker起動後に 毎回 cdk bootstrapから始めることになってしまい、シンドイ ... localstack起動時に、 cdkを流せば解決できるのでは? => Localstackのライフサイクルフック を活用 Localstackの起動時・開始時・シャットダウン時等に、任意のシェルス クリプト・ Pythonファイルを実行することができる https://docs.localstack.cloud/references/init-hooks/

Slide 42

Slide 42 text

©Fusic Co., Ltd. 42 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 なぜ永続化不可に抗うのか?

Slide 43

Slide 43 text

©Fusic Co., Ltd. 43 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 なぜ永続化不可に抗うのか? => 有料版の社内稟議を通すまでに時間があったので ... 変に永続化に抗うよりも、永続化するのが楽なので、 普通に有料版を使った方 がいいです。

Slide 44

Slide 44 text

©Fusic Co., Ltd. 44 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 docker-compose.ymlを変更 ● CDK準備のための、 Dockerfileを指定 ● dockerのマウント部分を変更し、 localstack のライフサイクルフックのシェルを設定 ● CDKのディレクトリもマウント する services: localstack: container_name: localstack - image: localstack/localstack:3.5 build: context: ./localstack dockerfile: ./Dockerfile ports: - 4566:4566 - 4510-4559:4510-4559 environment: - AWS_DEFAULT_REGION=ap-northeast-1 - PERSISTENCE=1 volumes: # boot・起動時に、boot.sh, init-aws.sh の実行を指定 # boot - "./localstack/hooks/boot.sh:/etc/localstack/init/boot.d/boot.sh" # ready - "./localstack/hooks/init-aws.sh:/etc/localstack/init/ready.d/init-aws.sh" # CDKのディレクトリをマウント - "./cdk:/opt/code/localstack/cdk" - ./localstack/volume:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" docker-compose.yml

Slide 45

Slide 45 text

©Fusic Co., Ltd. 45 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 docker-compose.ymlを変更 ● CDK準備のための、 Dockerfileを指定 ● dockerのマウント部分を変更し、 localstack のライフサイクルフックのシェルを設定 ○ /etc/localstack/init/boot.d/ ○ /etc/localstack/init/ready.d/ ● CDKのディレクトリもマウント する services: localstack: container_name: localstack - image: localstack/localstack:3.5 build: context: ./localstack dockerfile: ./Dockerfile ports: - 4566:4566 - 4510-4559:4510-4559 environment: - AWS_DEFAULT_REGION=ap-northeast-1 - PERSISTENCE=1 volumes: # boot・起動時に、boot.sh, init-aws.sh の実行を指定 # boot - "./localstack/hooks/boot.sh:/etc/localstack/init/boot.d/boot.sh" # ready - "./localstack/hooks/init-aws.sh:/etc/localstack/init/ready.d/init-aws.sh" # CDKのディレクトリをマウント - "./cdk:/opt/code/localstack/cdk" - ./localstack/volume:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" docker-compose.yml

Slide 46

Slide 46 text

©Fusic Co., Ltd. 46 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 docker-compose.ymlを変更 ● CDK準備のための、 Dockerfileを指定 ● dockerのマウント部分を変更し、 localstack のライフサイクルフックのシェルを設定 ● CDKのディレクトリもマウント する services: localstack: container_name: localstack - image: localstack/localstack:3.5 build: context: ./localstack dockerfile: ./Dockerfile ports: - 4566:4566 - 4510-4559:4510-4559 environment: - AWS_DEFAULT_REGION=ap-northeast-1 - PERSISTENCE=1 volumes: # boot・起動時に、boot.sh, init-aws.sh の実行を指定 # boot - "./localstack/hooks/boot.sh:/etc/localstack/init/boot.d/boot.sh" # ready - "./localstack/hooks/init-aws.sh:/etc/localstack/init/ready.d/init-aws.sh" # CDKのディレクトリをマウント - "./cdk:/opt/code/localstack/cdk" - ./localstack/volume:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" docker-compose.yml

Slide 47

Slide 47 text

©Fusic Co., Ltd. 47 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 Dockerfileでは、 事前にcdkを入れておく FROM localstack/localstack:3.5 # localstack v3.5では、node18とpython3.11が入っている RUN npm install -g aws-cdk aws-cdk-local ENTRYPOINT ["docker-entrypoint.sh"] ./localstack/Dockerfile

Slide 48

Slide 48 text

©Fusic Co., Ltd. 48 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 #!/bin/sh echo "Running localstack boot script" # Python版 CDKのインストール cd /opt/code/localstack/cdk pip install -r requirements.txt ファイルがマウントされる boot 時に、 pip installでpython版CDKを 入れる ./localstack/hooks/boot.sh

Slide 49

Slide 49 text

©Fusic Co., Ltd. 49 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 #!/bin/sh export AWS_REGION=ap-northeast-1 echo "CDK settings..." cd /opt/code/localstack/cdk cdklocal bootstrap echo "CDK bootstrap done!!" cdklocal deploy echo "CDK deploy done!!" # awslocal を起動時に指定することも可能 awslocal sqs create-queue --queue-name test-queue 起動したら、 cdk bootstrapを実行後、デプロイ! これで起動時に cdk deployできる ./localstack/hooks/init-aws.sh

Slide 50

Slide 50 text

©Fusic Co., Ltd. 50 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 余談: 無料版で、 PERSISTENCE=1 とした際に、 DynamoDBだけ永続 化するような謎の挙動をする (Localstack v3.5) volumeに保存される、DynamoDBのstateファイルらしきもの

Slide 51

Slide 51 text

©Fusic Co., Ltd. 51 永続化不可に抗う with CDK LocalstackとcdklocalでつくるCDK開発環境入門 余談に対する考察 : Localstack内部的には dynamodb-localが動い ているので、その影響かも ...?(わかりません ) localstack | 2024-06-16T14:38:32.515 DEBUG --- [et.reactor-1] plux.runtime.manager : loading plugin localstack.aws.provider:dynamodb:default localstack | 2024-06-16T14:38:32.545 DEBUG --- [et.reactor-1] localstack.packages.api : Installation of dynamodb-local skipped (already installed). localstack | 2024-06-16T14:38:32.545 DEBUG --- [et.reactor-1] l.services.dynamodb.server : Starting DynamoDB Local: ['java', '-Xmx256m', '-javaagent:/usr/lib/localstack/dynamodb-local/latest/ddb-local-loader-0.1.jar', '-Djava.library.path=/usr/lib/localstack/dynamodb-local/latest/DynamoDBLocal_lib', '-jar', '/usr/lib/localstack/dynamodb-local/latest/DynamoDBLocal.jar', '-port', '44195', '-dbPath', '/var/lib/localstack/state/dynamodb'] localstack | 2024-06-16T14:38:32.546 DEBUG --- [functhread10] localstack.utils.run : Executing command: ['java', '-Xmx256m', '-javaagent:/usr/lib/localstack/dynamodb-local/latest/ddb-local-loader-0.1.jar', '-Djava.library.path=/usr/lib/localstack/dynamodb-local/latest/DynamoDBLocal_lib', '-jar', '/usr/lib/localstack/dynamodb-local/latest/DynamoDBLocal.jar', '-port', '44195', '-dbPath', '/var/lib/localstack/state/dynamodb']

Slide 52

Slide 52 text

©Fusic Co., Ltd. 52 Localstackの環境変数の SERVICES

Slide 53

Slide 53 text

©Fusic Co., Ltd. 53 Localstackの環境変数の SERVICES LocalstackとcdklocalでつくるCDK開発環境入門 環境変数の SERVICESで、 Localstackで使用するサービスを限定することができる ※無理に指定する必要はない services: localstack: container_name: localstack image: localstack/localstack:3.5 ports: - 4566:4566 - 4510-4559:4510-4559 environment: - AWS_DEFAULT_REGION=ap-northeast-1 - PERSISTENCE=1 - DEBUG=1 - SERVICES=s3,sqs,sts,ssm,cloudformation,iam volumes: - ./localstack/volume:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" docker-compose.yml

Slide 54

Slide 54 text

©Fusic Co., Ltd. 54 Localstackの環境変数の SERVICES LocalstackとcdklocalでつくるCDK開発環境入門 SERVICESを指定して cdklocalを使用する場合 は、 エミュレートするサービス + sts,ssm,cloudformation,iamの指定が 必要なので、気を付けよう! services: localstack: container_name: localstack image: localstack/localstack:3.5 ports: - 4566:4566 - 4510-4559:4510-4559 environment: - AWS_DEFAULT_REGION=ap-northeast-1 - PERSISTENCE=1 - DEBUG=1 - SERVICES=s3,sqs,sts,ssm,cloudformation,iam volumes: - ./localstack/volume:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" docker-compose.yml

Slide 55

Slide 55 text

©Fusic Co., Ltd. 55 まとめ LocalstackとcdklocalでつくるCDK開発環境入門 Localstackで、AWSリソースをエミュレートできる Point 01 cdklocalで、cdkをLocalstackにデプロイできる Point 02 リソースブラウザやライフサイクルフックを活用しよう! Point 03

Slide 56

Slide 56 text

©Fusic Co., Ltd. 56 最後に LocalstackとcdklocalでつくるCDK開発環境入門 最後に、Localstackとcdklocalを触れるデモを用意しています。 気になった方は見てみてください。 https://github.com/h-kusaba-1001/cdklocal-demo

Slide 57

Slide 57 text

©Fusic Co., Ltd. 57 Thank You We are Hiring! https://recruit.fusic.co.jp/ ご清聴いただきありがとうございました