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
82
よさそう! 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
260
Azure Machine Learning 使ってみた
checche
0
24
LiveCoding入門
checche
0
270
PKIの説明など
checche
0
35
Featured
See All Featured
Building an army of robots
kneath
302
45k
GraphQLとの向き合い方2022年版
quramy
44
13k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
BBQ
matthewcrist
86
9.5k
Git: the NoSQL Database
bkeepers
PRO
427
64k
The Invisible Side of Design
smashingmag
299
50k
Agile that works and the tools we love
rasmusluckow
328
21k
Code Review Best Practice
trishagee
66
17k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Bash Introduction
62gerente
610
210k
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)