15
Serverlessでサイト監視 Shigeyuki Azuchi HAW International, Inc 2016.03.21 JAWS-UG 福岡:また濃い目にAWSの話をしてみよう

Serverlessでサイト監視

Embed Size (px)

Citation preview

Serverlessでサイト監視

Shigeyuki AzuchiHAW International, Inc

2016.03.21 

JAWS-UG 福岡:また濃い目にAWSの話をしてみよう

Serverless Framework

Amazon API Gateway AWSLambda

API Gateway

EC2やLambda、任意のアプリケーション、バックエン

ドサービスにアクセスするためのGatewayを提供する

サービス。Amazon API Gateway

● スケーラブルなAPIの提供

● APIのステージ及びバージョンを管理

● APIをコールするSDKの自動生成

Android , iOS , JavaScript

● API実行状況のモニタリングとマネタイズ

● IAMを使った認証・認可

Lambda

AWSLambda

実行プラットフォームを気にすることなく、イベントをト

リガーにして任意のアプリケーションコードを実行でき

るサーバレスなコード実行プラットフォーム。

● コードの実行時間で課金

● JavaScript、Java、Pythonをサポート

Rubyの対応が待ち望まれる

● cronライクなスケジュール実行もサポート

● ユーザがサーバ管理する必要がない

ということで

AWSLambda

Amazon API Gateway

組み合わせればサーバレスな

● APIサービス

● Webアプリケーション

を構築できる

Serverless Frameworkでできること

● Lambda Functionの実行

(local,remote)

● Lambda Functionのデプロイ

● API Gatewayのデプロイ

● ステージ(dev,prod..)のサポート

● Cloud Formationを使ったリソース管理

etc...

Serverlessでサイト監視

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テンプレート等が記載しにくい