Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
よさそう! AWS CDK
Search
Takahiro Hirata
September 11, 2020
0
80
よさそう! AWS CDK
AWS CDKについての説明。
昔の作成した資料です。
Takahiro Hirata
September 11, 2020
Tweet
Share
More Decks by Takahiro Hirata
See All by Takahiro Hirata
GPT-4oをAzureで試してみた!
checche
0
250
Azure Machine Learning 使ってみた
checche
0
18
LiveCoding入門
checche
0
260
PKIの説明など
checche
0
34
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
521
39k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
The Language of Interfaces
destraynor
154
24k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Typedesign – Prime Four
hannesfritz
40
2.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Cost Of JavaScript in 2023
addyosmani
46
7k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Being A Developer After 40
akosma
87
590k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Agile that works and the tools we love
rasmusluckow
328
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Transcript
よさそう! AWS CDK【入門編】 平田 恭嘉
こんな人におすすめ AWSが大好きな人 馴染みのある言語で構成を記述したい CloudFormation/Terraformがつらい クラウド研修や勉強会で手作業デプロイし、疲弊した。
アジェンダ 1. CDKの前に - DevOpsとIaC - AWSのAPI 2. AWS CDKの説明
- CDKとは - CDKにまつわる概念 3. 実装 - 準備 - コード例 - テスティング - 頻出コマンド 4. 学習情報
1. CDKの前に DevOpsとIaC AWSのAPI
DevOpsとIaC DevOps: 開発(Development)と運用(Operations)を協調させ、サービスを迅速にユーザーへ届ける 取り組みとそのパッション。 有名なスライド (https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr/76) Infrastructure as Code(IaC): DevOpsのプラクティスの1つ。インフラをコードで管理すること。作業のレシピ化。
デプロイを自動化して、CDを実現する。手作業をなくすことで作業時間やヒューマンエラー減 らす。インフラ構成を資産化する。属人化を防ぐ。など。 ex)Dockerfile, Ansible, 和菓子職人 自動生産ライン
AWS API AWS APIはざっくり分けて 2種類ある。 リソース操作: Cloud Formation / CDK
タスク実行: AWS CLIやSDK(boto3, etc) CLI, SDK https://tomomano.gitlab.io/intro-aws/
2. AWS CDKの 説明 CDKとは CDKにまつわる概念
AWS Cloud Development Kit (AWS CDK) とは Python, TS, JS,
Java, C#でCloud Formationを生成するやつ。 Cloud Formationを直接書くよりかなり少ない行数で記述できる。 • ロジック(条件分岐や繰り返しなど)で定義 • オブジェクト指向を適用 • 高レベルな抽象化を定義して共有 • プロジェクトを論理的なモジュールに整理 • ライブラリとして再利用 • テスティングできる • レビューできる • IDEのコード補完
コードの減り様 CDK(左)からCFnを生成したもの(右)
CDKにまつわる概念 apps - Python, TS, JS, Java, C#で書かれたアプリ。 stacks -
constructsを含む構造。CFnにおけるスタックと同じ。 constructs - 具体的なAWSリソース。constructsを含む事ができる。 app defines stacks. stacks contain constructs. constructs contains constructs. その他いろいろな概念があります。
CDKにまつわる概念
CDKにまつわる概念(コンストラクト) コンストラクトには3段階の種類がある。 AWS CloudFormation-only / L1: AWSのリソースと対応している。 cfnの仕様から自動生成されるので cfn のサポート状況と一致する。
ex) s3.CfnBucketはS3バケットのL1モジュール Curated / L2: 開発を簡素化するためのモジュール。 L1をカプセル化し、実用的なデフォルトとベストプラク ティスのセキュリティーポリシーを提供する。 ex) s3.Bucket はS3バケットのL2モジュール。 L2はプライマリリソースが必要とするサポートリソースも定義してくれる。一部サービスでは目的に応じて複数の L2モジュールがある。 Patterns / L3 - 複数リソースをまとめて、アーキテクチャ全体を定義する。あるあるパターンを一発で作れ る。いくつかの重要なパラメータを設定するだけ。 ex) aws-ecs-patterns (https://docs.aws.amazon.com/cdk/api/latest/docs/aws-ecs-patterns-readme.html)
3. 実装 準備 コード例 テスティング 頻出コマンド
使用言語について TSで最初に作られたのでTSの例が多い。今回もTSを使う。 TSと他の言語の対応例は以下にある。 https://docs.aws.amazon.com/cdk/latest/guide/multiple_languages.html cdk自体はnodeで動かす。
準備 1. AWS CLIのインストール/設定 2. AWS CDKのインストール 3. cdkプロジェクトの開始 4.
bootstrap % mkdir cdk-benkyo && cd cdk-benkyo % cdk init app --language typescript # aws cliの設定 % aws configure % npm install -g aws-cdk % npm run cdk bootstrap cdk bootstrap: cdkのためのスタック(デプロイ中の一時ファイル保存用のs3など)をデ プロイする。CDKアプリを初めての環境(アカウント/リージョン)にデプロイするときに実 行する。
今回デプロイするもの 参考: Hello, CDK! :: AWS CDK Intro Workshop (https://cdkworkshop.com/20-typescript/30-hello-cdk.html)
APIGatewayでリクエストを受けて、Lambdaで処理。リクエストのパスを返す。
Lambdaの中身 リクエストを受けて、パスを返す。
Stack CDKの中心的な部分。 スタックを作るには、cdk.Stackを 継承したクラスを宣言する。 constructor()の中でコンストラク トのインスタンスをスタックに設定す る。 コンストラクトを作るときも同様。
Stack CDKの中心的な部分。 スタックを作るには、cdk.Stackを 継承したクラスを宣言する。 constructor()の中でコンストラク トのインスタンスをスタックに設定す る。 コンストラクトを作るときも同様。 API Gateway
Lambda Stack
抽象的な説明 スタックのconstructor()の中でコンストラクトのインスタンスを生成する。 スタックではなくコンストラクトのクラスを定義して、コンストラクトの入れ子を作ることもできる。 コンストラクトのインスタンスを生成するとき 3つのパラメータが必要。 scope: コンストラクトがどこに属するか。親となるスタックまたはコンストラクトを記す。 id: CDKアプリ内で使われるID、コンストラクト内で一意である必要がある。 props(optional):
プロパティを定義する。コンストラクトごとに異なるので、リファレンスを読もう。言語ご とに書き方がちょっと違う。 TS/JS: オブジェクト、Python: キーワード引数
デプロイ % npm run cdk deploy
テスティング # cdk initするとすでにインストールされているはず % npm install --save-dev jest @types/jest
@aws-cdk/assert リソースの設定が適切かどうかなどをテストでき る。 @aws-cdk/assert - GitHub (https://github.com/aws/aws-cdk/tree/master/ packages/%40aws-cdk/assert) こんな感じで書く
頻出コマンド % cdk bootstrap # CDKのためのスタックをAWSに登録する(AWSリージョンに対して初回時のみ ) % cdk init
app --language typescript # 基本的にこれで初期化(appは予約されたテンプレート名 ) % npm run watch # tsの変更監視, watchモードでtscを実行 % cdk synth # Cfnの合成(生成)。シンセサイザーのシン thの部分 % cdk deploy # デプロイ % cdk diff # デプロイ済みのスタックとローカルのを比較 % cdk destroy # デプロイ済みのスタックを削除
学習情報 学習ロードマップ 書籍情報
学習ロードマップ 上から順に読めば理解しやすいかと 1. awsの東大講義資料 (https://tomomano.gitlab.io/intro-aws/): クラウドとは?といった話 からサーバーレスアプリのデプロイまで網羅的に書かれている。 2. AWS CDK
Intro Workshop (https://cdkworkshop.com/): ハンズオンで学べる、わかり やすい。バージョンがやや古いが現状問題なく動作する。 3. Developer Guide (https://docs.aws.amazon.com/cdk/latest/guide/home.html): ドキュ メント。ある程度わかってから読むと良いたぶん。 • API Reference (https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html): その名 の通りのAPIリファレンス • aws-cdk-examples (https://github.com/aws-samples/aws-cdk-examples): 実装例がのっ ている
書籍情報 調べた限りでは2冊ある。 実践 AWS CDK みんなのAWS
vs Pulumi Pulumiというツールもある。 細かい仕組みはCDKと異なるが、やろうとしてることは近い。 AWSだけでなくその他のサービスにも対応している。これもよさそう。 PulumiによるPulumiとCDKの違いについての説明 (https://www.pulumi.com/docs/intro/vs/cloud_template_transpilers/) Pulumi: これ1本でビジネスしているので積極的な開発されているはずである。 CDK:
実家が太い。
CDK for Terraform CDKでTerraformを生成することにより AWS CDKでGoogle Cloud Platform(GCP) を構成できるらしい。 -
CDK for Terraform: Enabling Python & TypeScript Support (https://www.hashicorp.com/blog/cdk-for-terr aform-enabling-python-and-typescript-support /) - repository (https://github.com/hashicorp/terraform-cdk)