[Serverless] deployコマンド vs. deploy functionコマンド ~ AWS Lambda一括アップロードする際の勘所


2020/04/17

ここでは、サーバーサイドレンダリングでの動的サイトを自作する際の基本設定を解説します。

API Gatewayでカスタムドメインを用いる際にAWSのコンソール画面から何かと設定が多いので手順を簡単にまとめます。


はじめに

Serverless Frameworkは、構成ファイル(serverless.yml)に応じて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 Function

deploy 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メインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。