33
#aws_serverless What’s New with Serverless Keisuke Nishitani (@Keisuke69) Amazon Web Services Japan K.K. Dec 07, 2016

What's new with Serverless

Embed Size (px)

Citation preview

#aws_serverless

What’s New with ServerlessKeisuke Nishitani (@Keisuke69)

Amazon Web Services Japan K.K.Dec 07, 2016

#aws_serverless

ProfileKeisuke NishitaniSpecialist 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 ModelAWSTemplateFormatVersion: '2010-09-09’Transform: AWS::Serverless-2016-10-31Resources: GetHtmlFunction:Type: AWS::Serverless::FunctionProperties:CodeUri: s3://flourish-demo-bucket/todo_list.zipHandler: index.gethtmlRuntime: nodejs4.3Policies: AmazonDynamoDBReadOnlyAccessEvents:GetHtml: Type: ApiProperties: Path: /{proxy+} Method: ANYListTable: Type: AWS::Serverless::SimpleTable

Functions

APIs

Storage

#aws_serverless

AWS Serverless Application ModelAWSTemplateFormatVersion: '2010-09-09’Transform: AWS::Serverless-2016-10-31Resources: GetHtmlFunction:Type: AWS::Serverless::FunctionProperties:CodeUri: s3://flourish-demo-bucket/todo_list.zipHandler: index.gethtmlRuntime: nodejs4.3Policies: AmazonDynamoDBReadOnlyAccessEvents:GetHtml: Type: ApiProperties: Path: /{proxy+} Method: ANYListTable: 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ファンクションから他のサービスに対する呼び出しと時間をトレース

✤ファンクションとサービスの依存関係、関連性を実際に⽬視

✤消えたイベントやスロットルといった状態を確認したり診断したりが簡単に

✤簡単なセットアップ

✤サポートはもう間もなく

簡単セットアップ

AWSLambda

AmazonS3

AmazonDynamoDB

#aws_serverless

AWS X-Rayとのインテグレーション✤ ⾮同期呼び出しの滞留時間とリトライを確認✤ AWSサービスに対する呼び出しパフォーマンスをプロファイリング

⎻ イベント処理の失敗を検知⎻ パフォーマンス問題の特定と修正が簡単に

dwelltimes

servicecalltimes

retries

#aws_serverless

AWS Lambdaの新機能・エンハンス✤ Kinesis IteratorとしてAT_TIMESTAMPをサポート

✤ 対応⾔語としてC#のサポート

✤ デッドレターキュー

#aws_serverless

AT_TIMESTAMPのサポート✤ Kinesisのイテレータとして新たにAT_TIMESTAMPをサポート✤ 任意の時点でのストリームデータ処理が可能✤ データが巻き戻ったり、失われたりすることなく処理の停⽌と開始

AmazonKinesis

LATESTTRIM_HORIZON TIMESTAMP

#aws_serverless

C#サポート✤ファンクションをC#で記述可能✤詳細は後ほど

#aws_serverless

デッドレターキュー(Dead Letter Queue, DLQ)✤ 信頼性の⾼いエンドツーエンドのイベン

ト処理ソリューションの作成が簡単に✤ 3回実⾏しても処理されなかったイベント

をSQSのキューもしくはSNSトピックへと送信

✤ コードに問題が有る場合や、スロットルされる場合もイベントを保存

✤ ファンクション単位✤ すべての⾮同期呼び出しで利⽤可能

AmazonSQS

AmazonSNS

AWSLambda

#aws_serverless

Lambda Everywhere

#aws_serverless

AWS Step Functions✤信頼性⾼く複数のLambdaファンクション

をオーケストレーション

✤3回以上の試⾏

✤⾮同期なファンクションに対するコールバックの追加

✤待ち合わせのハンドリング

✤連鎖的なファンクション実⾏

✤ロングランニングなワークフローのサポート

#aws_serverless

Lambda Bots and Amazon Lex•テキストスピーチ

•ビジネスロジックをLambdaで実⾏

•Facebook、MobileHub

•SlackおよびTwilio とのインテグレーションは近⽇中

I’dliketobookahotel

#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のタイムアウト⎻ ヘッダのみ Signuptojointhepreview!

#aws_serverless

API Gatewayアップデート

#aws_serverless

バイナリのサポート

イメージやオーディオなどのバイナリコンテンツを

サポート

Content-TypeとAcceptヘッダを参照してハンドリング

Lambdaインテグレーションの場合は⾃動的にbase64でエンコード

#aws_serverless

APIドキュメンテーション✤ APIをドキュメント化–コンソール上から直接編集可能✤ Swagger インポート/エクスポート✤ 独⽴した更新とパブリッシュのフローをサポート

Coolfeature:Inheritance!

#aws_serverless

AWS Marketplaceとのインテグレーション✤ APIのマネタイズ

✤ ⾃⾝のAPIをマーケットプレイス上で販売可能

✤ API利⽤者のための簡単な発⾒と調達

✤ コンシューマ/APIキーによるAPI利⽤量のトラッキング

✤ AWSによる⾃動化された請求処理

URLReputationAPIs

SpeechunderstandingAPIs

#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

MonitoringDeploymentIntegrationsCodeLibraries APNSkills

#aws_serverless

Developer ecosystem

Chalice Framework

#aws_serverless

サーバレス個別相談会やります✤ 1⽉12⽇(⽊)にサーバレスに関する個別技術相談会を開催します✤ サーバレスなシステムに関するアーキテクチャ相談✤ 1スロット、45分で7スロット受け付け予定✤ 要事前登録✤ もちろん無料

https://aws-serverless.connpass.com/event/45337/

#aws_serverless