2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
リンクをコピー
記事をブックマーク
吉川幸弘氏:それでは、「3年目のCDKを振り返って」を始めます。まず、前回のプレカンファレンスの資料について軽く紹介しておきます。
前回は、CloudFormationにおけるクラウドウォッチやRUMの問題を、CDKで解決するストーリーで登壇しました。RUMのL2 Constructを作成して、チーム内で共有して、RUMの導入速度を改善するという内容でした。現在そのL2 Constructは、awsのリポジトリにRFCとして提出して、レビューをしてもらっている途中です。
前回の資料が少し踏み込んだ内容だったのと、今回はトップバッターなので、ライトな資料にしました。みなさんのように込み入った話ではなく、当たり前な内容ばかりになっていると思いますが、その点をご了承ください。
それではアジェンダです。今までのAWS CDKの運用について話して、最後に前回のプレカンファレンスでいただいた質問について軽く回答していこうと思います。
申し遅れました、私、吉川幸弘と申します。Twitterなどでは「ゆっきー」と呼ばれています。大阪のスタートアップのエンジニアで、ふだんはお客さまのAWS導入のサポート、自社プロダクトの開発、および営業を担当しています。
好きなテクノロジーは静的型付け言語と、Infrastructure as Codeで、特に両点を備えているAWS CDKが大好きです。「@WinterYukky」というIDでTwitterもしているので、よければフォローをお願いします。
吉川:それではアジェンダの1点目、私が初学者にCDKをおすすめする理由について。私がCDKを始めた時の状況について共有します。
当時の私はAWSの利用経験がなく、TypeScriptとGCP、Google Cloud PlatformのGKEが少々できるレベルのスキルセットでした。その時に、データウェアハウスのデータを活用したBIツールを作成するプロジェクトに協力することになりました。
約3年前の話なので、少々(スライドの)雰囲気を変えます。データウェアハウスのデータを活用したBIツールの作成についてです。
当時のチームについて紹介しておきます。そのプロジェクトには、データウェアハウスを管理するチームでBIツールを作成したいという要望がありましたが、そこにはデータウェアハウスの管理人しかおらず、アプリケーションを開発できるメンバーがいないということで、私に協力要請がきました。
その時のデータウェアハウスの管理者Aさんは、唯一この3名の中でAWSを触ったことがありました。ちなみに、AさんはそのデータウェアハウスのデータをバックアップするS3コンソールを唯一触ったことがあるということで、彼にAWSのコンソールをお任せしました。残った管理者BさんにはそのままETLの処理を頼み、私がアプリケーションを開発するというチーム構成で進みました。
実際にPoCタスクをいきなり始めたのですが、こちらに関しては問題なく、AさんがAWS環境を構築し、BさんがETLを構築し、最後に私がアプリケーションを開発することで、PoCタスクをすぐに完了させることができました。AWSのすばらしいところだと思います。
1ヶ月でPoC開発を完了したのですが、それも束の間、すぐプロト版を開発することになりになり、その時に今の本番環境と検証環境に加え、もう1個、追加の検証環境が必要だという話になり、そこで検証環境の追加のタスクができました。
環境追加タスクに対応しようとした時に、Aさんはデータウェアハウスのメンテナンスタスクに取り掛かっており、対応できないという状況になりました。Bさんも当然メンテナンスのタスクがあり、またAWSを触ったことがなかったので、そのままメンテナンスのタスクをしてもらい、私がAWSの検証環境追加タスクを行うことになりました。
ですがAさんも初心者だったため、マネジメントコンソールをIaCでは作成していませんでした。また、タグやネーミングルールなども一切なく、無邪気に作成していたため、今どのような状況になっているかが判断できませんでした。そんな中でもさまざまなリソースの情報を参照して、なんとか、なんとか! 追加環境を作成することに成功しました。
そういったところを経て複製はできたのですが、あとから環境の複製を作る難しさをいたく痛感しました。そこで、IaCの導入を決定しました。
吉川:最初はCloudFormationを検討していたのですが、少々ハードルが高かった記憶があります。自身の能力不足もありましたが、プロト開発までにCloudFormationを学べばいいというスタンスで考えていたところ、他のメンバーの学習意欲が若干低いという問題があり、これらの問題を解決しないと、実際の運用時に大きな問題が発生すると判断したため、先にこれらを解決する必要があると思いました。そんな時にCDKを知り、採用することにしました。
CDKを採用したポイントの1点目は、ドキュメントが初心者に優しいことです。先ほどもAPIリファレンスの話を吉田真吾さんがされていましたが、CloudFormationのドキュメントと比較していこうと思います。
これがCloudFormationのドキュメントです。CloudFormationのドキュメントは、プロパティごとに網羅的な説明がある反面、AWSのサービス知識が前提にあることや、このように例が長いため、初学者がいきなり取り掛かろうとしても壁になりやすいという問題がありました。
それに対してAPIリファレンスは、何に対してといったところが簡潔に説明されており、CDK自体がサービス知識を前提としない設計になっているため、組み合わせやすいサンプルコードが手に入りました。
実際に量も多く、このように大量に情報が提供されているため、初心者でも迷わずに進むことができます。
吉川:次に、静的型チェックが効くこと。これが私の一番のお気に入りですが、例えばこちら、画面右側にCloudFormationのテンプレなどを記述しています。この中にはあえて誤りをいくつか含めていますが、みなさんはすぐに見つけられたでしょうか。
それでは、誤りについて説明していきます。まずこちらですね。runtimeにnodejs14という値が設定されていますが、実際には許容されない値で、正しくはnodejs14.xという値を設定する必要があります。
次にこちら、Handlerにindex.handlerを設定しているように見えます。しかし、この場合は誤字が入っており、hanblerという値になっています。こちらもなかなか見抜くことができません。
次にMemorySizeです。128MBの指定になっていますが、CloudFormationでは128といったナンバー型の値を指定する必要があります。
最後に、こちらです。roleにlambda-roleという、おそらく名前が設定されていますが、このroleにはarnを設定する必要があります。これらを見抜くことは難しいです。
みなさん、すべての間違いを見つけられましたか。CDKのL1 Constructになるだけで、この問題の一部が解消されます。L1 Constructとは、先ほど亀田さん(※亀田治伸氏)が説明されていましたが、CloudFormationリソース仕様からCDKのリポジトリで自動生成された型になっています。
吉川:それでは、L1 Constructの場合を見ていきましょう。先ほどのruntimeのnodejsですが、こちらはstring型になっているため、残念ながらL1 Constructでこの問題を検出することはできません。その代わり、TypeScriptの型チェックにおいて存在しないプロパティ名は防ぐことができます。同様に、合わないデータ型、誤ったデータ型も事前に防ぐことができます。roleは、残念ながらL1 Constructでは防ぐことができません。
L1 ConstructからL2 Constructになることによって、この問題が解決します。なお、L2 Constructとは、L1 Constructを拡張した高度なモジュールになっています。
では見ていきましょう。先ほどnodejs14は防ぐことができませんでしたが、L2 Constructの場合、runtimeがenum型になっているため、enumに定義されていない値以外を防ぐことができます。また、先ほどと同様、存在しないプロパティ名や合わないデータ型も、当然防ぐことができます。
最後に、こちらが大きなポイントですが、iamのroleのL2 Constructのインターフェイスが、roleの指定プロパティの型になっています。こうなっていることにより、指定されたインターフェイス以外の値が代入されることを防げ、名前なのかARNなのかを開発者が意識しなくていいようになっています。これらの型が、初心者の初歩的なミスから守ってくれるので、とても助かりました。
最後に、簡単な説明ですが、エディタのサポートがあることも大きなポイントだと思っています。
画面の右側に、私が実際に開発している動画を入れています。マウスホバーによる情報の取得や型定義など、ふだん使い慣れているエディタの機能のサポートを受けることにより、初心者でも簡単にCDKの開発ができます。これらが開発体験がよいと言われる理由の一部だと、私は思っています。
このようにさまざまなサポートを受けられるので、初心者もIaCに入門しやすい。これが私が初学者にCDKをおすすめする理由です。
(次回へつづく)
関連タグ:
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2024.11.29
「明日までにお願いできますか?」ちょっとカチンとくる一言 頭がいい人に見える上品な言い方に変えるコツ
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.04
いつも遅刻や自慢話…自分勝手な人にイラっとした時の切り返し 不平等な関係を打開する「相手の期待」を裏切る技
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.03
職場の同僚にイライラ…ストレスを最小限に抑える方法 臨床心理士が語る、「いい人でいなきゃ」と自分を追い込むタイプへの処方箋
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
2024.12.05
「今日こそやろう」と決めたのに…自己嫌悪でイライラする日々を変えるには
PR | 2024.12.04
攻撃者はVPNを狙っている ゼロトラストならランサムウェア攻撃を防げる理由と仕組み