狠狠撸

狠狠撸Share a Scribd company logo
serverless
覚
え
て
ほ
し
い
事
サーバレス?
アーキテクチャ?
という世界線があること
一般的なアーキテクチャ
Instances Instances
Elastic Load Balancing
Master DB Slave DB
? LBをフロントに配備
? その下にAppサーバを?
仮想マシンで配備?
2台以上で冗長化
? DBはマスタ/スレーブ?
構成をとって冗長
? 起動時間で課金
やらなきゃいけないコト
? インフラ設計 / 構築?
仮想マシン、ネットワーク、ディスク?
OS、ミドルウェア、アプリ
? 運用管理設計 / 構築?
リソース、スケール、パッチ、バックアップ?
デプロイ、監視、モニタリング、ログ管理
ゼロからやるのはとても大変!!
サーバレスアーキテクチャ
? マネージドサービスを活用
? クライアントは ?
CloudFront と S3 で配信
? サーバは APIGateway と
Lambda で API 化して?
各リソースにアクセス
? 実行数で課金
Lambda
Cloud Front
S3
API Gateway
SNSDynamo DB Cognito
やらなきゃいけないコト
? インフラ設計 / 構築?
仮想マシン、ネットワーク、ディスク?
OS、ミドルウェア、アプリ
? 運用管理設計 / 構築?
リソース、スケール、パッチ、バックアップ?
デプロイ、監視、モニタリング、ログ管理
設定するだけ
開発に?
注力できる世界線
By API Gateway?
& Lambda
API Gateway
Lambdaや既存Webサーバの?
フロントとして使用できる。
? ステージ   ?SDK生成?
? スロットリング ?キャッシュ
develop/production… javascript/android/ios
同時アクセス数の制限とか webサーバ負荷低減
Lambda
イベント駆動
? S3ファイルのアップロード、?
SNS通知、定時実行など
実行環境
? JS(Node) / Java / Python
サーバレスフレームワーク
? Serverless
? Fluct
? Gradle AWS Plugin
api gateway
https://trello.com/b/EX6SxBJJ/serverless
http://docs.serverless.com/v0.1.0/docs
https://github.com/serverless/serverless-slackbot
Getting
Started
インストール
$ npm install serverless -g
※node v4 以上が必要
アクセスキー設定
$ mkdir ~/.aws
$ cat <<EOF > ~/.aws/credentials
[default]
aws_access_key_id={アクセスキー}
aws_secret_access_key={シークレットアクセスキー}
EOF
$ cat <<EOF > ~/.aws/config
[default]
region={リージョン}
EOF
プロジェクト作成
$ serverless (sls) project create
作ってくれるもの
? 初期プロジェクト
? AWS リソース?
S3 Bucket / IAM Policy?Role
プロジェクト作成$ serverless project create
Serverless: Enter a project name: (serverlessN1A2rULrx) akira-test
Serverless: Enter a project domain (used for serverless regional bucket
names): (myapp.com) akira-test.com
Serverless: Enter an email to use for AWS alarms: (me@myapp.com)
Serverless: Select a region for your project:
us-east-1
us-west-2
eu-west-1
> ap-northeast-1
Serverless: Select an AWS profile for your project:
> default
Serverless: Creating a project region bucket on S3:
serverless.apnortheast1.akira-test.com...
Serverless: Creating CloudFormation Stack for your new project (~5 mins)...
Serverless: Successfully created project: akira-test
初期プロジェクト
├── README.md
├── _meta
│?? │
│?? ├── resources
│?? │?? └── s-resources-cf-development-apnortheast1.json
│?? │
│?? │
│?? └── variables
│?? ├── s-variables-common.json
│?? ├── s-variables-development-apnortheast1.json
│?? └── s-variables-development.json
│
├── admin.env
├── package.json
│
└── s-project.json
AWS API Keys
ステージやリージョンなどの定数
プロジェクト設定
CFテンプレートのベース
ステージ、リージョン毎の CFテンプレート
コンポーネント作成
$ sls component create
$ serverless component create
Serverless: Enter a name for your new component: (nodejscomponent)
Serverless: Enter a name for your component's first module: (resource)
Serverless: Enter a name for your module's first function: (show)
Serverless: Successfully created function: "show"
Serverless: Successfully created new serverless module "resource" inside the
component "nodejscomponent"
Serverless: Installing "serverless-helpers" for this component via NPM...
Serverless: Successfully created new serverless component: nodejscomponent
コンポーネント配下の役割
? コンポーネント?
基本はランタイムごとに作成。?
モジュール間でコードの共有が可能。
? モジュール?
関連しているファンクションをまとめる。?
使用するCFリソース定義が可能。
? ファンクション?
lambdaの関数ごとに作成。
コンポーネント
└── nodejscomponent
?? │
? ? ├── lib
?? │?? └── index.js
?? ├── node_modules
?? ├── package.json
?? ├── resource
?? │?? ├── s-module.json
?? │  │
? ? │?? └── show
?? │?? ├── handler.js
 │?? ├── event.json
?? │?? └── s-function.json
?? └── s-component.json
コンポーネント トップディレクトリ
共通ライブラリ
モジュール
ファンクション
メインロジックshow
├ handler.js
├ event.json
└ s-function.json
'use strict’;
// Require Serverless ENV vars
var ServerlessHelpers = require('serverless-helpers-js').loadEnv();
// Require Logic
var lib = require('../../lib');
// Lambda Handler
module.exports.handler = function(event, context) {
lib.respond(event, function(error, response) {
return context.done(error, response);
});
};
ステージ、リージョン毎の CFテンプレート共通ライブラリ、 npm モジュールの読み込み
レスポンス返却
lib/index.js
/**
* Lib
*/
module.exports.respond = function(event, cb) {
var response = {
message: "Your Serverless function ran successfully!"
};
return cb(null, response);
};
API Gatewayshow
├ handler.js
├ event.json
└ s-function.json
{ "name": "show",
"handler": "resource/show/handler.handler",
"timeout": 6,
"memorySize": 1024,
"custom": {
"excludePatterns": [],
"envVars": []
},
"endpoints": [
{"path": "resource/show",
"method": "GET",
"authorizationType": "none",
"apiKeyRequired": false,
"requestParameters": {},
"requestTemplates": {
"application/json": ""
},
"responses": {
"400": {
"statusCode": "400"
},
"default": {
"statusCode": "200",
"responseParameters": {},
"responseModels": {},
"responseTemplates": {
"application/json": “"
}}}}]}
レスポンスの設定
エンドポイントの設定
テスト
$ sls function run
$ sls function run -n {funcName}
? event.json にリクエストを記述する
? 上記コマンドを実行すると、event.jsonを?
リクエストに見立てて実行することができる。
show
├ handler.js
├ event.json
└ s-function.json
? lambda
? API Gateway
? 両方
? AWS Resource
デプロイ
$ sls function deploy
$ sls endpoint deploy
$ sls dash deploy
$ sls resources deploy
$ sls dash deploy
Serverless: Select the functions and endpoints you wish to deploy
location - readlocations
> function - readlocations
endpoint - location - GET
location - deletelocation
function - deletelocation
endpoint - location/{locationId} - DELETE
location - createlocation
function - createlocation
endpoint - location - POST
- - - - -
Deploy
いろんなプラグイン
? Serve?
Simulate API Gateway locally
? CORS?
Adds support for CORS
? CloudFormation Validator?
validating CF template
? Optimizer?
Optimizes code for performance in Lambda
ハマったこと 1?
nodeのバージョン
serverless node v4?
lambda node v0.10.36
node v4 で動く記法でかいて?
デプロイしたら動かなかった。?
ex) class とか使えない
ハマったこと 2
MappingTemplate
?
数値だから""で囲いたくない!?
でも値がnullだと
「"location": , 」になる…。
#set($inputRoot = $input.path('$'))
{
"type": "$inputRoot.type",
"address": "$inputRoot.address",
"location": $inputRoot.location,
"title": "$inputRoot.title",
"description": "$inputRoot.description"
}
ハマったこと3?
Content-Type
CURLでテストすると勝手に
「Content-Type: application/
x-www-form-urlencoded」
がつけられるのでちゃんと自分
で指定しましょう。
その他ハマったときに?
役に立ったリンク集
? s-function.jsonに設定する値?
IntegrationResponse
? responseTemplates で使える関数?
Apache Velocity - VTL Reference
? responseTemplates のJSON参照の書き方?
JSONPath - XPath for JSON
まとめ
serverlessとは
? サーバレスアーキテクチャのframework?
開発、テスト、デプロイ まるっと全部。
? APIGateway、Lambda、?
AWS Resource (CF) まるっと一括管理。
? インフラストラクチャ アズ コード
サーバレース?
アーキテクチャとは
? 仮想マシンをつかわないアーキテクチャ
? 時間単位ではなく実行数単位で課金
? スケール、バックアップなどは任せる
サービス開発や利用統計/分析といった?
ビジネスロジックに専念できる
開発に?
注力できる世界線
サービスに?
注力できる世界線
サーバレス?
アーキテクチャ?
という世界線
thanks

More Related Content

serverless