SlideShare a Scribd company logo
What’s New with Serverless
Keisuke Nishitani (@Keisuke69)
Amazon Web Services Japan K.K.
Dec 11, 2016
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
サーバレスプラットフォームの機能性
Serverless AppのCI/CD
環境変数のサポート
AWS Serverless Application Model (SAM)
✤ サーバレスアプリケーションの構成を定義するための共通⾔語
⎻ CloudFomationのエクステンション
✤ Lambdaベースのアプリケーションをパッケージしてデプロイするた
めのツール
✤ コンソール上からLambdaのブループリントや
ファンクションをSAMとしてエクスポート可能
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 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:
Serverless CI/CD pipeline
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接
Pull
GitHub
Source Deploy
CloudFormationCodeBuild
Build
NEW!
Serverless CI/CD pipeline
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接
Pull
✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ npm、pip、Javaコンパイル
GitHub
Source Deploy
CloudFormationCodeBuild
Build
NEW!
Serverless CI/CD pipeline
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull
✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ Npm、pip、Javaコンパイル
✤ AWS CloudFormationで完成したアプリをデプロイ
GitHub
Source Deploy
CloudFormationCodeBuild
Build
NEW!
ICYMI: CloudWatchの新機能
✤ Percentiles
⎻ あらゆるメトリクスで
パーセンタイル統計を
サポート
✤ Metrics-to-Logs
⎻ メトリクスのポイント
から直接CloudWatch
logsに⾶べるように
AWS X-Rayとのインテグレーション
✤AWS X-Rayを⽤いることでサービス間の
イベントの遷移を可視化
✤Lambdaファンクションから他のサービス
に対する呼び出しと時間をトレース
✤ファンクションとサービスの依存関係、関
連性を実際に⽬視
✤消えたイベントやスロットルといった状態
を確認したり診断したりが簡単に
✤簡単なセットアップ
✤サポートはもう間もなく
簡単セットアップ
AWS
Lambda
Amazon
S3
Amazon
DynamoDB
AWS X-Rayとのインテグレーション
✤ ⾮同期呼び出しの滞留時間とリトライを確認
✤ AWSサービスに対する呼び出しパフォーマンスをプロファイリング
⎻ イベント処理の失敗を検知
⎻ パフォーマンス問題の特定と修正が簡単に
dwell
times
service	call	
times
retries
AWS Lambdaの新機能・エンハンス
✤ Kinesis IteratorとしてAT_TIMESTAMPをサポート
✤ 対応⾔語としてC#のサポート
✤ デッドレターキュー
AT_TIMESTAMPのサポート
✤ Kinesisのイテレータとして新たにAT_TIMESTAMPをサポート
✤ 任意の時点でのストリームデータ処理が可能
✤ データが巻き戻ったり、失われたりすることなく処理の停⽌と開始
Amazon	Kinesis
LATESTTRIM_HORIZON TIMESTAMP
C#サポート
✤ 新しい⾔語としてC#をサポート
⎻ .NET Core で動作
⎻ Win32 API や COMコンポーネントは呼べません
✤ Visual Studio に統合された環境を利⽤可能
⎻ AWS Tools for Visual Studio 最新版をインストールしてください
⎻ dotnet CLIベースの開発も可能
✤ Context等の基本的なものから、 シリアライザや各サービスのイベン
トオブジェクトなど3種類のライブラリを提供
⎻ Nugetでインストール
17
Lambda関数ハンドラ(C#)
✤ クラスの静的またはインスタンス メソッドとして定義
✤ デフォルトではSystem.IO.Stream型をサポート
⎻ それ以外の型はシリアライザが必要
✤ シグニチャの例
⎻ public Stream RunLambda(Stream inputStream);
⎻ public string RunLambda(string inputString);
⎻ public MyResponse RunLambda(MyRequest request);
⎻ POCO in(イベント オブジェクトを含む), POCO out
⎻ public void RunLambda(MyRequest request);
⎻ public async Task<MyResponse> RunLambda(...);
⎻ ⾮同期呼び出し
⎻ 但し、Labmdaは戻り値を無視する(void にすることも可能だがasync voidは未サポート)
returnType handler-name(inputType input, ILambdaContext context) { ... }
AWS Lambda C# Project Template
AWS Labmda C# Blue Print
Publish to AWS Lambda
ローカル環境でLambda C#コードのデバッグ
デッドレターキュー(Dead Letter Queue, DLQ)
✤ 信頼性の⾼いエンドツーエンドのイベン
ト処理ソリューションの作成が簡単に
✤ 3回実⾏しても処理されなかったイベント
をSQSのキューもしくはSNSトピックへ
と送信
✤ コードに問題が有る場合や、スロットル
される場合もイベントを保存
✤ ファンクション単位
✤ すべての⾮同期呼び出しで利⽤可能 Amazon
SQS
Amazon
SNS
AWS
Lambda
Lambda Everywhere
AWS Step Functions
✤信頼性⾼く複数のLambdaファンクション
をオーケストレーション
✤3回以上の試⾏
✤⾮同期なファンクションに対するコール
バックの追加
✤待ち合わせのハンドリング
✤連鎖的なファンクション実⾏
✤ロングランニングなワークフローのサポー
ト
Lambda Bots and Amazon Lex
•テキストスピー
チ
•ビジネスロジッ
クをLambdaで実
⾏
•Facebook、
MobileHub
•Slackおよび
Twilio とのインテ
グレーションは
近⽇中
I’d	like	to	book	a	hotel
AWS Snowball Edge
✤オンプレからAWSへの⾼速・シ
ンプル・セキュアなデータ移⾏
✤100TBクラスのキャパシティ
✤ローカルでLambdaファンクショ
ンを実⾏可能
✤マルチメディアコンテンツの変
換、リアルタイムな圧縮、監査
AWS Greengrass(Preview)
✤AWSの処理をデバイス上でも
✤低遅延、ニアリアルタイム
✤デバイス上でLambdaファンクショ
ンを実⾏
✤AWS IoTを通じたクラウドストレー
ジとコンピュート
✤必要スペック:1GHz、 128MB、
x86/ARM、Linux
Lambda@Edge(Preview)
✤低レイテンシなリクエスト/レス
ポンスのカスタマイズ
✤Viewerとオリジンのイベントを
サポート
✤プレビューでの制限
⎻ Node.jsのみ
⎻ 最⼤50msのタイムアウト
⎻ ヘッダのみ
Sign	up	to	join	the	preview!
API Gatewayアップデート
バイナリのサポート
イメージやオー
ディオなどのバイ
ナリコンテンツを
サポート
Content-TypeとAcceptヘッダを参照してハンドリング
Lambdaインテグレーションの場合は
⾃動的にbase64でエンコード
APIドキュメンテーション
✤ APIをドキュメント化–コンソール上から直接編集可能
✤ Swagger インポート/エクスポート
✤ 独⽴した更新とパブリッシュのフローをサポート
Cool	feature:	
Inheritance!
AWS Marketplaceとのインテグレーション
✤ APIのマネタイズ
✤ ⾃⾝のAPIをマーケットプレイス上で販
売可能
✤ API利⽤者のための簡単な発⾒と調達
✤ コンシューマ/APIキーによるAPI利⽤量
のトラッキング
✤ AWSによる⾃動化された請求処理
URL	Reputation	APIs
Speech	understanding	
APIs
Developer Portalの⽣成
✤ API利⽤者のためのポータルサイトを⽣成
✤ API Gatewayで作成したAPIのリストやカタログと開発者のサインアップを
実現するサーバレスなアプリケーションを⽣成
✤ S3のStatic Web Site Hosting機能で配信可能
✤ https://github.com/awslabs/aws-api-gateway-developer-portal
Developer ecosystem
MonitoringDeploymentIntegrationsCode	Libraries APN	Skills
Developer ecosystem
Chalice
Framework
サーバレス個別相談会やります
✤ 1⽉12⽇(⽊)にサーバレスに関する個別技術相談会を開催します
✤ サーバレスなシステムに関するアーキテクチャ相談
✤ 1スロット、45分で7スロット受け付け予定
✤ 要事前登録
✤ もちろん無料
https://aws-serverless.connpass.com/event/45337/
What's new with Serverless

More Related Content

What's new with Serverless