Serverlesss(AWS Lambda)(1)セットアップ

serverless framework とは

serverless framework はアプリケーションを関数やイベントを容易に定義し、デプロイを行うことができるフレームワークです。
ymlファイル一つを作成することで、API GatewayDynamoDBといった全てのデプロイをまとめて行うことができます。

何をするか

serverlessのセットアップ及び簡易的なAPIを実際にデプロイすることで、serverless frameworkを利用する下準備を行います。

必要なもの

awsアカウント!

awsの無料枠に含まれているlambdaを利用するため、普段lambdaを使っていない方であれば課金の心配はありません。


serverless のセットアップ

serverless framework のインストール

yarn global add serverless

serverless framework dashboard にログイン

コマンド実行後 serverless app のログイン画面に遷移するのでアカウントを作成してログインを行います。

serverless login

ログイン後のダッシュボード


providers を追加

デプロイを行うための provider を追加します。

1)左メニューの org より org settings に移動し、providers を選択

2)add を選択し、provider 追加モーダルを表示

3)connect aws provider を選択し、aws コンソールへ移動
  aws コンソールにログインしていない場合サインイン画面が表示されるのでサインインを行う。
サインインを行うと provider を追加するための cloudformation のスタックのクイック作成画面が表 示されるので指示に従いスタックを作成します。

4)スタックの作成が終了するとしばらくして provider の追加画面が自動で切り替わり provider の追加が完了します。

以上で serverless framework を使うための前準備は終了となります。


実際にデプロイを行う

service の作成

ここからはデプロイを行うサービスを作成していきます。

1)サービス作成コマンドを実行

serverless

2)コマンドを実行すると作成するサービスのテンプレートの一覧が表示されるので、テンプレートを選択
今回はHTTP APIを利用します。

3)他にもいくつかの項目を聞かれるので順番に選択

What do you want to make? #=> AWS - Node.js - HTTP API
What do you want to call this project? #=> プロジェクト名を任意で入力
What org do you want to add this service to? #=> 作成したアカウントのusernameを選択
Do you want to deploy now? #=> Y
Image from Gyazo

4)Do you want to deploy now?を有効にした場合コンソールに endpoint が表示されるので curl にて確認
"message": "Go Serverless v3.0! Your function executed successfully!"を含むレスポンスが返ってこればデプロイが成功しています。

curl <endpoint>

セットアップ時にDo you want to deploy now?を有効にしなかった場合は以下のコマンドでデプロイが可能

serverless deploy

lambda 関数を追加

ここからは、作成したサービスに独自の関数を追加していきます。

1)handler.jsに hello world を返す関数を作成

handler.js

module.exports.helloWorld = async (_event) => {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: "hello world",
    }),
  };
};

2)serverless.ymlを開き functions に helloWorld 関数を追加

serverless.yml

functions:
  hello:
    handler: handler.hello
    events:
      - httpApi:
          path: /
          method: get
  # --- 以下を追加 ---
  helloWorld:                   # ①
    handler: handler.helloWorld # ②
    events:                     # ③
      - httpApi:                # ④
          path: /helloWorld
          method: get

① lambda の関数名(任意の名前を指定できる)
② 関数の指定 <pathName>/<fileName>.<functionName>
③ API の種類を指定 (REST API or HTTP API)
④ HTTP APIを指定

HTTP API の詳しい内容はこちらの公式へ

https://www.serverless.com/framework/docs/providers/aws/events/

作成した関数をデプロイ

1)作成したプロジェクトに移動し serverless deploy を実行

Image from Gyazo

2)endpoints と functions に helloWorld の項目が追加されるので curl で確認

curl <endpoint>
#=> {"message":"hello world"}%

hello world が表示されれば関数の追加は成功です。

サービスの削除

最後に、今回のチュートリアルで作成したサービスは今後不要のため、サービスの削除を行います。

serverless remove

以上で serverless framework のセットアップ兼チュートリアルは終了です。お疲れ様でした。

参考

https://www.serverless.com/

https://www.serverless.com/framework/docs/providers/aws/guide/events