#aws_serverless
What’s New with Serverless
Keisuke Nishitani (@Keisuke69)
Amazon Web Services Japan K.K.
Dec 07, 2016
#aws_serverless
Profile
Keisuke Nishitani
Specialist Solutions Architect, Amazon Web Service Japan K.K
@Keisuke69 Keisuke69
✤ Specialist SA
- Serverless
- Mobile
- DevOps
- Application Service
✤ ソーシャルで⾚ドクロの⼈です
✤ RESTおじさん
✤ 餃⼦の王将エヴァンジェリスト(⾃称)
✤ ⾳楽が好きです、フジロッカーです、今年も⾏きました
✤ ブログ: http://keisuke69.hatenablog.jp/
Keisuke69 Keisuke69Keisuke69x
#aws_serverless
サーバレスプラットフォームの機能性
#aws_serverless
Serverless AppのCI/CD
#aws_serverless
環境変数のサポート
#aws_serverless
AWS Serverless Application Model (SAM)
✤ サーバレスアプリケーションの構成を定義するための共通⾔語
⎻ CloudFomationのエクステンション
✤ Lambdaベースのアプリケーションをパッケージしてデプロイするた
めのツール
✤ コンソール上からLambdaのブループリントや
ファンクションをSAMとしてエクスポート可能
#aws_serverless
AWS Serverless Application Model
AWSTemplateFormatVersion: '2010-09-09’
Transform: AWS::Serverless-2016-10-31
Resources: GetHtmlFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: s3://flourish-demo-bucket/todo_list.zip
Handler: index.gethtml
Runtime: nodejs4.3
Policies: AmazonDynamoDBReadOnlyAccess
Events:
GetHtml: Type: Api
Properties: Path: /{proxy+} Method: ANY
ListTable: Type: AWS::Serverless::SimpleTable
Functions
APIs
Storage
#aws_serverless
AWS Serverless Application Model
AWSTemplateFormatVersion: '2010-09-09’
Transform: AWS::Serverless-2016-10-31
Resources: GetHtmlFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: s3://flourish-demo-bucket/todo_list.zip
Handler: index.gethtml
Runtime: nodejs4.3
Policies: AmazonDynamoDBReadOnlyAccess
Events:
GetHtml: Type: Api
Properties: Path: /{proxy+} Method: ANY
ListTable: Type: AWS::Serverless::SimpleTable
AWSTemplateFormatVersion: '2010-09-09'
Resources:
GetHtmlFunctionGetHtmlPermissionProd:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:invokeFunction
Principal: apigateway.amazonaws.com
FunctionName:
Ref: GetHtmlFunction
SourceArn:
Fn::Sub: arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${ServerlessRestApi}/Prod/ANY/*
ServerlessRestApiProdStage:
Type: AWS::ApiGateway::Stage
Properties:
DeploymentId:
Ref: ServerlessRestApiDeployment
RestApiId:
Ref: ServerlessRestApi
StageName: Prod
ListTable:
Type: AWS::DynamoDB::Table
Properties:
ProvisionedThroughput:
WriteCapacityUnits: 5
ReadCapacityUnits: 5
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- KeyType: HASH
AttributeName: id
GetHtmlFunction:
Type: AWS::Lambda::Function
Properties:
Handler: index.gethtml
Code:
S3Bucket: flourish-demo-bucket
S3Key: todo_list.zip
Role:
Fn::GetAtt:
- GetHtmlFunctionRole
- Arn
Runtime: nodejs4.3
GetHtmlFunctionRole:
Type: AWS::IAM::Role
Properties:
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- sts:AssumeRole
Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
ServerlessRestApiDeployment:
Type: AWS::ApiGateway::Deployment
Properties:
RestApiId:
Ref: ServerlessRestApi
Description: 'RestApi deployment id:127e3fb91142ab1ddc5f5446adb094442581a90d'
StageName: Stage
GetHtmlFunctionGetHtmlPermissionTest:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:invokeFunction
Principal: apigateway.amazonaws.com
FunctionName:
Ref: GetHtmlFunction
SourceArn:
Fn::Sub: arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${ServerlessRestApi}/*/ANY/*
ServerlessRestApi:
Type: AWS::ApiGateway::RestApi
Properties:
Body:
info:
version: '1.0'
title:
Ref: AWS::StackName
paths:
"/{proxy+}":
x-amazon-apigateway-any-method:
x-amazon-apigateway-integration:
httpMethod: ANY
type: aws_proxy
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-
31/functions/${GetHtmlFunction.Arn}/invocations
responses: {}
swagger: '2.0'
REPLACES:
#aws_serverless
Serverless CI/CD pipeline
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接
Pull
GitHub
Source Deploy
CloudFormationCodeBuild
Build
NEW!
#aws_serverless
Serverless CI/CD pipeline
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接
Pull
✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ npm、pip、Javaコンパイル
GitHub
Source Deploy
CloudFormationCodeBuild
Build
NEW!
#aws_serverless
Serverless CI/CD pipeline
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull
✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ Npm、pip、Javaコンパイル
✤ AWS CloudFormationで完成したアプリをデプロイ
GitHub
Source Deploy
CloudFormationCodeBuild
Build
NEW!
#aws_serverless
ICYMI: CloudWatchの新機能
✤ Percentiles
⎻ あらゆるメトリクスで
パーセンタイル統計を
サポート
✤ Metrics-to-Logs
⎻ メトリクスのポイント
から直接CloudWatch
logsに⾶べるように
#aws_serverless
AWS X-Rayとのインテグレーション
✤AWS X-Rayを⽤いることでサービス間の
イベントの遷移を可視化
✤Lambdaファンクションから他のサービス
に対する呼び出しと時間をトレース
✤ファンクションとサービスの依存関係、関
連性を実際に⽬視
✤消えたイベントやスロットルといった状態
を確認したり診断したりが簡単に
✤簡単なセットアップ
✤サポートはもう間もなく
簡単セットアップ
AWS
Lambda
Amazon
S3
Amazon
DynamoDB
#aws_serverless
AWS X-Rayとのインテグレーション
✤ ⾮同期呼び出しの滞留時間とリトライを確認
✤ AWSサービスに対する呼び出しパフォーマンスをプロファイリング
⎻ イベント処理の失敗を検知
⎻ パフォーマンス問題の特定と修正が簡単に
dwell
times
service	call	
times
retries
#aws_serverless
AWS Lambdaの新機能・エンハンス
✤ Kinesis IteratorとしてAT_TIMESTAMPをサポート
✤ 対応⾔語としてC#のサポート
✤ デッドレターキュー
#aws_serverless
AT_TIMESTAMPのサポート
✤ Kinesisのイテレータとして新たにAT_TIMESTAMPをサポート
✤ 任意の時点でのストリームデータ処理が可能
✤ データが巻き戻ったり、失われたりすることなく処理の停⽌と開始
Amazon	Kinesis
LATESTTRIM_HORIZON TIMESTAMP
#aws_serverless
C#サポート
✤ファンクションをC#で記述可能
✤詳細は後ほど
#aws_serverless
デッドレターキュー(Dead Letter Queue, DLQ)
✤ 信頼性の⾼いエンドツーエンドのイベン
ト処理ソリューションの作成が簡単に
✤ 3回実⾏しても処理されなかったイベント
をSQSのキューもしくはSNSトピックへ
と送信
✤ コードに問題が有る場合や、スロットル
される場合もイベントを保存
✤ ファンクション単位
✤ すべての⾮同期呼び出しで利⽤可能 Amazon
SQS
Amazon
SNS
AWS
Lambda
#aws_serverless
Lambda Everywhere
#aws_serverless
AWS Step Functions
✤信頼性⾼く複数のLambdaファンクション
をオーケストレーション
✤3回以上の試⾏
✤⾮同期なファンクションに対するコール
バックの追加
✤待ち合わせのハンドリング
✤連鎖的なファンクション実⾏
✤ロングランニングなワークフローのサポー
ト
#aws_serverless
Lambda Bots and Amazon Lex
•テキストスピー
チ
•ビジネスロジッ
クをLambdaで実
⾏
•Facebook、
MobileHub
•Slackおよび
Twilio とのインテ
グレーションは
近⽇中
I’d	like	to	book	a	hotel
#aws_serverless
AWS Snowball Edge
✤オンプレからAWSへの⾼速・シ
ンプル・セキュアなデータ移⾏
✤100TBクラスのキャパシティ
✤ローカルでLambdaファンクショ
ンを実⾏可能
✤マルチメディアコンテンツの変
換、リアルタイムな圧縮、監査
#aws_serverless
AWS Greengrass(Preview)
✤AWSの処理をデバイス上でも
✤低遅延、ニアリアルタイム
✤デバイス上でLambdaファンクショ
ンを実⾏
✤AWS IoTを通じたクラウドストレー
ジとコンピュート
✤必要スペック:1GHz、 128MB、
x86/ARM、Linux
#aws_serverless
Lambda@Edge(Preview)
✤低レイテンシなリクエスト/レス
ポンスのカスタマイズ
✤Viewerとオリジンのイベントを
サポート
✤プレビューでの制限
⎻ Node.jsのみ
⎻ 最⼤50msのタイムアウト
⎻ ヘッダのみ
Sign	up	to	join	the	preview!
#aws_serverless
API Gatewayアップデート
#aws_serverless
バイナリのサポート
イメージやオー
ディオなどのバイ
ナリコンテンツを
サポート
Content-TypeとAcceptヘッダを参照してハンドリング
Lambdaインテグレーションの場合は
⾃動的にbase64でエンコード
#aws_serverless
APIドキュメンテーション
✤ APIをドキュメント化–コンソール上から直接編集可能
✤ Swagger インポート/エクスポート
✤ 独⽴した更新とパブリッシュのフローをサポート
Cool	feature:	
Inheritance!
#aws_serverless
AWS Marketplaceとのインテグレーション
✤ APIのマネタイズ
✤ ⾃⾝のAPIをマーケットプレイス上で販
売可能
✤ API利⽤者のための簡単な発⾒と調達
✤ コンシューマ/APIキーによるAPI利⽤量
のトラッキング
✤ AWSによる⾃動化された請求処理
URL	Reputation	APIs
Speech	understanding	
APIs
#aws_serverless
Developer Portalの⽣成
✤ API利⽤者のためのポータルサイトを⽣成
✤ API Gatewayで作成したAPIのリストやカタログと開発者のサインアップを
実現するサーバレスなアプリケーションを⽣成
✤ S3のStatic Web Site Hosting機能で配信可能
✤ https://github.com/awslabs/aws-api-gateway-developer-portal
#aws_serverless
Developer ecosystem
MonitoringDeploymentIntegrationsCode	Libraries APN	Skills
#aws_serverless
Developer ecosystem
Chalice
Framework
#aws_serverless
サーバレス個別相談会やります
✤ 1⽉12⽇(⽊)にサーバレスに関する個別技術相談会を開催します
✤ サーバレスなシステムに関するアーキテクチャ相談
✤ 1スロット、45分で7スロット受け付け予定
✤ 要事前登録
✤ もちろん無料
https://aws-serverless.connpass.com/event/45337/
#aws_serverless

What's new with Serverless