💡

Serverless Framework ハンズオン - 関数のデプロイ・実行・削除まで

2023/02/02に公開

この記事でやること

https://www.serverless.com/

  • 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

これも、成功したらマネジメントコンソールで関数が消えてることが確認できるはず

以上
深掘りしたいことはあるのでその辺は別記事にするかここに追記するかします。

参考

https://www.serverless.com/framework/docs/getting-started
https://serverless.co.jp/blog/25/

Discussion