Serverless Frameworkのインストールやコマンドなど

AWS

Serverless FrameworkをWindows環境にインストールして試してみました。

インストール

Chocolatey GUI で serverless を検索し、Serverless Frameworkをインストールします。
インストールしたらコマンドプロンプトでバージョンが確認できます。

> serverless --version
Framework Core: 1.63.0 (standalone)
Plugin: 3.3.0
SDK: 2.3.0
Components Core: 1.1.2
Components CLI: 1.4.0

プロジェクトの作成

my-serviceという名前でAWSのNode.jsテンプレートからプロジェクトを作成します。

> serverless create --template aws-nodejs --path my-service
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "C:\temp\serverless\my-service"
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.63.0
 -------'

Serverless: Successfully generated boilerplate for template: "aws-nodejs"

テンプレート

Node.jsの他にJavaやPython、Go等のテンプレートもあります。

  • aws-clojurescript-gradle
  • aws-clojure-gradle
  • aws-nodejs
  • aws-nodejs-typescript
  • aws-alexa-typescript
  • aws-nodejs-ecma-script
  • aws-python
  • aws-python3
  • aws-ruby
  • aws-provided
  • aws-kotlin-jvm-maven
  • aws-kotlin-nodejs-gradle
  • aws-groovy-gradle
  • aws-java-gradle
  • aws-java-maven
  • aws-scala-sbt
  • aws-csharp
  • aws-fsharp
  • aws-go
  • aws-go-dep

IAMユーザーとアクセスキーの作成

Serverless FrameworkがAWSにアクセスできるようにIAMユーザー「serverless-admin」を作成します。プログラムによるアクセスを許可して、ポリシーはとりあえずAdministratorAccessをアタッチしています。

認証情報(アクセスキー)の設定

defaultの認証情報は残したかったので、作成したIAMユーザーの認証情報(アクセスキー)をserverlessとしてcredentialsファイルに追加しました。

credentialsファイルについては下記のページが参考になります。
設定ファイルと認証情報ファイルの設定 – AWS Command Line Interface

[default]
aws_access_key_id = [ACCESS_KEY]
aws_secret_access_key = [SECRET_KEY]

[serverless]
aws_access_key_id = [ACCESS_KEY]
aws_secret_access_key = [SECRET_KEY]

続いて追加したserverlessの認証情報を使用するようにプロジェクト内のserverless.ymlファイルに「profile: serverless」を追加します。
defaultの認証情報を使用するのであれば追加する必要ありません。

service: my-service
provider:
  name: aws
  runtime: nodejs12.x
  profile: serverless

基本的な準備が整いました。あとはAWS Lambdaで動作する関数等を書いてserverlessコマンドでDeployや実行を繰り返していく感じになります。

serverlessのコマンド

serverless deploy(AWSへDeploy)

serverless deployコマンドでAWSへまとめてデプロイできます。

> serverless deploy
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
........
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service my-service.zip file to S3 (389 B)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
...............
Serverless: Stack update finished...
Service Information
service: my-service
stage: dev
region: us-east-1
stack: my-service-dev
resources: 6
api keys:
  None
endpoints:
  None
functions:
  hello: my-service-dev-hello
layers:
  None
Serverless: Run the "serverless" command to setup monitoring, troubleshooting and testing.

Deployが完了するとAWSのコンソール画面で確認できます。

serverless deploy function(関数だけDeploy)

毎回全てをDeployするのは時間がかかるので、関数(AWS Lambda)部分だけDeployもできるようです。

> serverless deploy function -f hello
Serverless: Packaging function: hello...
Serverless: Excluding development dependencies...
Serverless: Code not changed. Skipping function deployment.
Serverless: Successfully updated function: hello

serverless invoke(AWSで実行)

> serverless invoke -f hello -l
{
    "statusCode": 200,
    "body": "{\n  \"message\": \"Go Serverless v1.0! Your function executed successfully!\",\n  \"input\": {}\n}"
}
--------------------------------------------------------------------
START RequestId: 7db29dee-8eb7-4020-9f30-61159416aa67 Version: $LATEST
END RequestId: 7db29dee-8eb7-4020-9f30-61159416aa67
REPORT RequestId: 7db29dee-8eb7-4020-9f30-61159416aa67  Duration: 2.80 ms       Billed Duration: 100 ms Memory Size: 1024 MB    Max Memory Used: 70 MB  Init Duration: 119.66 ms

serverless invoke local(ローカルで実行)

> serverless invoke local -f hello -l
{
    "statusCode": 200,
    "body": "{\n  \"message\": \"Go Serverless v1.0! Your function executed successfully!\",\n  \"input\": \"\"\n}"
}

serverless remove(AWSから削除)

AWSから削除します。serverless deployコマンドで作成されたリソースもまとめて削除されます。
ローカル環境にあるファイルは削除されません。

> serverless remove
Serverless: Getting all objects in S3 bucket...
Serverless: Removing objects in S3 bucket...
Serverless: Removing Stack...
Serverless: Checking Stack removal progress...
...........
Serverless: Stack removal finished...
タイトルとURLをコピーしました