💬

Lambda Powertoolsコントリビュート:typescript編

に公開

概要

初めて公式のレポジトリにコントリビュートできた!

せっかくなので同じ問題の違う言語について同様のコントリビュートも出しておこうと思う。
今回はプルリクエストの作法や流れは大体わかったので、作業を進めながら情報をまとめていきます。

コントリビュート対象

issue

pythonのコントリビュートでもお世話になった leandrodamascena さんがこっちにもissueを切ってくれた。

Typescriptビギナーなので勉強しながら進める。

作業記録

  1. forkする

  2. cloneする

  3. プロジェクト管理ツールをインストール
    npm install --save-dev lerna
    結構時間がかかりました。

  4. ビルドする
    lerna run build

  5. テストを実行する
    packages/parser 以下を指定してテスト実行
    lerna run test --scope=@aws-lambda-powertools/parser
    @aws-lambda-powertools/parserpackages/parser/package.json に記載されている name の値

以上で環境構築は終わり

READMEを読む

個別のREADMEは読まざるを得ないですね・・・
以下に要約します。(ほぼgoogle翻訳。。。)
CDKよりはだいぶ短くてよかった。

AWS Lambda 用の Powertools (TypeScript)

AWS Lambda 用の Powertools (TypeScript)

Powertools for AWS Lambda (TypeScript) は、サーバーレスのベストプラクティスを実装し、開発者の速度を向上させる開発者ツールキットです。

このライブラリは、TypeScript と JavaScript の両方のコード ベースで使用できます。

PythonJava.NETでも利用できます。

ドキュメント | 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 を使用している企業は、主に以下のとおりです。

作品を共有する

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

Connect

セキュリティ開示

潜在的なセキュリティ問題を発見したと思われる場合は、「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