Help us understand the problem. What is going on with this article?

[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 みたいな感じで消しちゃえばいいと思います

sugo
バックエンドエンジニアです。 awsでのインフラ構築とtypescriptでのAPI開発をよくやります。 技術に関する調査や検証の備忘録としてqiitaを利用。
cloudpack
Amazon Web Services (AWS) の導入設計、環境構築、運用・保守をサポートするマネジドホスティングサービス
https://cloudpack.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした