技術

Serverless Framework で Lambda や API Gateway のデプロイをサクッとやる

こんにちは。AWS大好きの @tara です。

AWS Lambda は、実行環境(サーバー)を用意しなくていいので、便利なサービスですよね。

ただ素のままだと、デプロイが面倒くさいという問題があります。コードをzipに固めて、AWSコンソールをポチポチ、UPしたあともVPCやTimeout、環境変数などの設定したりといろいろとやることがあります。

これが、ちょっとしたジョブの追加とかで関数が2,3個とかなら、手動でやっても問題ありません。

しかし、REST API とかになると、関数の数も爆発的に増えますし、API Gatewayの設定もしないといけません。しかも、ステージごとにprefix(dev-とかproduction-とか)が必要だったり、ステージごとにAWSアカウントが異なるとかの運用ルールもあることでしょう。

こうなったらもう、手動での作業は赤信号です。何回、AWSコンソールのクリックが必要かわかったものじゃありません。時間と労力の無駄です。設定ミスも生じるでしょう。

そこで、 Serverless Framework の出番になります。Serverless Framework なら、1コマンドでLambda関数とAPI GatewayをしかるべきPrefixをつけてデプロイすることができます。

本記事は、この Serverless Framework についてになります。

この記事が役に立つ人

Lambda や API Gateway のデプロイが面倒くさいと感じている人
Serverless Framework の名前を知っているけど使ったことがない人

Serverless Framework って何ができるの?

冒頭にも書きましたとおり、 Serverless Framework ができることは、AWS Lambdaとそれに関係する設定(API Gateway, VPC, IAM roleなど)のデプロイです。これらがコマンドラインから、1コマンドでできます。

プロジェクト丸ごと1コマンドでデプロイできます。関数単位でもデプロイできますので、開発環境での更新・修正作業も容易です。

デプロイの他にも、LambdaにUP済みの関数を実行したり、ローカル環境で実行したりもできます。が、これらは、おまけの機能と考えて良いでしょう。

Serverless Framework のメイン機能、真価はデプロイがサクッとできることにあります。

同様のツールでは、 Chalice などがあります。

tara
tara
Serverless Framework は、 AWSだけでなくGCPやAzureにも対応しているようです。私はAWS以外では使ったことがないので、詳細はわかりませんが・・・

Serverless Framework の動作条件

Serverless Framework の動作に必要なものは下記になります。

  • Node.js
  • フル権限のIAMの AWS KEY

Node.js を使ったことがない人は、「え、開発環境が必要なの!? めんどくせー」と思うかも知れませんが、公式サイトにあるインストーラーを叩くだけです。それだけで npm コマンドが使えるようになります。

むしろ大変なのは、2番目のフル権限のIAMのKEYの方です。公式では、フル権限(AdministratorAccess)のポリシーが必要とされています。ServerlessFrameworkでは設定したAWSリソースが存在しなければ、それがIAMだろうとRoleだろうと新規に作成するので、なんでもできる権限が必要ということになっているのだと思います。

フル権限IAMは、開発環境ならともかく、本番環境の方は組織体制によっては入手できないかもしれないですね。デプロイ作業用のサーバーを用意して、AWSクレデンシャルを隠蔽して、デプロイコマンドだけ叩けるようにするとか、CI系のツールと連動させてコードビルドするとかの対応が必要かもしれません。

Serverless Framework の導入

導入は簡単にできます。

  1. Nodejsインストーラーをたたく
  2. serverlessパッケージをinstall

で完了です。

インストール確認

Serverless Framework の使い方

serverless.yml用意

Serverless Framework の使い方は、端的に言うと

serverless.yml を用意して、デプロイコマンド叩く

だけです。

プロジェクトが無い場合は、createコマンドがありますので、それで作成します。

testディレクトリが作成されて、handler.py, event.json, serverless.yml が作成されます。–templateオプションで、自分が使用する言語を指定します。python3の他に、nodejsやjava、ruby、goなどいろいろあります。指定可能なテンプレートは以下のリンクに記載があります。
https://serverless.com/framework/docs/providers/aws/cli-reference/create/

既存プロジェクトに導入したい場合は、プロジェクトのルート配下に空のserverless.ymlファイルを作るだけでOKです。

serverless.yml編集

serverless.ymlを自分の環境に合わせて編集します。これは、公式のサンプルを参考にするしかないでしょう。
https://serverless.com/framework/docs/providers/aws/guide/serverless.yml/

私が使っている設定は以下の様な感じです。

デプロイ実行

serverless.yml が用意できたら、serverless.ymlがあるディレクトリから、デプロイコマンドを実行します。

デプロイコマンドは

です。

stageオプションなしで、 sls deployだけでもできるのですが、私は間違った環境にデプロイしてしまわないように、毎回stageオプションをつけています。

めったに使いませんが、下記コマンドで削除できます。

関数単位での、デプロイは下記になります。

関数単位にしないと全関数、全APIがデプロイ対象になりますので時間がかかります。なので開発中によく使うコマンドです。

Serverless Framework の使い方は以上になります。

まとめ

以上、Serverless Framework の紹介でした。

まとめ
  • Serverless Framework を使うと、デプロイが簡単にできる。
  • Serverless Framework は導入は簡単。ただしフル権限IAMが必要。
  • Serverless Framework は使い方も簡単。
ABOUT ME
tara
tara
年収360万円でIT業界のキャリアスタート
SES -> Web業界 -> 大手メーカー -> フリーランス
と経験してきて、現在は年収1000万円を越えました。

エンジニアのキャリアアップに役立つ情報を発信していきます。