Slide 1

Slide 1 text

CDKでカスタムランタイムを作成して、 Lambdaをnode.js23+TypeScriptで 動かしてみた 2025.02.21 JAWS-UG CDK支部#19クラスメソッドコラボ会 KDDIアジャイル開発センター 名古屋オフィス 鈴木 正樹

Slide 2

Slide 2 text

1 KDDI Agile Development Center Corporation 自己紹介 ◼ 氏名:鈴木 正樹 ◼ 所属:KDDIアジャイル開発センター(KAG) 名古屋オフィス ◼ 役割:クラウドアーキテクト & バックエンドエンジニア AWS CDKやInfrastructure as Code(IaC)とサーバーレスが大好きなAWS Community Builder。 主にイベント登壇やブログでAWS CDKなどに関する色々なことをアウトプットしています。 好きなサービスはAWS CDKとLambda。主にJAWS-UG CDK支部 & JAWS-UG 名古屋で活動。 ◼ Certification: ◼ AWS Solution Architect Associate(2023) ◼ AWS Community Builder(2023~) ◼ : @makky12(SUZUKI Masaki@クラウドエンジニア) ◼ Blog:https://makky12.hatenablog.com/

Slide 3

Slide 3 text

2 KDDI Agile Development Center Corporation 本日のアジェンダ • きっかけ • CDKでカスタムランタイムを作成する • まとめ & 告知など

Slide 4

Slide 4 text

3 KDDI Agile Development Center Corporation 注意事項 お話しすること • カスタムランタイムの概要 • カスタムランタイムをAWS CDK(以下「CDK」)で作成する方法 • LambdaをTypeScriptで動かす環境をCDKで構築する方法 お話ししないこと(個人ブログで記載します) • カスタムランタイムに関する詳細情報 • LambdaをTypeScriptで動かす際の詳細情報(制限事項、性能比較など) その他 • 発表資料・発言内容は、すべて個人の見解・知見になります(正式情報はAWS公式サイトをご確認ください)

Slide 5

Slide 5 text

4 KDDI Agile Development Center Corporation きっかけ

Slide 6

Slide 6 text

5 KDDI Agile Development Center Corporation Node.jsが、TypeScriptのネイティブ実行に対応 Node.jsがv23.6.0からTypeScriptのネイティブ実行に対応(Experimentalではなくなった) ◦ TypeScriptを直接実行可能に(JavaScriptへのトランスパイルが不要) ◦ 参考: Node.js v23.6.0:TypeScriptサポートが登場 Lambdaでは未サポートのバージョンも「カスタムランタイム」として動作させることが可能 ◦ サポート終了バージョンで実行できるのは確認済み ↓ カスタムランタイムを使えば、LambdaをTypeScriptで動かせるんじゃね?

Slide 7

Slide 7 text

6 KDDI Agile Development Center Corporation 参考情報:「カスタムランタイム」とは? (標準Lambdaランタイム以外に)自分で作成可能なLambdaランタイムの事 ◦ 実はLambdaランタイムは、自分で作成することも可能 下記のようなケースで用いられる(※1) ◦ 標準Lambdaランタイムがサポートしていない言語で動かしたい(Perl, Cなど) ◦ サポート終了した過去バージョンで動かしたい(Node.js v14.xなど) 詳細情報は、下記AWS公式ページを参照 ◦ AWS Lambda 用カスタムランタイムの構築 ※1:コンテナLambdaで対応することも可能

Slide 8

Slide 8 text

7 KDDI Agile Development Center Corporation 参考情報2:「LambdaをTypeScriptで動かす」方法について 今までも、Bun.jsのカスタムランタイムを使用することで動かす事は可能だった ◦ Bun.js公式でカスタムランタイム作成用のツールが用意されている ◦ 参考:BunをLambdaのカスタムランタイムで動作させてみた 詳細を知りたい方は、過去に私が公開・執筆した資料があるので、そちらを参照ください ◦ Bun がメジャーリリースされたけど、本当にBun はNode.js に取って代わるのか?をAWS Lambda で検証し てみた(JSConf JP 2023登壇資料) ◦ Software Design 2024年6月号(第2特集のBun.jsの記事を執筆しました)

Slide 9

Slide 9 text

8 KDDI Agile Development Center Corporation 閑話休題:カスタムランタイムについて カスタムランタイムは、Lambdaレイヤーとしても作成可能 ◦ 参考:チュートリアル: カスタムランタイムの構築 → CDK の「aws_lambda.LayerVersion」コンストラクタで作成可能!

Slide 10

Slide 10 text

9 KDDI Agile Development Center Corporation CDKでカスタムランタイムを作成する

Slide 11

Slide 11 text

10 KDDI Agile Development Center Corporation CDKでカスタムランタイムを作成する(その1) カスタムランタイムの作成 カスタムランタイムの作成自体は、通常のLambdaレイヤー同様 「aws_lambda.LayerVersion」コンストラクタを使うだけでOK 「../runtime-node23」ディレクトリの内容は下図の通り ◦ node.js v23.6.0のバイナリを含める必要がある点に注意(AWS上に存在しないから)(※1) ※1:奇数バージョンなので、AWSがサポートすることはない(node.jsの正式リリースは偶数バージョンのみ)

Slide 12

Slide 12 text

11 KDDI Agile Development Center Corporation CDKでカスタムランタイムを作成する(その2) Lambda関数の作成 Lambda関数は「aws_lambda.Function」で作成する ◦ 「aws_lambda_nodejs.NodejsFunction」ではない(※1) あとは下記の点に注意すればOK ◦ 「runtime」に「aws_lambda.Runtime.PROVIDED_AL2023」を指定する ◦ 「layers」に前ページで作成したカスタムランタイムを指定する ※1:トランスパイルが実行されてしまうので(今回はTypeScriptをそのままLambdaにデプロイする必要がある)

Slide 13

Slide 13 text

12 KDDI Agile Development Center Corporation CDKでカスタムランタイムを作成する(補足) Lambda関数のコード Lambda関数のコードは、今までとほぼ変わりなし(下記で公開してます)(※1) ◦ https://github.com/smt7174/jaws-cdk-event-19/blob/master/lambda/index.ts ※1:「コード」は、ね…(遠い目)(詳細は個人ブログで記載します)

Slide 14

Slide 14 text

13 KDDI Agile Development Center Corporation CDKでカスタムランタイムを作成する(動作確認) Lambda関数の「テスト」で実行した結果、成功してそれっぽいレスポンスも返っている ◦ Node.js のバージョンが「v23.6.0」になっている ◦ S3オブジェクト(テキストファイル)の内容が読めている とりあえず、うまくいったっぽい

Slide 15

Slide 15 text

14 KDDI Agile Development Center Corporation まとめ

Slide 16

Slide 16 text

15 KDDI Agile Development Center Corporation まとめ CDKでカスタムランタイムを作成すること自体は、全く難しくない ◦ Lambdaレイヤー同様、「aws_lambda.LayerVersion」コントラクタを使用するだけ Lambda関数は 「aws_lambda.Function」で作成する ◦ 「aws_lambda_nodejs.NodejsFunction」で作成しない ◦ ソースコード自体は、今までとほぼ同様でOK(※1) むしろ難しいのは、CDK外の「カスタムランタイム独自の部分」にある ◦ 「bootstrap」やJavaScript独自ランタイム(runtime.js)の定義は? ◦ node_modules用のLambdaレイヤーを読み込めない、250MB制限に引っかかる…など ◦ これらについてはCDKの問題ではないので、本日は割愛します(詳細は私の個人ブログに記載します)

Slide 17

Slide 17 text

採用募集中! エンジニア・デザイナー

Slide 18

Slide 18 text

札幌オフィス SAPPORO OFFICE 秋田オフィス AKITA OFFICE 高崎オフィス TAKASAKI OFFICE 金沢オフィス KANAZAWA OFFICE 舞鶴オフィス MAIZURU OFFICE 広島オフィス HIROSHIMA OFFICE 福岡オフィス FUKUOKA OFFICE 那覇オフィス NAHA OFFICE 仙台オフィス SENDAI OFFICE 東京本社 TOKYO MAIN OFFICE 三島オフィス MISHIMA OFFICE 名古屋オフィス NAGOYA OFFICE 大阪オフィス OSAKA OFFICE

Slide 19

Slide 19 text

18 KDDI Agile Development Center Corporation 告知その1 2/25(火)開催の「JAWS-UG 名古屋 2月会『アクセス権限管理の解体新書』」でLTします ◦ IAMポリシーの「Effect」の設定によるアクセス許可/拒否について話します ◦ URL:https://jawsug-nagoya.connpass.com/event/342964/

Slide 20

Slide 20 text

19 KDDI Agile Development Center Corporation 告知その2 2/27(木)弊社開催の「KAGのLT会 #3」でLTします(オンライン) ◦ Amazon Aurora のバージョンアップ手法について話します(BuriKaigi2025でお話しした内容の抜粋版です) ◦ URL:https://kddi-agile.connpass.com/event/345657/

Slide 21

Slide 21 text

Be a Change Leader. アジャイルに力を与え 共に成長し続ける社会を創る