どうも、AWSの勉強中のとがみんです。
Serverless Frameworkという、お手軽にServerless Applicationを管理、デプロイするためのツールについて、実際に使って簡易サンプルを作成し、挙動を確認したので、その整理をした記事になります。
Contents
Serverless Frameworkとは?
Serverless Frameworkは、Serverlessなアプリケーションの管理をするためのツールを提供します。
インフラの管理をコード化でき、デプロイもコマンド一つでできるため、管理・構築が楽に行えるようになります。
今回作成するサンプル
今回はServerless Frameworkを用いて、ブラウザからリクエストを送信し、Amazon API Gatewayを通してLamda関数を実行し、その結果のレスポンスをブラウザに返却するという簡易APIを作成します。
簡易サンプル作成手順
大まかにには、下記のようなステップで簡易サンプルを作成し動作を確認していきます。
- Serverless Frameworkのインストール
- Serverless Frameworkのサービスを作成
- 作成したサービスのデプロイ
- 作成したAPIにリクエストを送信しレスポンスを確認する
- サービスの削除
Serverless Frameworkのインストール
Serverless Frameworkは、serverlessという名前のnpmパッケージとして提供されているため、下記コマンドでserverless Frameworkをインストールします。
インストールが完了したら、下記のコマンドを実行し、インストールされているかどうかを確認します。
下記のようにバージョン情報が確認できれば、正しくインストールされていることが確認できます。
Plugin: 6.2.2
SDK: 4.3.2
Serverless Frameworkのサービスを作成
作業ディレクトリを作成し、Serverless Frameworkのテンプレートを作成するコマンドを実行します。
今回はnode-jsのテンプレートを作成します。serverless create –helpを実行すると準備されている他のテンプレートの一覧を確認することができます。
上記のテンプレートを作成するコマンドを実行すると「handler.js」と「serverless.yml」というファイルが作成されます。
「handler.js」は、Lamdaで実行する処理を記述するファイルで、「serverless.yml」はServerless Frameworkを使う上での設定ファイルになります。
それぞれのファイルの中身は下記のように編集しています。
handler.js
このファイルに記述されているのは、引数を受け取って、statusCodeとmesseageと受け取った引数のinputが含まれたbodyを返却する簡単な関数が記述されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 'use strict'; module.exports.hello = async (event) => { return { statusCode: 200, body: JSON.stringify( { message: 'Hello World !', input: event, }, null, 2 ), }; }; |
serverless.yml
このファイルには、Serverless Frameworkを使う上での設定が記述されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # Serverless Frameworkのプロジェクト名 service: serverless-framework-test # Serverless Frameworkのバージョン情報 frameworkVersion: "3" # 今回作成するアプリケーションを提供するプロバイダ情報 provider: # 今回はAWSを活用するため「aws」 name: aws # dev 又は prod。今回は開発のため「dev」 stage: dev # 使用言語やversion runtime: nodejs12.x # どのリージョンを使うかの定義 region: ap-northeast-1 # Lamda関数の作成 functions: # Lamda関数の名前を定義。「サービス名+環境名+関数の名前」でコンソール上に表示される hello: # どのファイルのどの関数かを指定する handler: handler.hello # 関数を実行するイベントを定義 events: # 「greet」というhttpリクエストを受けたことをトリガーに指定 - http: path: /greet method: GET |
作成したサービスのデプロイ
ローカルPCからデプロイする場合はAWSのcredensial情報を設定しておく必要があります。
下記のコマンドを実行すると、CloudFormationにスタックが作成され、各種リソースが作成されます。
CloudFromationのコンソールを確認すると、serverless-framework-test-devという名称のスタックが作成されていることが確認できます。
また、コンソールからLamda関数が作成されたことも確認できます。
作成したAPIにリクエストを送信しレスポンスを確認する
deploy時に、エンドポイントがコンソールに表示されるので、そのエンドポイントにブラウザからアクセスします。するとレスポンスが返却されます。
レスポンスの中身に“message”: “Hello World !”のデータが入っていることが確認できました。
Lamdaが起動されたことは、CloudWatchのログで確認することができます。
CloudWatch > Log groups > /aws/lambda/serverless-framework-test-dev-hello
リソースの削除
下記のコマンドを実行すると、作成したリソースが削除されます。
まとめ
Serverless Frameworkを活用したAPI GatewayとLamdaの簡易サンプルを作成し挙動を確認しました。
参考
【AWS】【Serverless Framework 入門】 Serverless Framework をデフォルト設定のままデプロイして挙動を確認してみた