Serverless Framework ハンズオン - 関数のデプロイ・実行・削除まで
この記事でやること
-
Serverless Framework
のセットアップ -
Serverless Framework
の基本的な操作- デプロイ (対象は AWS Lambda)
- 実行
- 削除
※ サーバーレスアーキテクチャの詳細や IAMユーザーの作成方法並びに認可の付与手順などには触れない
Serverless Framework とは
AWS Lambda のようなサーバーレス実行環境では、予め実行する関数を登録しておいて必要に応じて処理させるっていう段取りになる。
関数自体は管理画面(AWS でいうところのマネージメントコンソール)からGUIで登録したりはできるが、プロダクションレベルでは一般的にそういうことはしない。
関数をGitなどで管理し、プロビジョニング・デプロイを自動化して反復的に配信できるようにしておく。
そういったことを行うための構成管理ツールが Serverless Framework
なぜ Serverless Framework か
別のアプローチとして SAM (AWS サーバーレスアプリケーションモデル、Serverless Application Model)
があったが、Serverless Framework
の方がベンダーロックインを回避できそうな気がしたのでこっちにした。
SAM
は結局 CloudFormation
をラップするみたいな感じのものに思えたが、対象が AWS に限られそうで、将来別のパブリッククラウドで何かのサーバーレスサービスが台頭してきてそちらに乗り換えるみたいな需要が出た場合、 Serverless Framework
ならそういうことも実現できそうな気がしたため
CLI のインストール
Node.js は既に入っててバージョンも Serverless Framework
に対応している前提で以下実行
$ npm install -g serverless
認証設定
AWS Lambda
にデプロイするため、認証情報として AWSアカウントが必要になる。
今回は IAM ユーザーを作成して以下の許可ポリシーを付与した
AWSCloudFormationFullAccess
AdministratorAccess
アクセスキーIDとシークレットキーも作成して以下のように保存しておく
$ aws configure --profile serverlessExample
デフォルトのものを上書きしないようにここではプロファイルを別途分けている
サービスの生成
Serverless Framework
における実行環境がサービスで、適当なディレクトリで以下を実行すると雛形ができる
この際にテンプレートを指定するが、一旦 aws-python3
にした
$ serverless create --template aws-python3 --name my-serverless-example --path my-serverless-example
あらかじめ用意されているテンプレートは serverless create --help
で確認できる。
後続の章では
$ cd my-serverless-example
でサービスのルートで操作するものとする
デプロイ
今回は CLI 操作の素振り目的なので関数は自動生成されたものをそのままデプロイする
$ serverless deploy --aws-profile serverlessExample
成功したら IAMユーザーでマネジメントコンソールログインすれば実際に関数登録されていることがわかると思う
実行
前章でデプロイした関数は以下で実行できる
$ serverless invoke -f hello --log --aws-profile serverlessExample
{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}}"
}
--------------------------------------------------------------------
START
END Duration: 0.98 ms (init: 104.43 ms) Memory Used: 38 MB
削除
$ serverless remove --aws-profile serverlessExample
これも、成功したらマネジメントコンソールで関数が消えてることが確認できるはず
以上
深掘りしたいことはあるのでその辺は別記事にするかここに追記するかします。
参考
Discussion