Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CDKでカスタムランタイムを作成して、Lambdaをnode.js23+TypeScriptで...

Makky12
February 21, 2025

 CDKでカスタムランタイムを作成して、Lambdaをnode.js23+TypeScriptで動かしてみた

2025/02/21 (金) に開催された「JAWS-UG CDK支部#19 クラスメソッドコラボ回」における私のLT「CDKでカスタムランタイムを作成して、Lambdaをnode.js23+TypeScriptで動かしてみた」の発表資料になります。

https://jawsug-cdk.connpass.com/event/343974/

#jawsug_cdk

Makky12

February 21, 2025
Tweet

More Decks by Makky12

Other Decks in Technology

Transcript

  1. 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/
  2. 2 KDDI Agile Development Center Corporation 本日のアジェンダ • きっかけ •

    CDKでカスタムランタイムを作成する • まとめ & 告知など
  3. 3 KDDI Agile Development Center Corporation 注意事項 お話しすること • カスタムランタイムの概要

    • カスタムランタイムをAWS CDK(以下「CDK」)で作成する方法 • LambdaをTypeScriptで動かす環境をCDKで構築する方法 お話ししないこと(個人ブログで記載します) • カスタムランタイムに関する詳細情報 • LambdaをTypeScriptで動かす際の詳細情報(制限事項、性能比較など) その他 • 発表資料・発言内容は、すべて個人の見解・知見になります(正式情報はAWS公式サイトをご確認ください)
  4. 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で動かせるんじゃね?
  5. 6 KDDI Agile Development Center Corporation 参考情報:「カスタムランタイム」とは? (標準Lambdaランタイム以外に)自分で作成可能なLambdaランタイムの事 ◦ 実はLambdaランタイムは、自分で作成することも可能

    下記のようなケースで用いられる(※1) ◦ 標準Lambdaランタイムがサポートしていない言語で動かしたい(Perl, Cなど) ◦ サポート終了した過去バージョンで動かしたい(Node.js v14.xなど) 詳細情報は、下記AWS公式ページを参照 ◦ AWS Lambda 用カスタムランタイムの構築 ※1:コンテナLambdaで対応することも可能
  6. 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の記事を執筆しました)
  7. 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の正式リリースは偶数バージョンのみ)
  8. 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にデプロイする必要がある)
  9. 12 KDDI Agile Development Center Corporation CDKでカスタムランタイムを作成する(補足) Lambda関数のコード Lambda関数のコードは、今までとほぼ変わりなし(下記で公開してます)(※1) ◦

    https://github.com/smt7174/jaws-cdk-event-19/blob/master/lambda/index.ts ※1:「コード」は、ね…(遠い目)(詳細は個人ブログで記載します)
  10. 13 KDDI Agile Development Center Corporation CDKでカスタムランタイムを作成する(動作確認) Lambda関数の「テスト」で実行した結果、成功してそれっぽいレスポンスも返っている ◦ Node.js

    のバージョンが「v23.6.0」になっている ◦ S3オブジェクト(テキストファイル)の内容が読めている とりあえず、うまくいったっぽい
  11. 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の問題ではないので、本日は割愛します(詳細は私の個人ブログに記載します)
  12. 札幌オフィス 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
  13. 18 KDDI Agile Development Center Corporation 告知その1 2/25(火)開催の「JAWS-UG 名古屋 2月会『アクセス権限管理の解体新書』」でLTします

    ◦ IAMポリシーの「Effect」の設定によるアクセス許可/拒否について話します ◦ URL:https://jawsug-nagoya.connpass.com/event/342964/
  14. 19 KDDI Agile Development Center Corporation 告知その2 2/27(木)弊社開催の「KAGのLT会 #3」でLTします(オンライン) ◦

    Amazon Aurora のバージョンアップ手法について話します(BuriKaigi2025でお話しした内容の抜粋版です) ◦ URL:https://kddi-agile.connpass.com/event/345657/