やっつけ不定記

好きなときに好きなことをちゃっちゃと書いてます

AWS エバンジェリストシリーズ AWSの基礎を学ぼう 特別編 AWS CDK v2 ハンズオン

表記イベントに参戦してみました。
https://awsbasics.connpass.com/event/235164/
CloudFormation(cFn)絡みとのことで興味を持った次第です。
CDKが何者かすら知らずだったのですが、ハンズオンはそんなに困ることなく完走できました。

(1)CDKのざっくり説明

  • Construct Hub
    CDKで使われるライブラリをまとめたサイト
    https://constructs.dev/
  • Infrastructure as Code
    コードでインフラをプロビジョニングする方法。asとCodeの間にaをつけるのは、実は間違い。
  • AWS CDK(AWS Cloud Development Kit)
    CloudFormationのラッパーツール。自分の使い慣れたプログラミング言語からcFnスタックを作って実行させるものと理解したらいいんかな。
    • 今回のハンズオンはJavaScriptとTypeScriptで行う。
    • CDKそのものはTypeScriptで作られている。
    • Cloud9から利用するならいいが、自前で環境を作る場合はNode.JS周りをがんばる必要あり
    • レイヤー1(普段使うのはこっち)とレイヤー2がある
  • Simplified Dependencies
    ライブラリの依存関係がかなり整理された
  • What's next?
    CDKに対応していないAWSサービスがあるので、ドキュメント等を確認すること

[質疑応答]

  • Rustは対応していないのか?
    SDKは力入れるとアナウンスされているが、今のところ対応していない。

(2)イベント告知
CDK Conference Japan
https://jawsug.connpass.com/event/240422/
こんな感じのLTネタを募集しているとのこと。 f:id:chocopurin:20220226161557j:plain

(3)ハンズオン

  • ハンズオン資料
    https://github.com/harunobukameda/AWS-CDK-v2
  • ざっくりシナリオ
    1. 環境構築(Cloud9)
    2. CDK-JavaScriptからS3バケットを作って消す
    3. CDK-TypeScriptからSQSキューを作る
    4. CDK-TypeScriptからLambda関数を作る
    5. ホットスワップ機能を使って作成したLambda関数を更新デプロイする
    6. CDK-TypeScriptからAPI Gatewayを作成して、先のLambda関数をブラウザから閲覧できるようにする
    7. 環境一式の削除

[ハンズオン時の質疑応答やコメント]

  • Cloud9から利用する場合はt3.small以上のインスタンスが必要
  • 環境構築時のサブネットはパブリック-サブネットになるようにする
  • L2レイヤ(抽象化)の作業に該当
  • CDKはJestを内包している
    クラスメソッドさんが詳しいBlog記事を公開している
    https://dev.classmethod.jp/articles/aws-cdk-testing/
  • cdk bootstrapコマンドは、プログラミング言語ごとに1回だけ実行が必要
  • CFnスタックのクォータは、サポートに言ったら増やしてもらえる
  • cdk init の引数違いで色々とサンプルができあがるのではないか?
    →Yes
  • 本日時点では、英語版ハンズオンは手順が追い付いてなく、CDK V2とV1がごっちゃになっている
  • どうしても消せないcFnスタックを消すにはどうすればよいか?
    →サポートに言ったら消してもらえる。
  • デプロイ時の細かいログはCloudFormationのコンソールに出る
  • ホットスワップとは何か?
    →cfn経由なしにデプロイすること。通常のcdkコマンドのようにcFnを経由しない分高速。
     ホットスワップを多用するとcFnスタックの定義とずれる可能性がある。
     特に本番環境では使わない方がよい
    →開発中にちょこちょこいじるときはHotSwap、落ち着いたら通常Deployという使い方。

   ※要はホットデプロイみたいなもんと理解したらよさそう

  • Lambda関数名は指定できないのでしょうか?
    →指定できる
  • cFnでできないことはCDKでもできない

f:id:chocopurin:20220226161601j:plain

f:id:chocopurin:20220226161604j:plain

f:id:chocopurin:20220226161608j:plain

f:id:chocopurin:20220226161613j:plain

(4)JamstackのLT Stripeという決済プラットフォームのSDKとCDKの事例。
Secret Managerを組み合わせるといい感じにできるとのこと。