{"id":20974940,"url":"https://github.com/usausa/template-aws-lambda","last_synced_at":"2025-12-28T14:18:28.779Z","repository":{"id":41061587,"uuid":"438529241","full_name":"usausa/template-aws-lambda","owner":"usausa","description":null,"archived":false,"fork":false,"pushed_at":"2024-09-29T10:20:27.000Z","size":196,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-20T05:41:58.579Z","etag":null,"topics":["aws","aws-lambda","lambda","serverless"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/usausa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-15T07:04:30.000Z","updated_at":"2024-09-29T10:20:30.000Z","dependencies_parsed_at":"2023-12-01T00:25:28.364Z","dependency_job_id":"a0d42c5b-c424-40d9-8096-846fd624e6a0","html_url":"https://github.com/usausa/template-aws-lambda","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usausa%2Ftemplate-aws-lambda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usausa%2Ftemplate-aws-lambda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usausa%2Ftemplate-aws-lambda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usausa%2Ftemplate-aws-lambda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/usausa","download_url":"https://codeload.github.com/usausa/template-aws-lambda/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243374325,"owners_count":20280661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-lambda","lambda","serverless"],"created_at":"2024-11-19T04:35:35.096Z","updated_at":"2025-12-28T14:18:23.727Z","avatar_url":"https://github.com/usausa.png","language":"C#","readme":"# Template project for AWS Lambda\n\n## 🍀 基本\n\n* AWS Lambda及びAPI Gatewayを使用したサーバレスプロジェクト構成の雛形を提供する\n* コスト効率の良いarm64での実装を基本とする\n* アプリケーション全体は.NET Coreで構成するが、補助的なLambdaについてはNode.jsを用いる\n* ステージング環境、プロダクション環境等の環境に応じた設定が必要な場合は環境変数で指定する形とする\n* Lambdaのボイラーテンプレート部分はSource Generatorsを使用して自動生成する\n* アプリケーションのデプロイにはCloudFormationを使用する\n\n## ✨ 実装機能\n\n* 自動生成した処理によるDI及びバインディング\n* 自動生成した処理によるValidation\n* 自動生成した処理による前処理フィルタとしてヘルスチェック機能の実装(暖気運転用)\n* カスタムLoggerProviderによるCloudWatch Logsへのフォーマットログ出力\n* DynamoDB CRUD\n* IServiceCollectionエコシステムを利用した設定による外部Web API呼び出し\n* AutoMapperを用いたプレゼンテーションモデルとコアモデルの相互変換\n* DynamoDB部分をMoqとするUnitTestサンプル\n* CloudWatch Eventsによるバッチ処理の定期実行\n\n![aws](./Document/Lambda.drawio.svg)\n\n## 🔧 ツール\n\nデプロイ用の成果物作成及びデバッグ作業を行うため、以下のコマンドで必要なツールをインストールしておく。\n\n```\ndotnet tool update -g amazon.lambda.tools\ndotnet tool update -g amazon.lambda.testtool-6.0\n```\n\n## 🚀 ビルド\n\n以下のコマンドによりデプロイ用のzipを作成する。\nまた、CloudFormationのテンプレートとしてserverless.templateも成果物とする。\n\n```\ndotnet lambda package Template.Lambda.zip -pl Template.Lambda -c Release -farch arm64\ncopy /y Template.Lambda\\serverless.template Publish\\\n```\n\n## 📦 デプロイ\n\nコマンドラインでのデプロイは以下のコマンドを成果物のあるディレクトリで実行する。\n\n```\ndotnet lambda deploy-serverless --package Template.Lambda.zip\n```\n\n## 🔷 アーキテクチャ\n\n本テンプレートのレイヤ構成について記述する。\n\n### 1️⃣ Base\n\n#### ServiceResolver\n\nLambda関数で使用する各種コンポーネントを定義するDIコンテナを定義する。\n\n#### ApiFilter/EventFilter\n\nAPI及びCloudWatchイベントのLambda関数に対するフィルタ処理を定義する。\n\n#### ApiMappingProfile\n\nAutoMapperによるマッピングを定義する。\n\n### 2️⃣ Functions\n\nLambda関数を定義する。  \nLambda関数はSource Generatorsによりボイラーテンプレート部分が自動生成されるため、serverless.templateでの定義は以下のように変更する。\n\n* Before\n\n```yaml\n\"CrudGet\": {\n  \"Type\": \"AWS::Serverless::Function\",\n  \"Properties\": {\n    \"Handler\": \"Template.Lambda::Template.Lambda.Functions.CrudFunction::Get\",\n...\n```\n\n* After\n\n```yaml\n\"CrudGet\": {\n  \"Type\": \"AWS::Serverless::Function\",\n  \"Properties\": {\n    \"Handler\": \"Template.Lambda::Template.Lambda.Functions.CrudFunction_Get::Handle\",\n...\n```\n\n### 3️⃣ Parameters\n\nHTTP APIのLambda関数で使用するRequest/Responseの構造を定義する。  \nDataAnnotationsの属性を指定することで[FromBody]で取得する入力に対するバリデーションが実行される。\n\n### 4️⃣ Services\n\nアプリケーションサービス層を定義する。\n\n### 5️⃣ Models\n\nDynamoDB等のデータ構造を定義する。  \nLambda関数のResponseとしてModels層のデータを直接返す事は良いが、Requestとしての直接使用は禁止する。  \nRequestについては必要な項目のみに制限してバリデーション用の属性を付加したプレゼンテーション用のモデルを作成し、Modelsのデータ構造とは相互にマッピングして使用する。  \nまた、Responseについても返す項目を制限する必要がある場合には同様の形とする。\n\n### 6️⃣ Components\n\nログ、データアクセスといった処理に対するプロバイダーやシリアライザー等の各種コンポーネントを定義する。\n\n## 🚧 次に行う事\n\n* SNS/SQSのをイベントトリガーとする処理\n* RDS Proxyを使用したRDB操作\n* Cognito連携による認証処理\n* Kinesis連携によるストリーム分析\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusausa%2Ftemplate-aws-lambda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fusausa%2Ftemplate-aws-lambda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusausa%2Ftemplate-aws-lambda/lists"}