「AWS CDK Conference Japan 2024」に参加してきました

TS何も分からんマンが作ったJAWSDAYS2024ティザーサイト徹底解剖

JAWSDAYS2024のサイト

  • Next/chakra-ui
  • レスポンシブ
  • セッションお気に入り機能
  • サーバーレス
  • cdk
    • L2 Constructの1Stack
  • デプロイのパイプラインを作っておく
    • GitHub Actionsで
    • configure-aws-credentials

CDK初心者が開発で遭遇したトラブルと解決法

  • @Figure_Skate_ITさん

CDKのトラブル

  • クラス構成が人によって違う
  • 設定情報をjsonで外出しするとコメント書けない
  • construstを継承したクラスを新しく作ると論理IDが変わってリソース再作成されてしまう

初心者がおさえておきたいAWS CDKのベストプラクティス 2024年版

CDKプラクティス

  • ドキュメントを読む
    • 実践的なこと書いてある
    • APIリファレンスのoverviewにサンプルがある
  • 仕組みを理解する
    • CloudFormationのテンプレートを作ってリソースを作ってる
  • Tenetsに共感する
    • どういう思想で作られてるか知ってそれにあった使い方をする
  • 困った時の相談先
    • 契約してればAWSのサポートにきける
    • AWS re:Post
  • git管理してリポジトリに全部保存する
    • プライベートリポジトリにアカウントIDとか保存する
      • 違う環境に間違えてデプロイしちゃったといったことを防ぐ
    • cdk.context.jsonもコミット
  • リポジトリとチームの単位をあわせる
    • 1CDK/1アプリ/1チーム
  • IDEを使う
    • VSCodeでTypeScriptは設定不要で便利
  • 生成AIを使う
  • リソースの置き換え注意
    • cdk diffでチェック
    • リソースが再作成されないように
    • 論理IDが変わらないように
  • ハイレベルなコンストラクトを使う
    • 全部を設定に書かない
    • どこがデフォルトと変わったか分からなくなる
    • 必要なものだけ書く
    • grantなど便利なメソッドを使う
  • スタックは必要になるまでわけない
    • スタック間参照は大変
    • 分けて何が嬉しいかちゃんと説明できないなら分けない
  • ベタ書きから始める
    • その方がテストしやすい
    • 環境ごとに変更必要になったら考える
  • パラメーターは最上位から注入
    • AppレベルからStack/Constructに渡していく
  • スナップショットテスト
    • 定型文出書ける
  • ConstructIDにこだわる
    • リソース名ではなくConstructIDにこだわる
  • コードと環境の一貫性
    • cdk deploy --all

脱ぽちぽちを目指してCDKでインフラ構築してみた

  • @kotukotuganbadさん

CDK使ってみて

  • コンストラク
    • ec2作るならec2のコンストラクト作ってといった感じ
    • 1コンストラクト1リソース
    • L1/L2/L3
      • L1は自分でいろいろ書ける
      • L3はパターンが用意されてる
  • CloudFormationのスタックロールバック
    • CDKデプロイをctl + cで終了してはいけない
    • マネージメントコントロールから手動で操作してはいけない
    • おかしくなってしまったらCLIから強制削除できる

LocalstackとcdklocalでつくるCDK開発環境入門

  • @h_kusavさん

LocalStack

  • LocalStack
    • docker上でAWSのリソースをエミュレートできる
  • cdkLocal
    • LocalStackに対してcdkを実行できる
  • LocalStackのリソースの状況をUIで見られる
  • 無料版は永続化できなくてサービスも限られてる

CDKアプリとしてのAmplify Gen2 - @aws-amplify/backendのアーキテクチャにみるCDKベストプラクティス -

  • @fossamagnaさん

Amplify Gen2

  • Amplify gen2
    • gen2になってcdkベースになった
    • tsでバックエンド定義
      • 宣言的に書ける
    • ファイルベースの規約
    • 開発者ごとにsandbox環境をデプロイできる
  • バックエンドのデプロイ
    • gitのブランチ指定してampxコマンドでデプロイ
    • 内部的にはcdkのコマンドが叩かれてる

AWS CDKを選定しなかった理由”から見るCDKの現在地

  • @_watanyさん

採用しなかった理由

  • CloudFormationを使った
    • 無料
    • AWSサポート使える
    • cdk使えるメンバーがいなかった
    • 引き継ぐことを前提としていた
    • インフラつくる人とアプリつくる人が別
      • cdkが入ると使う言語が増えてしまうのでyamlの方があってた
    • cdkはコーディング規約が難しい
      • ディレクトリ構成
      • 言語固有の書き方をどれだけ使うか

AWS CDK コンストラクトの分割戦略:レイヤーリスペクトパターンの実践

  • @WinterYukkyさん

CDKコードの分割

  • コンストラクトを分ける
    • リソースごとに分ける
    • backendやマイクロサービスごとに分ける
  • 特定サービス用コンストラク
    • 再利用性は考えてない
    • 具象性を求められる
    • 設計指針がないと肥大化しやすい
    • なのでこれを量産するのはイマイチ
  • レベル指向プラクティス
    • L2/L3コンストラクトを定義して分割する
    • 汎用的なコンストラクトになるので再利用可
    • L2は特定リソースにフォーカスするためのもの
    • L3は複数リソース組み合わせたアーキテクチャーパターンを簡単に利用するためのもの

App Staging Synthesizerに入門する

  • @skrirdevさん

App Staging Synthesizer

  • App Staging Synthesizer
    • 既存のbootstrapの仕組みを置き換える
    • bootstrapの体験をよくする
  • デフォルトのsynthesizerはセキュリティへの準拠など課題がある
    • それに変わって使うのがApp Staging Synthesizer

今こそ始める、CDKコンストラクトライブラリ開発 ― 入門から実践まで

  • @tmokmssさん

コンストラクトライブラリ

  • CDKコンストラクトライブラリ開発の始め方
    • Projenを使って開発する
    • npmのライブラリ
  • Construct Hub
    • コンストラクトライブラリが集まったサービス
    • jsiiに準拠しないといけない
      • 普段のTypeScriptの感覚でないところも
      • 他の言語から使われることがあるため
  • projen使ってるとsemverとconventional commitを採用することになる
    • コミットメッセージのルールでバージョンの上がり方を制御できる
  • CloudFormationカスタムリソース
    • CREATE: リソース新規作成時に呼ばれる
    • UPDATE: プロパティ変更があった時に呼ばれる
    • DELETE: 削除化物理リソースIDが変更された時に呼ばれる
  • integ-runner

大規模ドラレコデータ収集・機械学習基盤を支えるAWS CDK 〜導入・運用事例紹介〜

  • @PEmugi2さん

CDKを組み込んだチーム開発

  • ドラレコとセンサーから取得した情報と地図情報があってるか比較するシステム
  • 2020/7からcdk導入
  • 本番のスタック数は60
  • QA環境を量産してる
  • Makefileでビルドデプロイを定義するようにしている
    • cdkの難しいコマンドを隠蔽できる

AWS CDKにおける「再利用性」を考える

  • @365_step_techさん

CDKの再利用性

  • CDKでの再利用はConstructがキー
  • スタックのpropsをConstructにそのまま渡さない
    • スタックに依存してしまう
    • 不要なプロパティ多くなりがち
  • propsのプロパティはreadonlyに
  • propsのバリデーションはtokenに注意する
    • 後で解決される値の仮の値のこと
    • なのでバリデーションできない
    • number/stringは Token.isUnresolvoed() でチェック
  • リソースプロパティはI始まりの型にする
    • cdkではI始まりは読み込み専用リソースのためのもの
  • Construct単位のユニットテスト
    • 全部書くと多いので基本はスタックのテストでOK