Edited at

[Serverless Framework] インストールからデプロイするまで [初心者]

More than 1 year has passed since last update.


概要

n番煎じ? 許してください。

初めてServerless Frameworkを使ったので、それを使ってAWSにLambdaをデプロイするまでのメモ書き。


Serverless Frameworkのインストール


前提

$ node -v

v8.10.0

問題なければServerless Frameworkをインストール

$ npm install -g serverless

完了したら以下のコマンドを叩いてみる

$ serverless

Commands
* You can run commands with "serverless" or the shortcut "sls"
.
.
.
(省略)

エイリアスもあるので以下のコマンドでも同じ

$ sls

Commands
* You can run commands with "serverless" or the shortcut "sls"
.
.
.
(省略)

概要っぽいものがずらっと出てくればOK

そのほか、以下のコマンドでバージョン確認など

$ sls -v

1.26.1


IAMの作成

デプロイするのにアクセスキーIDとシークレットアクセスキーが必要なので、それを作成。

IAMユーザー追加して、「AdministratorAccess」のポリシーを付与。

AWSマネジメントコンソールからぽちぽちしました。

厳密には以下のような状態になってます。


  • グループ作成

  • グループに「AdministratorAccess」のポリシーを付与

  • IAMユーザー作成

  • グループにユーザーを追加


AWSCLI


インストール

作成したIAMユーザーの「アクセスキーID」「シークレットアクセスキー」を設定するために、AWSCLIをインストール。

Homebrewでできる。

$ brew install awscli

完了したら以下のコマンドで確認してみる

$ aws --version

aws-cli/1.14.60 Python/3.6.4 Darwin/16.7.0 botocore/1.9.13


プロファイルの設定

以下のコマンドを叩くと、いろいろ聞かれる

$ aws configure

アクセスキーIDを入力してエンター

AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxxxxxxx

シークレットアクセスキーを入力してエンター

AWS Secret Access Key [None]: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

デフォルトで呼び出しを実行する対象のリージョンを入力してエンター(ap-northeast-1 : 東京)

Default region name [None]: ap-northeast-1

デフォルトの出力形式は空のままエンターでスルー

json、text、tableから選ぶが、指定しなければjsonになる

Default output format [None]:

設定内容はこの2つのファイルに保存されてる

~/.aws/

 ├ config

 └ credentials

また、slsコマンドでも設定できるとのこと

serverless.com : AWS - Config Credentials

上記はdefaultの設定をしているが、名前をつけて複数のプロファイルの設定もできる

AWS Documentation : 名前付きプロファイル


プロジェクト

やっと準備できた...のでプロジェクト作っていく


作成

$ mkdir testProject

$ cd testProject
$ sls create -t aws-python3

-t は どのランタイムかを指定で、以下のようなものを指定する



  • aws-nodejs

  • aws-nodejs-typescript

  • aws-python

  • aws-python3


あとはこっちでオプション一覧確認してみてください

serverless.com : AWS - Create

createを実行すると以下のようなファイルが作成される

./

 ├ .gitignore

 ├ handler.py

 └ serverless.yml


  • handler.py


    • Lambdaファンクション。作成時点では HelloWorld 的な中身になってる。



  • serverless.yml


    • 設定ファイル。ファイルの中身やらリファレンスやら読んで適切に設定しよう。




ローカル実行

ドキュメント見ると、Python、Node、Javaならローカルで実行できるっぽい(2018/03/30 時点)


Currently, invoke local only supports the NodeJs, Python & Java runtimes.


コマンド叩いてみる

$ sls invoke local -f hello

{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}}"
}

データも渡せる

$ sls invoke local -f hello -d "hoge"

{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": \"hoge\"}"
}

こんなのも

$ sls invoke local -f hello -d '{"foo":"bar"}'

{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {\"foo\": \"bar\"}}"
}

jsonファイルも


data.json

{

"aaaaa": "AAAAA",
"bbbbb": {
"ccccc": "CCCCC",
"ddddd": "DDDDD"
}
}

$ sls invoke local -f hello -p ./data.json

{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {\"aaaaa\": \"AAAAA\", \"bbbbb\": {\"ccccc\": \"CCCCC\", \"ddddd\": \"DDDDD\"}}}"
}


デプロイ

$ sls deploy

serverless.ymlに書いた設定でデプロイされる


Lambdaの実行

デプロイしたLambda関数を実行する

$ sls invoke -f hello

こっちもデータ渡せる

$ sls invoke -f hello -d "hoge"

$ sls invoke -f hello -d '{"foo":"bar"}'

$ sls invoke -f hello -p ./data.json


リソースの削除

これだけでデプロイしたリソースを削除してくれる

$ sls remove

ローカルにあるのもいらないなら適当に $ rm -r testProject みたいな感じで消しちゃえばいいと思います