

# オープンソースリポジトリ
<a name="runtimes-open-source"></a>

AWS Lambda には、サーバーレスアプリケーションの構築、カスタマイズ、最適化に役立つさまざまなオープンソースツール、ライブラリ、コンポーネントが用意されています。これらのリソースには、ランタイムインターフェイスクライアント、イベントライブラリ、コンテナベースイメージ、開発ツール、AWS で管理され GitHub で利用可能なサンプルプロジェクトなどがあります。これらのオープンソースリポジトリを活用することで、Lambda の機能を拡張し、カスタムランタイムを作成し、さまざまな AWS サービスからイベントを処理し、関数のパフォーマンスに関するより深いインサイトを得ることができます。このページでは、Lambda 開発をサポートする主なオープンソースプロジェクトの概要を説明します。

## ランタイムインターフェイスクライアント
<a name="open-source-ric"></a>

Lambda Runtime Interface Clients (RICs) は、[Runtime API](runtimes-api.md) を実装し、関数コードと Lambda サービス間のやり取りを管理するオープンソースライブラリです。これらのクライアントは、呼び出しイベントの受信、コンテキスト情報の受け渡し、エラーの報告を処理します。

Lambda のマネージドランタイムとコンテナベースイメージで使用されるランタイムインターフェイスクライアントは、オープンソースとして公開されます。カスタムランタイムを構築したり、既存のランタイムを拡張したりする場合、これらのオープンソースライブラリを使用して実装を簡素化できます。以下のオープンソースの GitHub リポジトリには、Lambda の RIC のソースコードが含まれています。
+ [Node.js のランタイムインターフェイスクライアント](https://github.com/aws/aws-lambda-nodejs-runtime-interface-client)
+ [Python のランタイムインターフェイスクライアント](https://github.com/aws/aws-lambda-python-runtime-interface-client)
+ [Java のランタイムインターフェイスクライアント](https://github.com/aws/aws-lambda-java-libs/tree/main/aws-lambda-java-runtime-interface-client)
+ [Ruby のランタイムインターフェイスクライアント](https://github.com/aws/aws-lambda-ruby-runtime-interface-client)
+ [.NET のランタイムインターフェイスクライアント](https://github.com/aws/aws-lambda-dotnet)
+ [Rust のランタイムインターフェイスクライアント](https://github.com/aws/aws-lambda-rust-runtime)
+ [Go のランタイムインターフェイスクライアント](https://github.com/aws/aws-lambda-go)
+ [Swift のランタイムインターフェイスクライアント](https://github.com/awslabs/swift-aws-lambda-runtime) (実験用)
+ [C\$1\$1 のランタイムインターフェイスクライアント](https://github.com/awslabs/aws-lambda-cpp) (実験用)
+ [Lambdaのベースイメージ](https://github.com/aws/aws-lambda-base-images)

これらのクライアントを使用してカスタムランタイムを構築する方法の詳細については、「[AWS Lambda 用カスタムランタイムの構築](runtimes-custom.md)」を参照してください。

## イベントライブラリ
<a name="open-source-event-libraries"></a>

Lambda イベントライブラリは、さまざまな AWS サービスからのイベントを処理するためのタイプ定義とヘルパーユーティリティを提供します。これらのライブラリは、イベントデータをタイプセーフな方法で解析して処理するのに役立ちます。これにより、Amazon S3、Amazon DynamoDB、Amazon API Gateway などのサービスのイベントを簡単に操作できます。

コンパイルされた言語の場合、AWS は次のイベントライブラリを提供します。
+ [Java イベントライブラリ](https://github.com/aws/aws-lambda-java-libs/tree/main/aws-lambda-java-events)
+ [.NET イベントライブラリ](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src)
+ [Go イベントライブラリ](https://github.com/aws/aws-lambda-go/tree/main/events)
+ [Rust イベントライブラリ](https://github.com/awslabs/aws-lambda-rust-runtime)

Node.js、Python、Ruby などのインタプリタ型言語の場合、イベントは別のライブラリを必要とせずに JSON オブジェクトとして直接解析できます。ただし、Node.js と Python を使用するデベロッパーは、AWS Lambda の powertools を活用できます。これにより、タイプヒント、データ検証、コンパイルされた言語ライブラリと同様の機能を提供する AWS イベント用の組み込みスキーマが提供されます。
+ [Powertools for TypeScript](https://docs.powertools.aws.dev/lambda/typescript/latest/features/parser/#built-in-schemas)
+ [Powertools for Python](https://docs.powertools.aws.dev/lambda/python/latest/utilities/parser/#built-in-models)

## コンテナベースイメージ
<a name="open-source-container-base-images"></a>

AWS には、Lambda 関数のコンテナイメージを構築するための出発点として使用できるオープンソースのコンテナベースイメージが用意されています。これらのベースイメージには、ランタイムインターフェイスクライアントと、Lambda 実行環境で関数を実行するために必要なその他のコンポーネントが含まれます。

使用可能なベースイメージとその使用方法の詳細については、[AWS「Lambda ベースイメージ](https://github.com/aws/aws-lambda-base-images)リポジトリ」および[コンテナイメージを使用した Lambda 関数の作成](images-create.md)を参照してください。

## 開発ツール
<a name="open-source-development-tools"></a>

AWS には、Lambda 関数の構築と最適化に役立つ追加のオープンソース開発ツールが用意されています。

### Powertools for AWS Lambda
<a name="open-source-powertools"></a>

Powertools for AWS Lambda は、重要なユーティリティを使用してサーバーレス開発を簡素化し、重複処理、マルチレコード処理、Kafka コンシューマーライブラリのバッチ処理を防止します。これらの機能により、コードの複雑さと運用上のオーバーヘッドを最小限に抑えることができます。

また、組み込みのイベントスキーマ検証、構造化ログ記録、トレース、パラメータストア統合を活用することもできます。これらは、AWS Well-Architected のベストプラクティスに従いながら、本番環境に対応した Lambda 関数の作成を加速するように設計されています。

GitHub リポジトリ:
+ [Python](https://github.com/aws-powertools/powertools-lambda-python): 
+ [TypeScript](https://github.com/aws-powertools/powertools-lambda-typescript)
+ [Java](https://github.com/aws-powertools/powertools-lambda-java): 
+ [.NET](https://github.com/aws-powertools/powertools-lambda-dotnet)

### Java 開発ツール
<a name="open-source-java-tools"></a>
+ [Java プロファイラー (実験用)](https://github.com/aws/aws-lambda-java-libs/tree/main/experimental/aws-lambda-java-profiler) - Java Lambda 関数をプロファイリングするためのツール。
+ [Java ライブラリ](https://github.com/aws/aws-lambda-java-libs) - JUnit テストユーティリティやプロファイリングツールなどの主要なプロジェクトを含む、Lambda 開発用の Java ライブラリとツールの包括的なコレクションを提供するリポジトリ。
+ [サーバーレス Java コンテナ](https://github.com/aws/serverless-java-container) - 最小限の変更で Lambda で既存の Java アプリケーションを実行できるようにするライブラリ。

### .NET 開発ツール
<a name="open-source-dotnet-tools"></a>

[AWS Lambda.NET](https://github.com/aws/aws-lambda-dotnet)リポジトリは、Lambda 開発用の .NET ライブラリとツールを提供します。これには、.NET CLI 用の AWS Lambda ツールや、.NET Core アプリケーションをホストするための .NET Core サーバーなどの主要なプロジェクトが含まれます。

## サンプルプロジェクト
<a name="open-source-sample-projects"></a>

[Serverless Land リポジトリ](https://serverlessland.com/repos)で、サンプルの Lambda プロジェクトとアプリケーションの包括的なコレクションをご覧ください。これらのサンプルは、サーバーレスアプリケーションの使用開始に役立つさまざまな Lambda ユースケース、統合パターン、ベストプラクティスを示しています。