【Serverless Framework入門】deployコマンド vs. deploy functionコマンド〜AWS Lambda一括アップロードする際の勘所


※ 当ページには【広告/PR】を含む場合があります。
2020/04/17
【Serveless Framework V.3対応】serverless.ymlのpackageを利用してzipにまとめるファイルを選択する方法



ここでは、サーバーサイドレンダリングでの動的サイトを自作する際の基本設定を解説します。
API Gatewayでカスタムドメインを用いる際にAWSのコンソール画面から何かと設定が多いので手順を簡単にまとめます。


はじめに

Serverless Framework に応じてAWSのようなサービスに一括デプロイを行えるとても便利なツールです。
AWSのLambdaプロジェクトをリモートサーバーへデプロイする際には、
Serverless の標準コマンドと aws-cli の機能がほぼほぼ被っているために、いまだに aws-cli を愛用してLambda関数をデプロイさせている人も多いかもしれません。
確かに、
serverless 系コマンドで出来ることは、 aws-cli 系コマンドでも同様のことが出来てしまうので、わざわざ serverless コマンドを覚えなくても...とか思います。
と言ってしばらくしたら
serverless のコマンドをど忘れしちゃうので、可能な限り serverless を意識的に使うようにしたいものです。

aws-cli から serverless へ移行する最大のメリットは、共通したコマンドで、 AWSのみならず以下のような主要なクラウドインフラ をデプロイ操作出来ると言う点です。

            + AWS
+ Microsoft Azure
+ Google Cloud Platform
+ Tencent Cloud
+ Apache OpenWhisk
+ Knative
+ Alibaba Cloud
+ Cloudflare Workers
+ Fn
+ Kubeless
+ Spotinst

        

※ 2020/3月時点調査
そんなそろそろ
Serverless の方へ全面的に移行したい人向けに、メインで使うであろう serverless コマンドをオプションを交えて解説します。
なお本ブログではAWSへのデプロイを想定しております。


create コマンド

AWS - create

ベースとなるテンプレートを指定して、カレントディレクトリに最初の
serverless プロジェクトを作成します。

            $ serverless create --template aws-nodejs
#Or, using a shorthand command,
$ sls create -t aws-nodejs

        

なお、ベースと出来るテンプレートは、
ここのレポジトリ から指定出来ます。
フルスクラッチする場合のほとんどが
aws-nodejs で事足りるとは思います。
が、自身のプロジェクトにあったテンプレートを探して利用するのも良いかもしれません。

            --template / -t:
    serverless公式で利用可能なベーステンプレートの名前を指定します。
--template-url / -u:
    サードパーティなどが提供しているようなリモートで提供しているベーステンプレートを、
    URLを指定して取得します。
--template-path:
    ローカルに置いたベーステンプレートを指定します。
--path / -p:
    カレントディレクトリ以外で、serverlessプロジェクトを新規作成したい場合に、
    そのディレクトリを指定します。
--name / -n:
    serverlessプロジェクトを新規作成する際に、serverless.ymlに特定のプロジェクト名を
    指定してサービスを作成します。

        

deploy コマンド

AWS - deploy

AWSの場合には、CloudFormationを利用してserverlessプロジェクトをデプロイ出来ます。
この
deploy はクラウドサービスを初回にデプロイする場合に用いるので、既にデプロイしたサービスを更新する場合には、次の項目で解説する deploy function を利用します。

            $ serverless deploy
#Or, using a shorthand command,
$ sls deploy

        

このコマンドで押さえておくべきオプションとしては、

            --config / -c:
    構成ファイルのあるパスを設定します。
    基本は serverless.yml を読み込む。
--stage / -s:
    デプロイ先のステージを設定します。
--region / -r:
    APIサーバーの地域を設定します。
    おそらく ap-northeast-1 でよろしいかと。
--package / -p:
    パッケージングをスキップして、特定のデプロイしたいパッケージを設定します。
--verbose / -v:
    処理中、コマンドラインで事細かな詳細を吐き出します。
--force:
    致命的なエラーが出ない限りデプロイを強行します。
--function / -f:
    デプロイ先の関数を呼び出し。
    なおこのコマンドは先の--packageオプションと併用はできません。

        

deploy function コマンド

AWS - Deploy Functiondeploy function の機能によって、個々に変更を加えたlambda関数があった際に、新たに更新した内容のパッケージを、既にデプロイしていたパッケージから交換することができます。
基本的な用法は、

            $ sls deploy function \
    -f $YOUR_FUNCTION_NAME

        

意外に紛らわしいのが、
deploy --functiondeploy function は全くべつもの、ということです。
前者は
deploy コマンドのオプションで、後者は deploy function と言うコマンドです。

            --function / -f:
    変更を加える対象となる関数の名前を指定します。
--stage / -s:
    デプロイ先のステージを設定します。
--region / -r:
    APIサーバーの地域を設定します。
--update-config / -u:
    このオプションを指定すると、
    たとえば、Lambdaのハンドラやタイムアウト時間、メモリサイズなどの
    設定の変更のみを行います。

        

まとめ



取りあえす以上3つのコマンドを利用することで、
Serverless Framefork での必要最低限のサーバレスサービスをデプロイ出来ます。
あとはデプロイしたサービスをゴッソリと削除する
Removeコマンド を使えば、一通りのサーバレスアプリケーション作成のライフサイクルが出来たことになると思います。
なにはともあれまずは何事も、コツコツと手を動かして覚えていきましょう。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。