Lambda Powertoolsコントリビュート:typescript編
概要
初めて公式のレポジトリにコントリビュートできた!
せっかくなので同じ問題の違う言語について同様のコントリビュートも出しておこうと思う。
今回はプルリクエストの作法や流れは大体わかったので、作業を進めながら情報をまとめていきます。
コントリビュート対象
issue
pythonのコントリビュートでもお世話になった leandrodamascena さんがこっちにもissueを切ってくれた。
Typescriptビギナーなので勉強しながら進める。
作業記録
-
fork
する
-
clone
する
-
プロジェクト管理ツールをインストール
npm install --save-dev lerna
結構時間がかかりました。
-
ビルドする
lerna run build
-
テストを実行する
packages/parser 以下を指定してテスト実行
lerna run test --scope=@aws-lambda-powertools/parser
@aws-lambda-powertools/parser
はpackages/parser/package.json
に記載されているname
の値
以上で環境構築は終わり
READMEを読む
個別のREADMEは読まざるを得ないですね・・・
以下に要約します。(ほぼgoogle翻訳。。。)
CDKよりはだいぶ短くてよかった。
AWS Lambda 用の Powertools (TypeScript)
AWS Lambda 用の Powertools (TypeScript)
Powertools for AWS Lambda (TypeScript) は、サーバーレスのベストプラクティスを実装し、開発者の速度を向上させる開発者ツールキットです。
このライブラリは、TypeScript と JavaScript の両方のコード ベースで使用できます。
ドキュメント | npmjs.com | ロードマップ | Examples
特徴
プロジェクトの完全なドキュメントはここで見つかります。
- Tracer - Lambda関数ハンドラーと同期関数および非同期関数をトレースするためのユーティリティ
- Logger - 構造化されたログ記録が簡単になり、Lambda コンテキストの重要な詳細でログ項目を充実させるミドルウェア
- Metrics - CloudWatch Embedded Metric Format (EMF) を介して非同期的に作成されたカスタムメトリクス
- Event Handler - API Gateway REST/HTTP API、ALB、Lambda 関数の URL の定型句を削減する軽量ルーティング
- Parameters - AWS SSM パラメータストア、AWS Secrets Manager、AWS AppConfig、Amazon DynamoDB から 1 つ以上のパラメータを取得するための高レベル関数
- Idempotency - クラスメソッドデコレータ、Middyミドルウェア、関数ラッパーを使用して、Lambda関数をべき等化し、ペイロードの内容に基づいて重複実行を防ぎます
- Batch Processing - Amazon SQS、Amazon Kinesis Data Streams、Amazon DynamoDB Streams からのバッチを処理するときに部分的な障害を処理するユーティリティ
- JMESPath Functions - Lambda 関数で一般的なエンコードされた JSON ペイロードを簡単に逆シリアル化するための組み込みの JMESPath 関数
- Parser (Zod) - TypeScript ファーストのスキーマ宣言および検証ライブラリである Zod を使用して、データの検証と解析を提供するユーティリティ
- Validation - 検証前にイベントをアンラップするための JMESPath サポートを含む、イベントと応答の JSON スキーマ検証
Install
Powertools for AWS Lambda (TypeScript) は、お好みの依存関係管理ツールを使ってインストールするか、Lambda Layers 経由でインストールすることで使用できます。すべての機能は個別のパッケージとして提供されるため、必要なものだけをインストールできます。例えば、
-
Logger:
npm install @aws-lambda-powertools/logger
-
Metrics:
npm install @aws-lambda-powertools/metrics
-
Tracer:
npm install @aws-lambda-powertools/tracer
-
Event Handler:
npm install @aws-lambda-powertools/event-handler
-
Parameters:
npm install @aws-lambda-powertools/parameters @aws-sdk/client-ssm
see documentation for other providers -
Idempotency:
npm install @aws-lambda-powertools/idempotency @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb
その他のプロバイダは documentation を見てください -
Batch Processing:
npm install @aws-lambda-powertools/batch
-
JMESPath Functions:
npm install @aws-lambda-powertools/jmespath
-
Parser:
npm install @aws-lambda-powertools/parser zod@~3
-
Validation:
npm install @aws-lambda-powertools/validation
Examples
examples に使い方の例があります. このディレクトリには、特定の機能に関するコードスニペットと、AWS CDK または AWS SAM 経由でデプロイできるシンプルな REST API アプリケーションが含まれています。
AWS Lambda (TypeScript) 用の Powertools をサポートするにはどうすればよいですか?
使用していることを宣言する
このライブラリを使用している企業を把握することは、社内でプロジェクトの優先順位付けを行う上で重要です。Powertools for AWS Lambda (TypeScript) をご利用の場合は、「Powertools for AWS Lambda (TypeScript) のサポート (リファレンスになる)」というissueを提起することで、README ファイルに社名とロゴを追加するようリクエストできます。
Powertools を使用している企業は、主に以下のとおりです。
- Alma Media
- AppYourself
- Bailey Nelson
- Banxware
- Caylent
- Certible
- Elva
- Flyweight
- globaldatanet
- Guild
- Hashnode
- LocalStack
- Ours Privacy
- Perfect Post
- Sennder
- tecRacer GmbH & Co. KG
- Trek10
- WeSchool
作品を共有する
Powertools for AWS Lambda (TypeScript) を使った成果を共有しましょう💞💞。ブログ投稿、ワークショップ、プレゼンテーション、サンプルアプリなど。コミュニティが既に共有しているPowertools for AWS Lambda (TypeScript) に関する内容もぜひご覧ください。
Lambdaレイヤーの使用
これにより、Powertools for AWS Lambda (Typescript) を誰が利用しているかを、邪魔にならない形で把握し、他のPowertools for AWS Lambda言語への将来的な投資を確保することができます。Layersを使用する場合、開発プロセスに影響を与えないように、Powertools for AWS Lambda を開発依存関係として追加できます。
Credits
- 構造化ログの初期実装 aws-lambda-logging
- AWS Lambdaのアイデア DAZN Powertools
Connect
-
AWS Lambda 用 Powertools の Discord::
#typescript
- Invite link - Email: aws-powertools-maintainers@amazon.com
セキュリティ開示
潜在的なセキュリティ問題を発見したと思われる場合は、「Issues」に投稿しないでください。代わりに、脆弱性報告の手順に従うか、AWSセキュリティ担当者に直接メールでご連絡ください。
If you think you’ve found a potential security issue, please do not post it in the Issues. Instead, please follow the vulnerability reporting instructions or email AWS security directly.
License
このライブラリはMIT-0ライセンスの下で提供されています。LICENSEファイルをご覧ください。
変更方針
issueにleandrodamascena
さんが上げてくれているように
While adding these fields to our zod schemas is enough to parse events, we still need to discuss - in a separate issue maybe - how to modify our BatchProcessing utility to support these scenarios, as we need to return an additional state field when using PartialFailure.
BatchProcessing時の扱いの問題があるが、それは別件として、今回はzodのスキーマに足すだけで良いはず。
とのこと。
とはいえzodを知らない・・・
zod
いい記事があった。自分の気持ちにピッタリ!題名は大事ですね。
zodとは?
zodは、TypeScript向けのスキーマ宣言&バリデーションライブラリです。
「型安全なバリデーション」を簡単に実現できるのが最大の特徴で、TypeScriptの型定義とバリデーションロジックを一元管理できます。
ざっくり特徴
- TypeScriptの型推論と連携できる
- シンプルで直感的に使える
- バリデーションエラーの詳細な情報が取得できる
- ネストしたオブジェクトや配列、Union型など複雑な構造も表現可能
使い方の例
import { z } from "zod";
// スキーマ定義
const UserSchema = z.object({
name: z.string(),
age: z.number().min(0),
});
// バリデーション
const result = UserSchema.safeParse({ name: "Alice", age: 30 });
if (result.success) {
// result.dataは型安全
console.log(result.data.name); // "Alice"
} else {
// result.errorに詳細なエラー情報
console.error(result.error);
}
Powertoolsとの関係
Powertools for AWS Lambda (TypeScript) の parser
ユーティリティは、zodを使ってイベントやデータの型安全なバリデーションを実現しています。
zodのスキーマを追加することで、Lambda関数の入力データの検証や型付けが簡単にできるようになります。
ふむ、要するに難しく考えずにzodのタイプを追加してやればいいっぽい。
プルリクエスト
出した!
あとはレビュー待ち!
のはいいんだけどgithub accountの切り替えができなくて超絶困った。
今回はなんと苦なくやり過ごしちゃったけど、今度ちゃんと調べる。
Discussion