{"id":16466158,"url":"https://github.com/isystk/lambda-template","last_synced_at":"2025-10-16T17:51:07.408Z","repository":{"id":149292253,"uuid":"526433985","full_name":"isystk/lambda-template","owner":"isystk","description":"AWS（API Gateway → Lambda → DynamoDB）を利用したCRUDのサンプルです。 投稿された記事データをAPI経由で取得・登録・変更・削除が出来ます。 SAM を利用して管理しているので、コマンドひとつでインフラを構築出来るようにしています。 また、Dockerを利用することでローカル環境でも実装・テストが出来るようにしています。","archived":false,"fork":false,"pushed_at":"2023-05-21T02:32:39.000Z","size":626,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-10T13:53:03.590Z","etag":null,"topics":["dynamodb","lambda","sam-cli","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/isystk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2022-08-19T02:11:48.000Z","updated_at":"2023-05-04T12:23:49.000Z","dependencies_parsed_at":"2025-01-10T13:51:25.478Z","dependency_job_id":"6bd16a29-d112-4347-810a-b7290a5f15d0","html_url":"https://github.com/isystk/lambda-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isystk%2Flambda-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isystk%2Flambda-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isystk%2Flambda-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isystk%2Flambda-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isystk","download_url":"https://codeload.github.com/isystk/lambda-template/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241026834,"owners_count":19896713,"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":["dynamodb","lambda","sam-cli","typescript"],"created_at":"2024-10-11T11:36:35.951Z","updated_at":"2025-10-16T17:51:07.346Z","avatar_url":"https://github.com/isystk.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"🌙 lambda-template\n====\n\n![GitHub issues](https://img.shields.io/github/issues/isystk/lambda-template)\n![GitHub forks](https://img.shields.io/github/forks/isystk/lambda-template)\n![GitHub stars](https://img.shields.io/github/stars/isystk/lambda-template)\n![GitHub license](https://img.shields.io/github/license/isystk/lambda-template)\n\n## 📗 プロジェクトの概要\n\nAWS（API Gateway → Lambda → DynamoDB）を利用したCRUDのサンプルです。\n投稿された記事データをAPI経由で取得・登録・変更・削除が出来ます。\nSAM を利用して管理しているので、コマンドひとつでインフラを構築出来るようにしています。\nまた、Dockerを利用することでローカル環境でも実装・テストが出来るようにしています。\n\n## 🌐 Demo\n\n![デモ画面](./demo.png \"デモ画面\")\n\n## 📦 ディレクトリ構造\n\n```\n.\n├── README.md\n├── app (Lambdaのモジュール)\n│   ├── dist\n│   ├── jest.config.ts\n│   ├── node_modules\n│   ├── package-lock.json\n│   ├── package.json\n│   ├── src\n│   ├── tests\n│   └── tsconfig.json\n├── dc.sh (Docker管理用のシェルスクリプト)\n├── docker\n│   ├── awscli\n│   ├── docker-compose.yml\n│   └── dynamodb\n├── layers (共通モジュール)\n│   └── app-layer\n├── samconfig.toml\n├── schema\n│   ├── data\n│   └── posts.json\n├── task\n│   ├── env.json\n│   └── env.json.example\n└── template.yaml\n```\n\n## 🔧 事前準備\n\n※ この環境を利用する為には、事前にdocker、docker-composeが動作する状態であることが前提条件です。\n(Windowsの場合は、以下を参考に「WSL」と「Docker Desktop for Windows」を用意してください)\n\n### WSLのインストール（Windowsの場合）\n参考\nhttps://docs.microsoft.com/ja-jp/windows/wsl/install\n\nWSLでUbuntuを起動する\n```\n# 初回起動時に、ユーザ名とパスワードが聞かれます。\n# 何も入力せずにEnterを押すとroot ユーザーで利用できるようになるので、rootユーザーとして設定します。\n\n# 初めにライブラリを最新化します。\n$ apt update\n\n# 日本語に対応しておきます。\n$ apt -y install language-pack-ja\n$ update-locale LANG=ja_JP.UTF8\n$ apt -y install manpages-ja manpages-ja-dev\n```\n\n### Docker Desktop for Windows のインストール（Windowsの場合）\n\nhttps://docs.docker.com/docker-for-windows/install/\n```\n↓コマンドプロンプトでバージョンが表示されればOK\ndocker --version\n```\n\n### WSL2から、Docker for Windows を利用できるようにする（Windowsの場合）\n参考\n```\n１．通知領域から、dockerのアイコンを右クリックして、Settingを選択\n２．Generalの「Expose daemon on tcp://localhost:2375 without TLS」のチェックを入れます。\n３．Resourcesの「WSL INTEGRATION」から、\"Ubuntu\" をスイッチをONにします。\n\nWSL 側のルートを Docker for Windows に合わせるように WSL のマウント設定を行います。\n$ vi /etc/wsl.conf\n---\n[automount]\nroot = /\noptions = \"metadata\"\n---\n\n以下のように Cドライブのパスが\"/mnt/c/\"→\"/c/\" に変更されていれば正常です。\n$ cd /c/Users/USER/github/lambda-template\n$ pwd\n/c/Users/USER/github/lambda-template\n\n# WSL 上にDockerとDocker Composeをインストールする。\n$ apt install docker\n$ apt install docker-compose\n\nこれでWSLからWindows側にインストールしたDockerが利用できるようになります。\n```\n\n## 💬 開発環境の構築\n\n### 各種デーモンを起動する\n\n```\n# 初期化してDocker用のネットワークを作成する\n$ ./dc.sh init\n$ docker network create lambda-local\n\n# Dockerの各種デーモンを起動する\n$ ./dc.sh start\n```\n\n| デーモン | 概要                                                 | URL |\n|:-----|:---------------------------------------------------|:-----|\n| DynamoDB | AWSが提供するNoSQLデータベースサービスで、高可用性・可変性が特徴的なクラウドデータベースです | |\n| DynamoDBAdmin | DynamoDBのWebベースの管理ツールで、データの可視化や簡単な操作が可能です          | http://localhost:8001/ |\n| console | node.jsのランタイム環境です。AWS-CLIコマンドも利用できます               | |\n| mailhog  | ダミーのメールサーバーです。実際にはメールは送信されず、送信されたメールはブラウザで閲覧できます   | http://localhost:8025/  |\n\n\n### バックエンド（Lambda）の開発環境\n\n事前準備\n```\n# コンソールにログインする\n$ ./dc.sh console login\n\n# DynamoDBにテーブルを作成する\n\u003e aws dynamodb create-table --cli-input-json file://schema/posts.json --endpoint-url http://dynamodb:8000  --billing-mode PAY_PER_REQUEST\n\u003e aws dynamodb list-tables  --endpoint-url http://dynamodb:8000 \n\n(テーブルを削除する場合)\n\u003e aws dynamodb delete-table --table-name lambda_template_posts --endpoint-url http://dynamodb:8000\n\n$ cd app\n# Envファイルをコピーして必要に応じて変更する\n$ cp .env.example .env\n$ npm install\n```\n\n動作確認\n```\n# コンソールにログインする\n$ ./dc.sh app login\n\n# ビルドして起動する（docker-composeで自動で実行しているので手動で起動したい場合）\n$ npm run dev\n\n# 一覧取得\n$ curl http://127.0.0.1:3000/posts\n$ curl \"http://127.0.0.1:3000/posts?limit=3\u0026page=2\"\n$ curl \"http://127.0.0.1:3000/posts?userId=aaa\"\n# 登録\n$ curl -X POST -H \"Content-Type: application/json\" -d @data/post.json http://127.0.0.1:3000/posts\n# 単一取得\n$ curl http://127.0.0.1:3000/posts/49e3de26-f28b-4140-becf-06d8b3279914/\n# 更新\n$ curl -X PUT -H \"Content-Type: application/json\" -d @data/post.json http://localhost:3000/posts/49e3de26-f28b-4140-becf-06d8b3279914/\n# 削除\n$ curl -X DELETE http://127.0.0.1:3000/posts/49e3de26-f28b-4140-becf-06d8b3279914/\n```\n\n\n## 🖊️ SAM-CLIの使い方\n\n事前準備\n```\n# SAM CLI をインストールする\n$ pip install aws-sam-cli\n\n# ESModuleでビルドできるようにする\n$ npm install -g esbuild\n\n# AWSコンソールから、IAM ユーザーを用意してください。\n----\nユーザ名：「lambda-user」\nアクセス権限：\n「AdministratorAccess」\n----\n\n# AWSにアクセスする為の設定を作成する\n$ aws configure --profile lambda-user\nAWS Access Key ID [None]: xxxxxxxxxx\nAWS Secret Access Key [None]: xxxxxxxxxx\nDefault region name [None]: ap-northeast-1\nDefault output format [None]: json\n```\n\nSAMを利用してローカルでAPIを起動する\n```\n# ビルドを実行する（.aws-samディレクトリに生成される）\n$ sam build\n# Envファイルをコピーして必要に応じて変更する\n$ cp task/env.json.example task/env.json\n$ sam local start-api --env-vars task/env.json --docker-network lambda-local\n# 動作確認\n$ curl http://127.0.0.1:3000/posts\n```\n\n本番環境（AWS） にデプロイする\n```\n# AWSに反映する\n$ sam deploy --config-env stg\n\n# （AWSから削除する場合）\n$ sam delete --stack-name lambda-template --profile lambda-user\n```\n\n## 🎨 参考\n\n| プロジェクト| 概要|\n| :---------------------------------------| :-------------------------------|\n| [AWS SAM CLI 再入門 2021.08](https://qiita.com/hayao_k/items/7827c3778a23c514e196)| AWS SAM CLI 再入門 2021.08|\n| [aws-sam-cliでLambda,DynamoDBのサーバーレスアプリケーション開発に入門してみる](https://qiita.com/umeneri/items/6fb3f7560f4a878f6dfd)| aws-sam-cliでLambda,DynamoDBのサーバーレスアプリケーション開発に入門してみる |\n| [Lambda Layers をnode.js(SAM)で試してみる](https://qiita.com/monamu/items/96d63dd2151a8ab7e6cf)| Lambda Layers をnode.js(SAM)で試してみる |\n| [serverless-expressでAPI GatewayからLambdaを実行する](https://zenn.dev/yuta_saito/articles/8b543a1957c375593ee5)| serverless-expressでAPI GatewayからLambdaを実行する |\n\n\n## 🎫 Licence\n\n[MIT](https://github.com/isystk/lambda-template/blob/master/LICENSE)\n\n## 👀 Author\n\n[isystk](https://github.com/isystk)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisystk%2Flambda-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisystk%2Flambda-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisystk%2Flambda-template/lists"}