AWS CDK Workshopを社内で行なった所感
Agaroot IT Partners(AITP)のtomoです。
弊社内にて、今年4~6月に隔週のペースでAWS CDK Workshopを行いました。
https://catalog.us-east-1.prod.workshops.aws/workshops/10141411-0192-4021-afa8-2436f3c66bd8/en-US
今回はその経験をもとに上記ワークショップを行って良かった点や実施してみる際のアドバイスなどをお伝えできればと思います。
この記事はこのような方におすすめ
- CDKを学習してみたい方
- 社内にCDKを普及させたい方
要約
- CDKをサーバレスアプリを作る流れを一通りつかめます
- 一部エラーにはまるところがあるので、その点を本記事でチェックしてください
そもそもAWS CDK Workshopとは
AWS CDK Workshopとは、AWSが公開しているCDK学習を目的としたハンズオン学習テキストです。
より具体的には、API GatewayやDynamoDBなどを用いたREST APIの構築を通して、インストール~実装~デプロイまでを一通り体験、概要を学ぶことができる資料になっています。
TypeScript/Python/Goで同じ内容を体験できるので、よりご自身やチームに馴染みやすい言語で学ぶことができます。
なお、現在の正式名称は”AWS CDK Immersion Day Workshop”らしいのですが、本記事では私たちが学習した際の名称に従って”AWS CDK Workshop”(あるいは単に「ワークショップ」)と呼称します(後述する 補足 > 注意事項 もご参照ください)。
補足
弊社での実施内容
実施内容は以下の通りになります。
- 実施期間: 今年4~6月
- 実施場所: Google Meet
- 実施時間: 合計5時間(各1時間のオンラインワークショップを合計5回実施)
- 参加人数: 5人
- 使用言語: TypeScript
- 学習範囲: 最初のCDKプロジェクトの作成からコンストラクトライブラリの使用まで(アドバンストであるオプション課題を除くすべての課題)
参加者のうち私がCDK経験者としてワークショップの進行や業務上の経験などをもとに補足を行なっていきました。他の参加者はCDK未経験か、少し触ったことのある方です。また、AWSやTypeScriptの習熟度もまちまちで、EC2やS3を少し触ったことがある、TypeScriptは触ったことがないがJavaScriptの基礎ならわかるという方もいました。
注意事項
弊社でのワークショップを実施した後、ワークショップ内容が一部刷新されたようです。なので、例えば私たちが行なった時に起きたエラーも、もしかしたら新しい内容では起こらないなどの差異があるかもしれません。
新しい内容を一瞥した限り大きく変わっているわけではないようですが、念の為ご注意ください。
ちなみに私たちが行なった内容と最新の内容それぞれの参照先は下記のとおりです。
- 私たちが行なった内容: https://web.archive.org/web/20240615085404/https://cdkworkshop.com/
- 当時参照していた公式ページでは日本語表示もできました
- 最新の内容: https://catalog.us-east-1.prod.workshops.aws/workshops/10141411-0192-4021-afa8-2436f3c66bd8/en-US
ワークショップを行なった所感
それでは、所感やアドバイスなどをつらつら書いていきます。
全体の印象
レベル感
入門者でも(本ブログで紹介するエラーさえ突破できれば)問題なくついていけるレベルだと思います。前述の通り弊社内でのワークショップの参加者にはAWSや使用プログラミング言語の入門レベルの方もいましたが、それでも全員最後まで挫折せずに完了できました。
使用プログラミング言語の基礎がわかっていれば学習可能かと思います。TypeScriptを使用する場合には、TypeScriptを学習したことがなくともJavaScriptの書き方がわかれば十分でしょう。
構築するアーキテクチャ(DynamoDBやLambda関数など)の説明も都度簡潔かつ丁寧に行われるので、AWSの各サービスを理解していたり実際に触ったことがある必要もないです。
強いて言えば、REST APIの概要を理解しておくとこれからどのようなサービスを構築していくのか把握しながらワークショップを進められるので、より学習が捗るでしょう。
良かった点
前述したレベル感の話と重複する点も多いですが、AWSなどの学習経験、業務経験がそれほどなくとも、説明が簡潔かつ丁寧なので入門者でもわかりやすい資料になっていると思います。
またサーバレスアーキテクチャを組み合わせてREST APIを構築するという、業務上でもよくある内容を通して学ぶので大変実践的かと思います。弊社内でのワークショップでは行いませんでしたが、オプション課題の中にはテストやCI/CDパイプラインの導入も取り扱われていますので、さらなるスキルアップもできます。
CDKのインストールから実装、デプロイまでの流れを掴み、CDKを利用したプロジェクトに1メンバーとして参画するための基礎内容は掴める、といった感じでしょうか。
各種アドバイス
ワークショップを行うAWSアカウント/リージョンについて
私たちが行なった際には弊社が所有しているサンドボックスアカウントを利用しました。ただ、今思えばAWS営業の方に相談すればもしかしたらクレジットやワークショップ用アカウントなどをご用意いただけたかもしれません。AWS営業の方とコンタクトが取れる方は相談してみてください。
また、参加者が合計5人だったこともあり、各学習者がデプロイするアーキテクチャ同士で識別子などが競合するのを避けるため、各参加者を東京リージョンとアメリカ内の各リージョン(オハイオ/バージニア/北カリフォルニア/オレゴン)に分けてそれぞれ開発を行いました。個人でワークショップ内容を学ぶ分にはご都合の良いリージョンをお選びいただけばいいかと思いますが、グループで1つのAWSアカウントを用いてワークショップを行う場合には参加者ごとにリージョンを分けることをお勧めします。
なお、利用するサービスもAWSの主要サービスばかりなので大抵のリージョンで開発可能でしょうし、実際前述の5リージョンならば最初から最後まで問題なく開発ができました。
エラーの解消
Lambda関数のランタイム指定
最新のワークショップ内容を読んだ限りNode.js 18を指定しているので当面エラーは起きないかと思いますが、私たちが行なった際には選択不可能になって久しいNode.js 14が指定されていて、それによりエラーが生じました。
ワークショップ内容が更新されない限り、最新の内容もいつかランタイムが選べなくなりエラーが生じるようになりますので、適宜ランタイムの指定をRuntime.NODEJS_20_XやRuntime.NODEJS_LATESTなどに指定してみてください。私たちが実施した際には前者を指定してエラーを解消しました。
AWS SDKの使用
ワークショップを進めていくとAWS SDKを用いてLambda関数から別Lambda関数の呼び出しやDynamoDBの操作を行うところまで進みます。
https://catalog.us-east-1.prod.workshops.aws/workshops/10141411-0192-4021-afa8-2436f3c66bd8/en-US/2000-typescript-workshop/400-hit-counter/430-resources
この際にワークショップの内容(私たちが行なった際の内容はもちろん、一瞥した限り最新の内容でも)ではAWS SDKのライブラリをモジュールとして取り込むように設定していないので、Runtime.ImportModuleError: Error: Cannot find module 'aws-sdk'というエラーが生じます(私が実装などを誤っていただけでしたらご容赦ください🙏)。
CDKで作成されたLambda関数内でライブラリを用いる方法は私が思いつく限り以下の3つがありますが、私たちはコードをあまり変えなくて済む1つ目を採用しました。
- Lambda関数にAWS SDKのレイヤーを追加する
- Amazon Lambda Node.js Libraryを用いる
lambda.DockerImageFunctionを用いる
Lambda関数にAWS SDKのレイヤーを追加する手順は以下の通りです。
- AWS SDKのレイヤーを作成する
下記ページが参考になります。
https://repost.aws/ja/knowledge-center/lambda-layer-aws-sdk-latest-version - Lambda関数作成のコードにてレイヤーを追加する
下記レファレンスを参考にレイヤーを追加してみてください。
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html#layers
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.LayerVersion.html
レファレンスを参考に実装していく過程もCDK学習において重要かと思いますので、敢えて本記事ではコードを未記載とさせていただきます🙏別途コードを記載した記事を公開する予定ですので、どうしても実装方法がわからない方はそちらをご参照ください。
追記: 解説記事を公開しました: https://agaroot-itp.com/blog/2407/
まとめ
今回はAWS CDK Workshopを行ってみた所感を振り返ってみました。エラーさえ克服できれば、説明も丁寧で入門者にも最適の内容かと思います。
ワークショップ内容や本記事がCDK学習の参考になれば幸いです👋