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

よさそう! AWS CDK

Avatar for Takahiro Hirata Takahiro Hirata
September 11, 2020
84

よさそう! AWS CDK

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

Avatar for Takahiro Hirata

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)