serverlessでサイト監視
TRANSCRIPT
API Gateway
EC2やLambda、任意のアプリケーション、バックエン
ドサービスにアクセスするためのGatewayを提供する
サービス。Amazon API Gateway
● スケーラブルなAPIの提供
● APIのステージ及びバージョンを管理
● APIをコールするSDKの自動生成
Android , iOS , JavaScript
● API実行状況のモニタリングとマネタイズ
● IAMを使った認証・認可
Lambda
AWSLambda
実行プラットフォームを気にすることなく、イベントをト
リガーにして任意のアプリケーションコードを実行でき
るサーバレスなコード実行プラットフォーム。
● コードの実行時間で課金
● JavaScript、Java、Pythonをサポート
Rubyの対応が待ち望まれる
● cronライクなスケジュール実行もサポート
● ユーザがサーバ管理する必要がない
Serverless Frameworkでできること
● Lambda Functionの実行
(local,remote)
● Lambda Functionのデプロイ
● API Gatewayのデプロイ
● ステージ(dev,prod..)のサポート
● Cloud Formationを使ったリソース管理
etc...
Serverless Frameworkの構成
_ .env
_ admin.env
_ package.json
_ s-project.json
_ s-resources-cf.json
_ meta
|__resources
|__s-resources-cf-dev-apnortheast1.json
|__variables
|__s-variables-common.json
|__s-variables-dev.json
|__s-variables-dev-apnortheast1.json
←ローカルでテスト実行時の環境情報
←アクセスキーとシークレットアクセスキーを設定
←依存ライブラリを管理
←プロジェクト情報を記述
←CloudFrontのテンプレートファイル
ステージ毎に適用されたテンプレート情報をストア
ComponentとFunctionの構成
_ sites
|__lib
|__index.json
|__node_modules
...
|__create
|__event.json
|__handler.js
|__s-function.json
|__package.json
|__s-component.json
|__s-template.json
←Component(RESTのResource)
←Function間の共通処理を記述
←テスト実行時に使用するリクエストデータを定義
←Compoentの依存ライブラリ
←Function(Resourceに対するMethod)
←Lambda Function
←デプロイするAPI Gateway と Lambdaの設定
←Componentの依存ライブラリ等を定義
←Component情報を設定
←テンプレートデータを定義
s-function.json
{
"name": "create",
"customName": false,
"customRole": false,
"handler": "create/handler.handler",
"timeout": 6,
"memorySize": 128,
"custom": {
"excludePatterns": [],
"envVars": []
},
...
Lambda Functionを定義
s-function.json
"endpoints": [{
"path": "sites",
"method": "POST",
"type": "AWS",
"authorizationType": "none",
"apiKeyRequired": false,
"requestParameters": {},
"requestTemplates": {
"application/x-www-form-urlencoded": {
"data": "$input.json('$')",
"stage": "$context.stage"
}
}
APIのResourceとMethodを定義
RequestのMapping Templateを定義
s-function.json
"responses": {
"default": {
"statusCode": "302",
"responseParameters": {
"method.response.header.Location":
"integration.response.body.location"
}
}
}
コードが気になる方はWebで(まだ途中です)
https://github.com/azuchi/serverless-web-monitor
ResponseのMapping Templateを設定
302のリダイレクトにも 対応
デプロイとログ
● sls dash deployで
インタラクティブにデプロイ
ライブラリや依存モジュールを丸ごとデプロイしてくれる
ステージやバージョンも考慮!
● sls function logs -t
CloudWatch Logsに格納されるログを
お手軽に確認できる!
Plugins
● OfflineAPI GatewayとLambdaの実行をローカルでエミュレート
● AlertingLambda FunctionにCloud Watchのアラームを設定
● Cloud Formation ValidatorCloud Formationのテンプレートファイルを検証
● Prune古いバージョンのLambda Functionを削除
● TestServerless Frameworkのテストツール
● OptimizerLambda Functionを最適化し実行パフォーマンスを向上
Serverless Framework使ってみて
● API Gateway と Lambdaの構成管理API Gatewayの設定やLambdaの設置・コードをコードで管理できて便利!
Serverless以外でもSwaggerとか構成管理ツールの導入が望ましい
● Cloud Formationを使ったリソースの構成管理サーバレスなアプリケーションのインフラもコードで管理!
● デプロイまでサポートステージやバージョニング含めデプロイが可能!
● 意識することなくスケーラブル
● コード(ビジネスロジック)に集中できる
● HTMLベースのテンプレートは設定しづらい定義がJSONベースなのでHTMLテンプレート等が記載しにくい