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

AWS CDKで Infrastructure as Code インフラの構築・改善をもっと早く!

Kato Ryo
January 25, 2021

AWS CDKで Infrastructure as Code インフラの構築・改善をもっと早く!

July Tech Festa 2021 Winter 推しテク総選挙

Kato Ryo

January 25, 2021
Tweet

More Decks by Kato Ryo

Other Decks in Technology

Transcript

  1. 自己紹介 • ロール ◦ オンプレインフラ → AWSインフラ → バックエンドエンジニア •

    業務形態 ◦ 受託開発/コンサルティング • プログラミング言語 ◦ TypeScript(Node.js)/Python/Go • AWS ◦ API Gateway/Lambda/DynamoDB (Severless) ◦ ALB/ECS/RDS (Container) • フェイズ ◦ 設計〜初期開発(PoC) 加藤 諒 バックエンドエンジニア クラスメソッド株式会社
  2. User’s Application JSii ランタイムアーキテクチャ Operating System JVM/.NET/... Host jsii Runtime

    Generated Bindings node (Child Process) STDIN STDOUT @jsii/runtime @jsii/kernel LibA LibB . JSON
  3. TypeScriptのテンプレートの生成 cdk init app --language typescript TypeScriptのテンプレートの生成(サンプルアプリ付) cdk init sample-app

    --language typescript TypeScriptのライブラリテンプレートの生成 cdk init lib --language typescript CDK CLIでテンプレート生成
  4. CDK CLIは ~/.aws/credentials と ~/.aws/config を参照する 1. --profileを指定した場合 パラメータregionの指定も必須 2.

    環境変数 環境変数AWS_DEFAULT_REGIONのの指定も必須 3. デフォルトプロファイル パラメータregionの指定も必須 CDK CLIが使用する認証情報
  5. AWS CDK Constructs • App ◦ CDKの全体を表す ◦ 構成ツリーのルート •

    Stack ◦ デプロイのスコープ ◦ CFnのStackと同じ • Resouce ◦ 1つまたは複数のAWSリソース ◦ 再利用・共有が可能
  6. Constructの パラメータ • scope: Construct ◦ 親Construct ◦ thisで渡すのが一般的 •

    id: string ◦ scope内で一意なID ◦ 物理名の一部に使われる • props: XXX ◦ 各Construct毎に固有
  7. Environments # cdk synth UndefinedEnvStack Cannot retrieve value from context

    provider vpc-provider since account/region are not specified at the stack level. Either configure "env" with explicit account and region when you define your stack, or use the environment variables "CDK_DEFAULT_ACCOUNT" and "CDK_DEFAULT_REGION" to inherit environment information from the CLI (not recommended for production stacks)
  8. • 型が有る
 ◦ これ文字列?数値?真偽値?で悩まなく良い
 • バージョンやランタイム表記に悩まなくて良い
 ◦ Lambdaのランタイムは node.js12? node.js

    12? node.js12.x?
 • プロパティの階層がわかる
 ◦ エディタの補完を見ればネストがあっても怖くない
 いちいちエディタとリファレンスを
 往復しなくて良い

  9. • TypeScriptで全部書ける
 ◦ インフラ(CDK), バックエンド(Lambda), フロントエンド(React)
 • 単一リポジトリで管理できる
 ◦ Yarn

    workspace機能(eslint, tsconfigなどは個別管理できる)
 ◦ 単一のユースケースに対して複数PR作成しなくて良い
 • 脳のコンテキストスイッチが減る
 ◦ 同じ言語、同じテストライブラリが使える
 TypeScriptでインフラ〜フロントエンドまで
 全部書ける!!

  10. • このツールで何が出来るか? ◦ AWS CDKプロジェクトを継続的に管理できる(deps, tsconfig, jest, eslist, github workflow,

    ...) • CDKを使用して!? ◦ CDKはプログラミング言語を使い何かを生成するアプローチなので CFnテンプレート以外も出力可能 • CDK以外にも色々対応しているがprojen自体がalpha版 ◦ Next.js, React, Java, ... projen - CDKを使用してプロジェクトを管理 - https://github.com/projen/projen
  11. • このツールで何が出来るか? ◦ CDKでK8S Manifest YAMLを生成できる • 少ない記述でManifest YAMLを生成できる ◦

    L1、L2(cdk8s+)が提供されている • @aws-cdk/aws-eksとCDK8sはネイティブに連携可能 ◦ CDKで作ったS3バケット名 → Manifest YAML ◦ Manifest YAML → CDKで作ったEKS Cluster CDK8s - CDKを使用してKubernetesを管理 - https://github.com/awslabs/cdk8s
  12. • このツールで何が出来るか? ◦ CDKでTerraformを生成できる • 様々なクラウドやSaaSを管理できる ◦ AWS, GCP, Azure,

    GitHub, Kubernetes, … • Terraformのメリットを引き継げる ◦ Provision workflow(plan→apply→destory) ◦ Import CDKtf - CDKを使用してTerraformを生成 - https://github.com/hashicorp/terraform-cdk
  13. AWS公式ドキュメント https://docs.aws.amazon.com/cdk/latest/guide/home.html CDK Workshop https://cdkworkshop.com AWS CDK Primer(無償のE-learning) https://www.aws.training/Details/eLearning?id=64510 CDK

    API Reference https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html CDK Patterns https://cdkpatterns.com/ CDK Construct Catalog https://awscdk.io/ AWS Construct Library Design Guidelines https://github.com/aws/aws-cdk/blob/master/DESIGN_GUIDELINES.md cdk.dev https://cdk.dev/