2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
k.goto氏:次に、CDKの便利機能を1個ずつ紹介していきます。まずはL2、L3コンストラクト。まずコンストラクトが何かというと、CDKの独自機能や独自概念という感じです。ソースコード上でいうと、CDKの独自クラスによるAWSリソース定義の抽象化をしてくれるものです。
L1、L2、L3というようにレイヤーが分かれていて、数字が大きくなる、上にいくほど抽象度の高いものとなっています。L3だと複数のリソースを含む構成パターン。例えば「ALBとFargateと、なんとかとなんとか」みたいなものを一気にバッと作ってくれるみたいな、ちょっと抽象度の高いものがL3。
真ん中のL2コンストラクト。これはCDKをやる上で一番使うんじゃないかなと思うんですが、便利なデフォルト値とか、便利メソッドとかを単一のAWSリソースに持たせてくれているものになります。
CloudFormationを使ったことがある方もいると思うんですが、一番下のL1コンストラクトというのは、CloudFormationのプロパティ設定と同じ感じで、CloudFormationで指定が必須なものは全部明示的に指定する必要がある。なので抽象度が一番低いものとなっています。
ここでいうL2、L3コンストラクトの良いところとしては、ベストプラクティスに基づいたパラメーターをあらかじめ指定してくれていること。必要最低限のパラメーターのみの指定でリソース定義が可能だったり、いい感じにIAM権限を付与してくれるgrantメソッドとかがあるので、頭を使う時間や手間が削減されるというメリットがあります。
AWS Black Beltとかにももっと細かい、良い説明があるので、良かったらご覧ください。
どんなものがあるかという例を挙げていきます。(スライドを示して)例えばVPCの設定。これは例えばVPCとサブネット、ルートテーブルとNATゲートウェイ、インターネットゲートみたいな感じで、CloudFormationで作ると100行ぐらいいったりするんですが、CDKだとこんな感じにサラッと定義できます。
いい感じにIAM権限を付与してくれるgrantメソッド。これもまさにコード中にL2コンストラクトを使っているんですが、上にnew Bucket、S3バケットを作る。2個目にNodejsFunctionというものを呼んでいるんですが、これはLambdaですね。Node.jsで書かれたLambda。
一番下の枠で囲ったところがBucket.grantReadで、Lambdaを入れる。S3バケットに対するいい感じの読み取り権限をLambdaに与える。例えばListBucketとかGetObjectとか、そういったいい感じのものをLambdaに付与してくれるということを1行で行うことができます。
次の例が、CDKレイヤーでLambdaのTypeScriptのビルド、トランスパイルをしてくれるNodejsFunction。ふだんTypeScriptはJavaScriptに変換、トランスパイルというんですが、変換をして、そのJavaScriptファイルでデプロイしたり、動かしたりします。しかし、この場合はTypeScriptのファイルを指定するだけで、内部でいい感じにビルド、デプロイしてくれるというような、使い勝手の良いコンストラクトとなっています。
次がCDKレイヤーでDockerビルドとECRプッシュも行ってくれるものです。DockerのビルドとかECRプッシュはIaCの管理外で、例えばジョブでLinuxコマンドを直打ちとか、Shellを叩いたりすることが多いと思います。こういったDockerビルドやECRプッシュも全部含めてCDKレイヤーで行うことができる便利なコンストラクトが、DockerImageAssetとECRDeployment。
(スライドを示して)上のソースコードでいうと、DockerImageAssetというのは、ディレクトリのDockerファイルを読み込んでいる。それをビルドして、次のECRデプロイメントで特定のECRにタグ付きでプッシュするということがCDK上でできます。
ここまでがコンストラクトのL1、L2、L3のAWSが提供してくれているコンストラクトの話だったんですが、コンストラクトというのはAWS提供のものだけでなくて、自作定義、自作のクラスを作ることが可能です。
スタックというのはCloudFormationとかCDKの1個のデプロイの粒度みたいな、グルーピングみたいな単位ですが、リソース以上スタック未満の自由な粒度で、AWSリソースとか、L1、L2、L3コンストラクトを自分でモジュール化するということで、コンストラクトごとにリソースをまとめて、いい感じに可読性・再利用性がアップします。
(スライドを示して)ここで挙げているソースコードは、スタッククラスの中でSSMConstructとAppRunnerConstructという自分の作ったコンストラクトを2つ呼ぶというもので、スタックはすごく可読性が良い。読みやすいんですよね。
それらがどんなものなのかというと、別ファイルの別クラスで定義します。
左側がSSMConstruct。これはextends Constructと定義します。SSMに関するもの、SSMパラメーターとか、そのIAMロールとかをクラスに突っ込む。一方で、AppRunnerに関するものは右側のAppRunnerクラスに突っ込むため、関係があるもの同士でまとめられるので、いい感じに使うことができます。これが自作コンストラクトでした。
次が組み込みバリデーション。CDKは内部でCloudFormationが走っていてCloudFormationでデプロイされます。CloudFormationではデプロイ中にエラーになるようなパラーメーター指定があって、「このパラメーターとこのパラメーターを組み合わせるともう絶対にエラーになっちゃうよ」というものが、デプロイして初めてエラーになるようなことがあるんです。
ですが、CDKではそれをデプロイ前にエラーにしてくれるというような実装があったりします。つまり、CloudFormationデプロイの前段階なので、CloudFormationデプロイが走りません。ということは、デプロイフェーズまで行ってからエラーになるようなケースも減ります。これによって開発サイクルが短縮される。
CloudFormationの便利な機能の1つとして、デプロイに失敗したら1個前の状態のリソースにロールバックするという機能があったりするんですが、これがたまに失敗するんですね。そういったロールバック失敗のリスクも減ったりします。
また、もともとCDKの内部に組み込まれているバリデーション以外に、自作のバリデーションもスタックとかコンストラクトに組み込むことができます。
このような柔軟なバリデーションを組み合わせることで、より早い段階でのエラー発火により、開発サイクルをより短く・低リスクにすることができるという特徴があります。
次はhotswapデプロイ。これが何かというと、先ほどお話ししたとおり、CDKデプロイというのは、CloudFormationによって内部でデプロイがされます。「Terraform」とかをやっている方は知っているかもしれませんが、CloudFormationのデプロイはあまり速くないんですね。
リソースがちょっと限定されるんですが、LambdaとかECSとかStepFunctionsとかのアプリケーションリソースをhotswapデプロイでデプロイをすると、5倍、10倍の速い時間で可能です。Lambdaとかだと5秒とか10秒かからないぐらいでデプロイできたりするという機能がhotswapデプロイです。
なんでこんなに速いのかというと、CloudFormationを通さずに、アプリケーションのコードだけを反映してくれているから。だから非常に速くデプロイが可能になるという機能です。ただ、CloudFormationを通していないということは、IaCの管理外になってしまう。
いわゆるドリフト差分というか、手動で変更した時と同じような状況が生まれて、予想しない挙動も起きてしまうかもしれないということで、「本番環境では使用しないこと」という注意書きもあります。
ですが、開発環境で使う分には非常に強力なので、素早いデプロイで開発者体験がアップできるという機能がhotswapデプロイでした。
次がwatchモード。ふだんアプリケーション開発をされている方とかは馴染みがあるかもしれませんが、実装の最中、コードを打っている最中にコード・アセットに変更がないかを監視して、変更が検出されたら自動で内部でデプロイしてくれるみたいなモードになります。デフォルトでhotswapデプロイが走るため、組み合わせるとすごく早いデプロイになります。実装を追った自動デプロイで、開発者の体験アップになります。
次がAspectsという機能になります。これはどんなものかというと、特定のスコープ内のすべての構成に操作を適用する方法。この「特定のスコープ」は何かというと、CDKスタック全体であったり、特定のコンストラクト内の全リソースという、自由に選べるようなスコープとなっています。
このAspectsの具体的な使用例の1個目としては、スタック内の全リソースに同じタグを付与する。CDKを使ったことがある人は知っているかもしれませんが、Tags.of().addみたいな、「すべてのリソースに同じタグ付与ができるよ」という便利なメソッドが用意されています。ただ、実はこのメソッドの内部でAspectsが使用されているので、ここで挙げました。
2個目が、コンストラクト内の全リソースに対してDeletionPolicy:RETAIN(を付与する)。これは削除保護の設定ですね。これを付与したり、あとは特定の種類のリソースにコンプライアンス違反する設定がないかもチェックする。「これはよく使われたりする方法かな?」ということで、一貫した複数リソースへの設定の一括適用・検査が可能なものがAspectsという機能になります。
(スライドを示して)「こんな感じで定義するよ」というものを載せています。「スタック内のすべてのS3バケットのバージョニングがオンになっているかを検査する」というのが、この具体例になります。こんな感じでクラスを定義して、ルールを書いてエラーにするみたいな、シンプルなソースコードで全リソースをチェックできます。
この章の最後になって、おまけでカスタムリソース簡単作成というものだけ、詰め込んでおきました。ここでいうカスタムリソースは何かというと、CloudFormationカスタムリソースというものが、CloudFormationの機能として存在します。これが何かというと、CloudFormationに対応していないリソース操作を自分で作って定義して、CloudFormationで実行できるという機能になります。
これは専用のLambdaとかSNSを構築して、SDKなどを使ってその操作を実装するという仕組みです。これが、CDKだとLambdaを自前で作成せず、良い感じにカスタムリソースを作れます。ただしこれはAWS APIをただ呼ぶだけの限定の機能で、複雑な処理が必要なものは変わらず自前でLambdaを作成する必要があります。
カスタムリソースが必要な時はそんなにないと思いますが、ただ単にAWS APIを呼ぶだけの時はCDKで作れるという機能です。
(スライドを示して)このようにいい感じにサクッと定義ができます。これでいうと、Route53のなんとかというアクションを呼ぶだけのものが作れます。
ちょっと早口というか駆け足になってしまいましたが、3番はモリモリな感じで、2つの観点にしたがって紹介しました。
(次回に続く)
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略