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...