Upgrade to Pro — share decks privately, control downloads, hide ads and more …

よさそう! AWS CDK

Takahiro Hirata
September 11, 2020
47

よさそう! AWS CDK

AWS CDKについての説明。
昔の作成した資料です。

Takahiro Hirata

September 11, 2020
Tweet

Transcript

  1. アジェンダ 1. CDKの前に - DevOpsとIaC - AWSのAPI 2. AWS CDKの説明

    - CDKとは - CDKにまつわる概念 3. 実装 - 準備 - コード例 - テスティング - 頻出コマンド 4. 学習情報
  2. AWS API AWS APIはざっくり分けて 2種類ある。 リソース操作: Cloud Formation / CDK

    タスク実行: AWS CLIやSDK(boto3, etc) CLI, SDK https://tomomano.gitlab.io/intro-aws/
  3. AWS Cloud Development Kit (AWS CDK) とは Python, TS, JS,

    Java, C#でCloud Formationを生成するやつ。 Cloud Formationを直接書くよりかなり少ない行数で記述できる。 • ロジック(条件分岐や繰り返しなど)で定義 • オブジェクト指向を適用 • 高レベルな抽象化を定義して共有 • プロジェクトを論理的なモジュールに整理 • ライブラリとして再利用 • テスティングできる • レビューできる • IDEのコード補完
  4. CDKにまつわる概念 apps - Python, TS, JS, Java, C#で書かれたアプリ。 stacks -

    constructsを含む構造。CFnにおけるスタックと同じ。 constructs - 具体的なAWSリソース。constructsを含む事ができる。 app defines stacks. stacks contain constructs. constructs contains constructs. その他いろいろな概念があります。
  5. 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)
  6. 準備 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アプリを初めての環境(アカウント/リージョン)にデプロイするときに実 行する。
  7. 今回デプロイするもの 参考: Hello, CDK! :: AWS CDK Intro Workshop (https://cdkworkshop.com/20-typescript/30-hello-cdk.html)

    APIGatewayでリクエストを受けて、Lambdaで処理。リクエストのパスを返す。
  8. テスティング # 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) こんな感じで書く
  9. 頻出コマンド % 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 # デプロイ済みのスタックを削除
  10. 学習ロードマップ 上から順に読めば理解しやすいかと 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): 実装例がのっ ている
  11. 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)