Submit Search
Upload
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
•
Download as PPTX, PDF
•
0 likes
•
313 views
S
ssuser8b389c
Follow
TypeScript Lambdaを非常に管理しやすくするNodeJsFunctionの紹介
Read less
Read more
Software
Report
Share
Report
Share
1 of 14
Download now
Recommended
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
Amazon Web Services Japan
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
Amazon Web Services Japan
ADRという考えを取り入れてみて
ADRという考えを取り入れてみて
infinite_loop
Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器
Works Applications
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
Amazon Web Services Japan
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
Yoichi Toyota
Recommended
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
Amazon Web Services Japan
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
Amazon Web Services Japan
ADRという考えを取り入れてみて
ADRという考えを取り入れてみて
infinite_loop
Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器
Works Applications
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
Amazon Web Services Japan
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
Yoichi Toyota
Vault の鍵管理機構
Vault の鍵管理機構
Katsuya Yamaguchi
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しよう
Eiji KOMINAMI
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6
株式会社Jurabi
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
Amazon Web Services Japan
DevOps with Database on AWS
DevOps with Database on AWS
Amazon Web Services Japan
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩
淳 千葉
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
都元ダイスケ Miyamoto
Serverless時代のJavaについて
Serverless時代のJavaについて
Amazon Web Services Japan
JenkinsとCodeBuildとCloud Buildと私
JenkinsとCodeBuildとCloud Buildと私
Shoji Shirotori
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
infinite_loop
20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes
Amazon Web Services Japan
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
NTT DATA Technology & Innovation
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
RDB開発者のためのApache Cassandra データモデリング入門
RDB開発者のためのApache Cassandra データモデリング入門
Yuki Morishita
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
Sumihiro Kagawa
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
Ryuji TAKEHARA
More Related Content
What's hot
Vault の鍵管理機構
Vault の鍵管理機構
Katsuya Yamaguchi
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しよう
Eiji KOMINAMI
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6
株式会社Jurabi
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
Amazon Web Services Japan
DevOps with Database on AWS
DevOps with Database on AWS
Amazon Web Services Japan
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩
淳 千葉
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
都元ダイスケ Miyamoto
Serverless時代のJavaについて
Serverless時代のJavaについて
Amazon Web Services Japan
JenkinsとCodeBuildとCloud Buildと私
JenkinsとCodeBuildとCloud Buildと私
Shoji Shirotori
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
infinite_loop
20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes
Amazon Web Services Japan
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
NTT DATA Technology & Innovation
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
RDB開発者のためのApache Cassandra データモデリング入門
RDB開発者のためのApache Cassandra データモデリング入門
Yuki Morishita
What's hot
(20)
Vault の鍵管理機構
Vault の鍵管理機構
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しよう
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
DevOps with Database on AWS
DevOps with Database on AWS
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
Serverless時代のJavaについて
Serverless時代のJavaについて
JenkinsとCodeBuildとCloud Buildと私
JenkinsとCodeBuildとCloud Buildと私
イベント・ソーシングを知る
イベント・ソーシングを知る
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes
Redisの特徴と活用方法について
Redisの特徴と活用方法について
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
Tackling Complexity
Tackling Complexity
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
RDB開発者のためのApache Cassandra データモデリング入門
RDB開発者のためのApache Cassandra データモデリング入門
Similar to TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
Sumihiro Kagawa
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
Ryuji TAKEHARA
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
Ma_gician (世界中のフロントエンダーの残業時間を減らす、新しいフロントエンドフレームワーク)<詳細版>
Ma_gician (世界中のフロントエンダーの残業時間を減らす、新しいフロントエンドフレームワーク)<詳細版>
Eucen Stew
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
Yoshifumi Kawai
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
Embulk 20150411
Embulk 20150411
Hiroshi Nakamura
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
Masahito Zembutsu
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について
真吾 吉田
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
AWS Lambda Update
AWS Lambda Update
Keisuke Nishitani
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
Taisuke Oe
The Next Generation for C# Developers
The Next Generation for C# Developers
Takayoshi Tanaka
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみた
Hideaki Aoyagi
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Shigeru UCHIYAMA
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
崇之 清水
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
Hiraku Komuro
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
Katsutoshi Nagaoka
WebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにする
Takuya Kikuchi
Similar to TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
(20)
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Ma_gician (世界中のフロントエンダーの残業時間を減らす、新しいフロントエンドフレームワーク)<詳細版>
Ma_gician (世界中のフロントエンダーの残業時間を減らす、新しいフロントエンドフレームワーク)<詳細版>
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Embulk 20150411
Embulk 20150411
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
AWS Lambda Update
AWS Lambda Update
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
The Next Generation for C# Developers
The Next Generation for C# Developers
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみた
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
WebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにする
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
1.
TypeScriptで書くLambdaを CDKでいい感じに管理する クライヤー篠塚 一帆
2.
自己紹介 経歴 生命系専攻
組み込み&信号処理エンジニア (3年) 事業企画 (1年) 社内向けWebアプリエンジニア (1.5年) AWS, フロントエンド, バックエンド CDK歴 半年ほど cloudformation半年 → ツラすぎて移行 クライヤー篠塚 一帆 2017 2018 2020 2021 2022 2019 回路、基板設計から行った 自作ニキシー管 温湿度気圧計 @badmintoncryer @nixieminton
3.
04 03 02 01 目次 Introduction 基本のやり方 NodeJsFunction とかいう神 Tips
4.
Introduction やりたいこと API
Gateway & lambdaでバックエンド構築 LambdaもTypeScriptで実装 TypeScript JavaScript + 静的型付け TypeScriptランタイムは (あんまり)存在しない。 一度JavaScriptへ変換(トランスパイル)し、 生成されたJavaScriptを実行する。 API Gateway AWS Lambda let hoge = ‘test’ hoge = 123 // OK JavaScript let hoge: string = ‘test’ hoge = 123 // Error@静的解析 TypeScript ??
5.
Introduction LambdaでTypeScriptを動かそう! Node.jsをランタイムとして指定
TypeScriptコードをJavaScriptにトランスパイル & デプロイ デフォルトで入っていないモジュールを用いる場合、 モジュールの紐付けが必要 aws-sdk, child_process, fs, etc.. は何もしなくても使える 選択肢 layerを使う node_modulesを含めたzipを生成してupload モジュールのバンドリング 目指したこと cdk deploy コマンド一発で、以下全てをいい感じに実行 TypeScriptコードのトランスパイル モジュールの紐付け lambdaへのデプロイ
6.
04 03 02 01 目次 Introduction 基本のやり方 NodeJsFunction とかいう神 Tips
7.
基本のやり方 トランスパイル モジュールの紐付け デプロイ // トランスパイル &
バンドリング $ tsc // node_modules作成 $ npm install × N回 (各lambdaフォルダ毎) $ cdk deploy aws-cdk-lib.aws_lambda.Function aws_lambda.FunctionでTypeScript Lambdaをデプロイするには?? const function = new lambda.Function(this, 'MyFunction', { runtime: lambda.Runtime.NODEJS_16_X, code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler’)), handler: 'index.handler‘ }) トランスパイル & バンドリング済みのJSファイルを指定 (正確にはディレクトリ丸ごとuploadされる) 運用でカバー or デプロイ用スクリプトが必要😩😩
8.
04 03 02 01 目次 Introduction 基本のやり方 NodeJsFunction とかいう神 Tips
9.
NodeJsFunctionとかいう神 トランスパイル モジュールの紐付け デプロイ aws-cdk-lib.aws_lambda_nodejs.NodeJsFunction NodeJsFunctionを使って
TypeScript Lambdaをデプロイするには?? const hogeLambda = new nodeLambda.NodejsFunction(scope, ‘hoge’, { runtime: lambda.Runtime.NODEJS_16_X, entry: path.join(__dirname, './index.ts‘) }) // めんどくさいことぜんぶ、cdk deploy におまかせ! $ cdk deploy TypeScriptファイルをパス指定するだけ 脳死でcdk deployコマンドを叩くだけ😍
10.
"use strict"; var __getOwnPropNames
= Object.getOwnPropertyNames; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]]) ((mod = { exports: {} }).exports, mod), mod.exports; }; …(数万行)… exports.handler = async ( event, _context) => { (なにかSqliteを操作) return {…} } 何を行っている? コード例 (index.ts) import * as sqlite3 from ‘sqlite3’ exports.handler = async ( event: APIGatewayProxyEventV2WithJWTAuthorizer, _context: Context ): Promise<APIGatewayProxyResult> => { (なにかSqliteを操作) return {…} } 成果物 (cdk.out/asset.〇〇.js) 1. node_modules内の sqlite3モジュールを JSファイルにバンドル 2. handlerを JSにトランスパイル JSファイルをlambdaにアップロード $ cdk deploy でTypeScript Lambdaのデプロイが全て完結 1. 外部モジュールをimport 2. handlerをTypeScriptで記述 $ cdk synth $ cdk deploy
11.
04 03 02 01 目次 Introduction 基本のやり方 nodeLambda. NodeJsFunction とかいう神 Tips
12.
Tips lambda互換環境でモジュールをインストールしてほしい Why
? mac環境でインストールしたモジュールがlambdaで動かない… native extensionを含むモジュール How ? bundling: forceDockerBundling オプション lambda互換コンテナ環境上で一連の処理を実行してくれる 注意点 macOS上で著しく動作が遅いです。 公式でも言及有り 「macOSユーザーは、localでesbuild使うのがオススメだぜ」 私はgithub actions上で動かすことにしました モジュール インストール トランスパイル & バンドリング lambda互換コンテナ PC $ cdk synth cdk.out生成 コンテナ 立ち上げ コンテナ クローズ lambda環境向けのモジュールを バンドリングしたJSファイルが生成
13.
Tips lambdaにアップロードするファイルを操作したい Why
? ex.1 容量制限(250MB)対策のため、不要なファイルを削除したい prismaは各種エンジンが重く、250MB制限と戦う必要あり ex.2 必要なファイルを投げ込みたい クライアント証明書とか持たせたい! How ? コマンドフックを活用 beforeBundling, afterBundling, beforeInstall const hogeLambda = new nodeLambda.NodejsFunction(scope, ‘hoge', { entry: path.join(__dirname, './index.ts‘), bundling: { commandHooks: { beforeInstall: (inputDir: string, outputDir: string) => [ // スキーマファイルのコピー `cp -r ${inputDir}/prisma ${outputDir}`, ], afterBundling: (inputDir: string, outputDir: string) => [ // 不要なディレクトリを削除 `rm -rf ${outputDir}/unusedDirPath`, `cp ${inputDir}/libquery… ${outputDir}`, ], } } }) cdk.out/asset〇〇の中身
14.
まとめ CDKを使って、lambdaをTypeScriptで実装したい NodeJsFunctionが神
トランスパイル、モジュールの紐付け、デプロイを全て行ってくれる lambda互換環境でのバンドリングも可能。 コマンドフック活用で、お好みのファイル操作が可能 独自モジュールの導入、lambda容量制限のため不要なファイルを削除 めんどくさいことを全てCDKにおまかせできる! あとは $ cdk deploy するだけ♪ Have a happy TypeScript Lambda life !!
Editor's Notes
10s
50s
60s
2m
3m
3m05s
4m35s
4m40s
5m25s
6m35s
6m40s
8m00s
9m00s
9m45s
Download now