はじめに
メモ用。調査からの急ぎで書いたモノなので間違っていればご指摘ください。
やるとこはタイトルの通り。今回、セキュリティ等は考慮していないのであくまで「形にしたい」という人だけおすすめです。
AWSアカウントの作成、node
のインストールだけは事前にやっておいてください。
-
AWS
- IAMでのユーザの作成と許可ポリシーの作成
- アクセスキーの作成
- CLIインストールとconfigure
-
serverless-http
- プロジェクトの作成
- ローカルホストで起動
- デプロイ
環境
- MacOS - AppleM1チップ - 16GBメモリ - Sonoma14.5
-
npx version
-10.8.3
-
node version
-v22.5.1
-
serverless ϟ framework
-4.4.3
AWS
IAMでのユーザの作成と許可ポリシーの作成
- IAMにアクセスします。リージョンを設定することを忘れないで
以下のように変更してください
ポリシーエディタ
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"lambda:*",
"iam:*",
"s3:*",
"cloudformation:*",
"ssm:*",
"apigateway:*",
"logs:*"
],
"Resource": [
"arn:aws:lambda:*:*:function:*",
"arn:aws:iam::*:role/*",
"arn:aws:s3:::*",
"*",
"*",
"*",
"*"
]
}
]
}
アクセスキーの作成
CLIインストールとconfigure
brew
が一番手っ取り早いです。(他の方法でもできますが...)
これを機にmacOS勢の方はいれてみてはいかがでしょうか。
terminal
$ brew install awscli
$ aws --version
aws-cli/2.17.27 Python/3.11.9 Darwin/23.6.0 source/arm64
先ほど控えたアクセスキーを使ってユーザと紐づけます。
terminal
$ aws configure
AWS Access Key ID: [アクセスキーを入力]
AWS Secret Access Key: [シークレットアクセスキーを入力]
Default region name: [regionを入力]
Default output format: None ※特に設定せずEnter
確認
terminal
$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ******************** shared-credentials-file
secret_key ******************** shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
参考:
serverless-http
プロジェクトの作成
- プロジェクトを作成したい場所まで移動し、以下のコマンドを実行。
- 今回は
AWS / Node.js / Express API
でやっていきます。
terminal
$ npx serverless
Serverless ϟ Framework
Welcome to Serverless Framework V.4
Create a new project by selecting a Template to generate scaffolding for a specific use-case.
? Select A Template: …
❯ AWS / Node.js / HTTP API
AWS / Node.js / Express API
AWS / Node.js / Express API with DynamoDB
AWS / Node.js / Scheduled Task
AWS / Node.js / Simple Function
AWS / Python / HTTP API
AWS / Python / Flask API
AWS / Python / Flask API with DynamoDB
AWS / Python / Scheduled Task
AWS / Python / Simple Function
AWS / Compose / Serverless + Cloudformation + SAM
- プロジェクト名を入力してやります。
terminal
Create a new project by selecting a Template to generate scaffolding for a specific use-case.
✔ Select A Template: · AWS / Node.js / Express API
? Name Your Project: › serverless-express
- その後もプロジェクトを作成するたびに以下のようなものが出ます。作成しておくとダッシュボードなどでアクセス状況などを管理できますが、任意で大丈夫です。
terminal
? Create Or Select An Existing App: …
Create A New App
...other pj
❯ Skip Adding An App
ローカルホストで起動
-
node_modules
をインストール
terminal
$ npm install
-
handler.js
の下の方に以下を追記
handler.js
// ...
+ app.listen(3000, () => {
+ console.log("Server is running on port http://localhost:3000/");
+ });
exports.handler = serverless(app);
-
node
で起動。ホットリロードには対応していないので、更新のたびに再起動してやる必要があります。nodeamon
を使うとホットリロードが可能になるのでデバッグしやすいです。
terminal
$ node handler.js
Server is running on port http://localhost:3000/
デプロイ
-
serverless.yml
に以下を追記。region
はcliで設定したものと同じものを推奨します。 -
package
はfunctions
の中ではなく外なので注意
serverless.yml
# "org" ensures this Service is used with the correct Serverless Framework Access Key.
org: pam5596
# "service" is the name of this project. This will also be added to your AWS resource names.
service: serverless-express
provider:
name: aws
runtime: nodejs20.x
+ region: ap-northeast-1
functions:
api:
handler: handler.handler
events:
- httpApi: "*"
+ package:
+ include:
+ - node_modules/**
+ - handler.js
- 以下のコマンドでデプロイがされます
terminal
$ npx serverless deploy
Deploying "serverless-express" to stage "dev" (ap-northeast-1)
✔ Service deployed to stack serverless-express-dev (44s)
endpoint: ANY - https://*********.execute-api.ap-northeast-1.amazonaws.com
functions:
api: serverless-express-dev-api (922 kB)
おまけ
プロジェクトをきれいさっぱり消したい場合、消えてくれます
terminal
$ npx serverless remove
Removing "serverless-express" from stage "dev" (ap-northeast-1)
✔ Service serverless-express has been successfully removed (21s)