0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【serverless-framework】1から始めるexpressをAWS Lambdaにデプロイ

Posted at

はじめに

メモ用。調査からの急ぎで書いたモノなので間違っていればご指摘ください。
やるとこはタイトルの通り。今回、セキュリティ等は考慮していないのであくまで「形にしたい」という人だけおすすめです。
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にアクセスします。リージョンを設定することを忘れないで


  • 左のタブの「ユーザー」から「ユーザーの作成」を押して
    SS 2024-10-01 23.54.41.png

  • 任意のユーザ名を設定してください。アルファベット推奨
    SS 2024-10-02 0.00.21.png

  • 「ポリシーを直接アタッチする」から「ポリシーの作成」を押して
    SS 2024-10-02 0.00.39.png

  • 「JSON」を選択するとコードエディタが出てきます
    SS 2024-10-02 0.01.10.png

以下のように変更してください

ポリシーエディタ
{
	"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:::*",
				"*",
				"*",
				"*",
				"*"
			]
		}
	]
}

  • 任意のポリシー名と説明を記入してください。他特にいじる必要はありません
    SS 2024-10-02 0.19.08.png

  • 先ほどの画面に戻り、絞り込みタイプを「カスタマー管理」にすると、
    SS 2024-10-02 0.20.46.png

  • 作成したポリシーが出てるので選択してあげます。ここも他でいじる必要は特にありません
    SS 2024-10-02 0.21.01.png

  • 最終確認。「ユーザーの作成」を押してください。
    SS 2024-10-02 0.23.20.png

  • 作成できました🎉
    SS 2024-10-02 0.24.46.png

アクセスキーの作成

  • ユーザーの画面から「アクセスキーを作成」します
    SS 2024-10-02 0.24.46.png

  • 「コマンドラインインターフェイス(CLI)」を選択して次へ
    SS 2024-10-02 0.28.40.png

  • 任意の説明タグを入れてやります
    SS 2024-10-02 0.31.47.png

  • アクセスキーが生成されます。あとで使うので控えておきましょう。不安な人は、下の方にいくと.csvをダウンロードできるので保存しておきましょう。
    SS 2024-10-02 0.32.24.png

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 

  • プロジェクトの作成が完了します。初回だとログインを求められます。一番上のLogin / Registerを選択し、ブラウザが開くのでテキトーに登録しておきましょう。嫌な場合はCtr+Cしましょう。
    SS 2024-10-02 0.51.03.png

  • その後もプロジェクトを作成するたびに以下のようなものが出ます。作成しておくとダッシュボードなどでアクセス状況などを管理できますが、任意で大丈夫です。
terminal
? Create Or Select An Existing App: … 
  Create A New App
  ...other pj
❯ Skip Adding An App

SS 2024-10-02 0.49.29.png

ローカルホストで起動

  • 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/

  • ポート3000にアクセスでちゃんと返ってきますね
    SS 2024-10-02 1.08.19.png

デプロイ

  • serverless.ymlに以下を追記。regionはcliで設定したものと同じものを推奨します。
  • packagefunctionsの中ではなく外なので注意
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)

  • Aws Lambdaを確認してみましょう。ちゃんと作られています。GateWayも付随してます。
    SS 2024-10-02 1.16.40.png

  • APIエンドポイント以降のパスはexpressで設定したルートと同じです。
    SS 2024-10-02 1.18.07.png

おまけ

プロジェクトをきれいさっぱり消したい場合、消えてくれます

terminal
$ npx serverless remove
Removing "serverless-express" from stage "dev" (ap-northeast-1)

✔ Service serverless-express has been successfully removed (21s)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?