Submit Search
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
Download as PPTX, PDF
0 likes
436 views
S
ssuser8b389c
TypeScript Lambdaを非常に管理しやすくするNodeJsFunctionの紹介
Software
Read more
1 of 14
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
More Related Content
PDF
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
PDF
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
PDF
20190806 AWS Black Belt Online Seminar AWS Glue
Amazon Web Services Japan
PDF
AWS Black Belt Techシリーズ AWS Direct Connect
Amazon Web Services Japan
PPTX
RLSを用いたマルチテナント実装 for Django
Takayuki Shimizukawa
PDF
20210317 AWS Black Belt Online Seminar Amazon MQ
Amazon Web Services Japan
PDF
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
Amazon Web Services Japan
PPTX
AWSで作る分析基盤
Yu Otsubo
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
20190806 AWS Black Belt Online Seminar AWS Glue
Amazon Web Services Japan
AWS Black Belt Techシリーズ AWS Direct Connect
Amazon Web Services Japan
RLSを用いたマルチテナント実装 for Django
Takayuki Shimizukawa
20210317 AWS Black Belt Online Seminar Amazon MQ
Amazon Web Services Japan
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
Amazon Web Services Japan
AWSで作る分析基盤
Yu Otsubo
What's hot
(20)
PDF
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
PDF
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
Amazon Web Services Japan
PDF
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
Amazon Web Services Japan
PDF
Amazon Athena 初心者向けハンズオン
Amazon Web Services Japan
PDF
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
PDF
20190206 AWS Black Belt Online Seminar Amazon SageMaker Basic Session
Amazon Web Services Japan
PDF
DevOps with Database on AWS
Amazon Web Services Japan
PPTX
LINEのMySQL運用について 修正版
LINE Corporation
PDF
AWS Black Belt Online Seminar 2016 AWS Key Management Service
Amazon Web Services Japan
PDF
最近のストリーム処理事情振り返り
Sotaro Kimura
PDF
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
Amazon Web Services Japan
PPTX
Boto3からの解放。python3の標準ライブラリのみでawsサービスを取り扱うには
Koitabashi Yoshitaka
PDF
20200812 AWS Black Belt Online Seminar Amazon Macie
Amazon Web Services Japan
PDF
AWS Black Belt Online Seminar 2017 Amazon ElastiCache
Amazon Web Services Japan
PDF
AWS Black Belt Online Seminar 2017 AWS WAF
Amazon Web Services Japan
PDF
AWSのログ管理ベストプラクティス
Akihiro Kuwano
PDF
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
Amazon Web Services Japan
PDF
DynamoDB設計のちょっとした技
Yoichi Toyota
PDF
AWS Black Belt Online Seminar 2017 AWS X-Ray
Amazon Web Services Japan
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
Amazon Web Services Japan
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
Amazon Web Services Japan
Amazon Athena 初心者向けハンズオン
Amazon Web Services Japan
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
20190206 AWS Black Belt Online Seminar Amazon SageMaker Basic Session
Amazon Web Services Japan
DevOps with Database on AWS
Amazon Web Services Japan
LINEのMySQL運用について 修正版
LINE Corporation
AWS Black Belt Online Seminar 2016 AWS Key Management Service
Amazon Web Services Japan
最近のストリーム処理事情振り返り
Sotaro Kimura
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
Amazon Web Services Japan
Boto3からの解放。python3の標準ライブラリのみでawsサービスを取り扱うには
Koitabashi Yoshitaka
20200812 AWS Black Belt Online Seminar Amazon Macie
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 Amazon ElastiCache
Amazon Web Services Japan
AWS Black Belt Online Seminar 2017 AWS WAF
Amazon Web Services Japan
AWSのログ管理ベストプラクティス
Akihiro Kuwano
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
Amazon Web Services Japan
DynamoDB設計のちょっとした技
Yoichi Toyota
AWS Black Belt Online Seminar 2017 AWS X-Ray
Amazon Web Services Japan
Ad
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
#2:
10s
#3:
50s
#4:
60s
#5:
2m
#6:
3m
#7:
3m05s
#8:
4m35s
#9:
4m40s
#10:
5m25s
#11:
6m35s
#13:
6m40s
#14:
8m00s
#15:
9m00s
#16:
9m45s
Download