38
What’s New with Serverless Keisuke Nishitani (@Keisuke69) Amazon Web Services Japan K.K. Dec 11, 2016

What's new with Serverless

Embed Size (px)

Citation preview

What’s New with ServerlessKeisuke Nishitani (@Keisuke69)

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

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

サーバレスプラットフォームの機能性

Serverless AppのCI/CD

環境変数のサポート

AWS Serverless Application Model (SAM)✤ サーバレスアプリケーションの構成を定義するための共通⾔語

⎻ CloudFomationのエクステンション

✤ Lambdaベースのアプリケーションをパッケージしてデプロイするためのツール

✤ コンソール上からLambdaのブループリントやファンクションをSAMとしてエクスポート可能

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 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:

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ファンクションから他のサービスに対する呼び出しと時間をトレース

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

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

✤簡単なセットアップ

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

簡単セットアップ

AWSLambda

AmazonS3

AmazonDynamoDB

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

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

dwelltimes

servicecalltimes

retries

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

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

✤ デッドレターキュー

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

AmazonKinesis

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トピックへと送信

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

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

AmazonSQS

AmazonSNS

AWSLambda

Lambda Everywhere

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

をオーケストレーション

✤3回以上の試⾏

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

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

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

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

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

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

•Facebook、MobileHub

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

I’dliketobookahotel

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

API Gatewayアップデート

バイナリのサポート

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

サポート

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

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

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

Coolfeature:Inheritance!

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

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

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

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

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

URLReputationAPIs

SpeechunderstandingAPIs

Developer Portalの⽣成✤ API利⽤者のためのポータルサイトを⽣成✤ API Gatewayで作成したAPIのリストやカタログと開発者のサインアップを

実現するサーバレスなアプリケーションを⽣成✤ S3のStatic Web Site Hosting機能で配信可能✤ https://github.com/awslabs/aws-api-gateway-developer-portal

Developer ecosystem

MonitoringDeploymentIntegrationsCodeLibraries APNSkills

Developer ecosystem

Chalice Framework

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

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