・serverless@1.2.1時点でのメモ
・Lambdaプロキシ統合を使用(LAMBDA_PROXY, Lambda Proxy)
serverlessって
AWSのlambda関数とその他サービスの連携を
ローカルで設定して、簡単にアップ出来たりする。
slsコマンドを使う。
インストール
npm install serverless -g
※npmコマンドがまだ入ってない時
npm(Node.js) インストール メモ
プロバイダアカウントの設定
AWSで:IAMユーザの作成
-
IAMユーザを「serverless-admin」という名前で作成。
「serverless-admin」
→アクセス許可
→ポリシーのアタッチ
→「AdministratorAccess」を追加
aws-cliのインストール
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py
pip install awscli
## 確認
aws --version
aws-cliにIAMの資格情報を登録
aws configure
AWS Access Key ID [None]: IAMアクセスキーを入力
AWS Secret Access Key [None]: IAMシークレットキーを入力
Default region name [None]: ap-northeast-1
Default output format [None]:未入力でEnter
serverlessがデフォルトのAWSプロファイルを見れるようにする
cp ~/.aws/config ~/.aws/credentials
サービス作成
mkdir 名称 && cd 名称
sls create -t aws-nodejs
createコマンドで作成されるファイル群
ファイル | 説明 |
---|---|
event.json | 作成した関数をテスト実行するときに使用するテストデータを格納。 |
handler.js | Lamdaにアップする関数を記載する。 |
serverless.yml | デプロイ先(API Gateway)のクラウドの設定 (プロバイダ、プラグイン、イベント) を記載する。 環境変数も定義できる。 |
デプロイするまで
アップする関数を作成
ローカルでテストしたくても、
まず↓のデプロイ設定をしなくちゃだめ!
デプロイ設定
ymlファイルについては別ページにて記載。
とりあえず、ここで言えることはymlファイルは「半角スペースのインデントでネストを表現」するので、そこだけ注意。
例:serverless.yml
service: my-api
provider:
name: aws
runtime: nodejs4.3
region: ap-northeast-1
functions:
fn:
handler: handler.hello
memorySize: 128
timeout: 10
events:
- http:
path: index
method: get
解説
設定 | 説明 |
---|---|
service | API Gatewayの名前を設定 (stage名-service名が登録される) |
provider | 下層にプロバイダの設定を記載 |
provider:name | aws固定でおk |
provider:runtime | 関数で使用する言語設定?デフォでおk |
provider:region | ambdaとAPIGatewayを実装するリージョンを設定。東京なら「ap-northeast-1」 |
functions | 下層に関数に関する設定を記載 |
functions:fn | fnは仮。 LambdaFunction名にしたいものをfn箇所に記載。 (service名-stage名-fnが登録される) |
functions:fn:handler | 実際に動作させるhandler.jsの関数を指定。js名.関数名 |
functions:fn:memorySize | Lambdaのメモリ設定 |
functions:fn:timeout | Lambdaのタイムアウト設定 |
functions:fn:events | 下層にイベントの詳細を記載 |
functions:fn:events[http] | リクエストの詳細を下層に記載。 |
functions:fn:events[http:path] | APIのパスを指定 |
functions:fn:events[http:method] | リクエストメソッドを指定 (記載の際はインデント注意) |
functions:fn:events[http:cors] | corsの有効化を指定 Lambdaプロキシ統合の場合、 OPTIONSメソッドのみの対応。 その他のメソッドはレスポンスヘッダ直書きになる。 (記載の際はインデント注意) |
作成した関数をローカルでテスト
sls invoke local -f Function名
sls invoke local -f Function名 -p jsonファイル名
※localを外せば本番のAPIを実行するよ(お金かかるはず)
オプション | 解説 |
---|---|
-f Function名 | serverless.ymlに記載したFunction名を記載 |
-p jsonファイル | Lambdaに渡すeventを定義したjsonファイルを指定 |
サービスのデプロイ(再デプロイも一緒)
sls deploy
※
デプロイやサービス削除で、S3に対し、ログの作成や更新を行う。
そのログを履歴として、serverlessとの連携を実現している?
S3の料金どないすんねん!
とか後から言われても知らないんだからねっ
サービスの削除
sls remove