SlideShare a Scribd company logo
Application Lifecycle Management
in a Serverless World
Keisuke Nishitani (@Keisuke69)
Amazon Web Services Japan K.K.
Apr 25, 2017
Who am I
Keisuke Nishitani
Specialist Solutions Architect, Serverless
Amazon Web Service Japan K.K
@Keisuke69 Keisuke69
✤ スタートアップ担当 => Web系担当 =>サーバレスのスペシャリストSA
✤ RESTおじさん
✤ 餃⼦の王将エヴァンジェリスト(⾃称)
✤ ⾳楽が好きです、フジロッカーです、今年も⾏きます
✤ ブログ: http://keisuke69.hatenablog.jp/
Keisuke69 Keisuke69Keisuke69x
What is Serverless?
Serverless = No servers to manage and scale
No	servers to	provision	or	manage Scales	with	usage
Never	pay	for	idle
Availability	and	fault	tolerance	
built	in
Serverlessとは
サーバレスなアプリケーションモデル
イベントソース ファンクション サービスなど
Java
C#
Node.js
Python
λ
イベント
S3にオブジェクトが作られる
Kinesisにストリームデータが保存される
HTTPSによるリクエスト
etc...
Amazon S3 Amazon
DynamoDB
Amazon
Kinesis
AWS
CloudFormation
AWS
CloudTrail
Amazon
CloudWatch
Amazon SNSAmazon
SES
Amazon
API Gateway
Amazon
Cognito
AWS
IoT
Amazon
Alexa
Cron events
DATA	STORES ENDPOINTS
REPOSITORIES EVENT/MESSAGE	SERVICES
AWS Lambdaと連携するイベントソース
Amazon
Config
Amazon
Aurora
続々と追加中!
AWSのサーバレスオファリング
AWS LambdaAmazon API Gateway
Amazon DynamoDB
Amazon Kinesis Amazon Mobile Analytics
Amazon SNS
Amazon Cognito
AWS IoT
Amazon S3 Amazon Elastic Transcoder
AWS CloudWatch
AWS CloudTrail
Amazon SES
Amazon Machine Learning
Amazon Route53Amazon SQS
AWS Step
Functions
Amazon
SWF
Amazon
Pinpoint*
Amazon
Athena
ユースケース
Web
Applications
Data
Processing
ChatbotsBackends
</></>
Amazon
Alexa
Autonomous
IT
• Static	websites
• Complex	web	
apps
• Packages	for	
Flask	and	
Express
• Real	time
• MapReduce
• Batch
• Powering	
chatbot logic
• Apps	&	services
• Mobile
• IoT
• Powering	voice-
enabled	apps
• Alexa	Skills	Kit
• Policy	engines
• Extending	AWS	
services
• Infrastructure	
management
So, why are we here today?
Application Lifecycle Management
サーバレスアプリケーション開発における
ライフサイクルマネジメント
✤ 対象
⎻ サーバレスアプリケーションのコード
⎻ サーバレスアプリケーションを構成するリソース
✤ やること
⎻ コードをどのようにビルド、テストしてデプロイするか
⎻ リソースをどのように構成管理してプロビジョニングするか
サーバレスアプリケーション開発における
ライフサイクルマネジメント
✤ 対象
⎻ サーバレスアプリケーションのコード => Lambdaファンクション
⎻ サーバレスアプリケーションを構成するリソース => AWSリソース
✤ やること
⎻ コードをどのようにビルド、テストしてデプロイするか
⎻ リソースをどのように構成管理してプロビジョニングするか
サーバレスアプリケーション開発における
ライフサイクルマネジメント
✤ 対象
⎻ サーバレスアプリケーションのコード => Lambdaファンクション
⎻ サーバレスアプリケーションを構成するリソース => AWSリソース
✤ やること
⎻ Lambdaファンクションをどのようにビルド、テストしてデプロイするか
⎻ AWSリソースをどのように構成管理してプロビジョニングするか
サーバレスアプリケーション開発における
ライフサイクルマネジメント
✤ 対象
⎻ サーバレスアプリケーションのコード => Lambdaファンクション
⎻ サーバレスアプリケーションを構成するリソース => AWSリソース
✤ やること
⎻ Lambdaファンクションをどのようにビルド、テストしてデプロイするか
⎻ AWSリソースをどのように構成管理してプロビジョニングするか
サーバレスといっても特別なことはなく、通常のシステムと同じ
開発ワークフロー構築における考慮点
✤ 独⽴した複数の環境をどのように構築・維持するか
✤ どのように⾃動化を進めるか
✤ プロビジョニングやコンフィギュレーションが必要なAWSリソースは
どれか、そしてそれをどうやるか
✤ 特に開発途中において、アプリケーションやアーキテクチャのテスト
と検証をどのように⾏っていくか
テスト/検証
✤ やりたいことは⾃分のコードが正しいことの確認
⎻ シンタックスの問題がないか
⎻ 企業のフォーマット標準にあっているか
⎻ コンパイルが通るか
⎻ ユニットテストを通じて⼗分にテストされているか
✤ サーバレスで確認したいこと
⎻ 他のコンポーネントと関連するものとしてファンクションが動くか
⎻ アップストリーム、ダウンストリームのエラーを適切にハンドルできるか
✤ アプリケーション/インフラストラクチャ全体で確認したいこと
⎻ エンドツーエンドのテスト
⎻ セキュリティのベストプラクティスに従っているか
⎻ スケーラビリティのハンドリング
チェックリスト
✤ アプリケーションやインフラリソースのモデル化
✤ 複数環境のコンフィグと管理
✤ ⼿動によるデプロイメント
✤ デリバリプロセスの⾃動化(CI/CD)
✤ デバッグとモニタリング
チェックリスト
✤ アプリケーションやインフラリソースのモデル化
✤ 複数環境のコンフィグと管理
✤ ⼿動によるデプロイメント
✤ デリバリプロセスの⾃動化(CI/CD)
✤ デバッグとモニタリング
Author Package Test Deploy
サーバレスアプリのライフサイクルマネジメント
Author Package Test Deploy
AWS	Lambda	console
サーバレスアプリのライフサイクルマネジメント
Author Package Test Deploy
AWS	Lambda	console
IDE	plugins
サーバレスアプリのライフサイクルマネジメント
Author Package Test Deploy
AWS	Lambda	console
IDE	plugins
3rd party	toolsText	editor
サーバレスアプリのライフサイクルマネジメント
Author Package Test Deploy
AWS	Lambda	console
IDE	plugins
3rd party	toolsText	editor
サーバレスアプリのライフサイクルマネジメント
サーバレスアプリのライフサイクルマネジメント
✤ 数⼗、数百のAWSリソースから構成される場合はどうするか?
⎻ Lambdaファンクションだけでなく、関連するAWSリソースも
✤ 開発チームが巨⼤な場合はどうするか?
⎻ マネジメントコンソールを使⽤したプロセスはありえない
Author Package Test Deploy
AWS Serverless Application Model
(powered by CloudFormation)
AWS CloudFormation
✤ 関連するAWSリソースのコレクションの
プロビジョンと管理
✤ JSON / YAMLで環境を記述
⎻ テキストファイルなのでバージョン管理システ
ムにも登録可能
⎻ このテンプレートを使って何個でも同じ環境を
つくれる
✤ アプリケーション=CloudFormation stack
✤ テンプレートファイルがインプットであ
り、プロビジョニングされたAWSリソー
スがアウトプット
AWS Serverless Application Model (SAM)
✤ サーバレスアプリに最適化したAWS CloudFomationの拡張
✤ サーバレスアプリ⽤の新たなリソースタイプ
⎻ 関数
⎻ API
⎻ テーブル
✤ CloudFormationがサポートしているすべてのものをサポート
✤ 既存のファンクションをSAMテンプレートとしてエクスポート可能
✤ オープンな仕様(Apache 2.0)
SAMテンプレート
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
SAMテンプレート
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
AWS SAMのテンプレートであり、
変換が必要であると宣⾔
SAMテンプレート
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
必要なアクセス権やランタイム、コ
ードの場所などを指定してLambda
ファンクションを定義
SAMテンプレート
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
イベントの定義
この例ではAPIとして⽤意するURIや
、HTTPメソッドを定義
SAMテンプレート
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
DynamoDBのテーブルを作成
変換後のテンプレート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'
SAMで利⽤可能なリソースタイプ
✤ AWS::Serverless::Function
⎻ Lambdaファンクション
⎻ コードだけでなくメモリなどファンクション⾃体の設定
⎻ イベントソースの設定
SAMで利⽤可能なリソースタイプ
✤ AWS::Serverless::Function
⎻ Lambdaファンクション
⎻ コードだけでなくメモリなどファンクション⾃体の設定
⎻ イベントソースの設定
✤ AWS::Serverless::Api
⎻ Amazon API Gatewayを利⽤したAPIの作成
⎻ HTTPSのエンドポイントを通じて呼び出されるリソースとメソッドを定義
⎻ AWS::Serverless::FunctionでAPI Gatewayをイベントソースとする定義をしていると⾃動で作成される
⎻ Swaggerを利⽤してより細かく管理する場合はこの定義が必須
SAMで利⽤可能なリソースタイプ
✤ AWS::Serverless::Function
⎻ Lambdaファンクション
⎻ コードだけでなくメモリなどファンクション⾃体の設定
⎻ イベントソースの設定
✤ AWS::Serverless::Api
⎻ Amazon API Gatewayを利⽤したAPIの作成
⎻ HTTPSのエンドポイントを通じて呼び出されるリソースとメソッドを定義
⎻ AWS::Serverless::FunctionでAPI Gatewayをイベントソースとする定義をしていると⾃動で作成される
⎻ Swaggerを利⽤してより細かく管理する場合はこの定義が必須
✤ AWS::Serverless::SimpleTable
⎻ DynamoDBのシンプルなテーブルを作成
⎻ 細かい設定が必要な場合は通常の AWS::DynamoDB::Tableを使⽤して定義する
チェックリスト
✤ アプリケーションやインフラリソースのモデル化
✤ 複数環境のコンフィグと管理
✤ ⼿動によるデプロイメント
✤ デリバリプロセスの⾃動化(CI/CD)
✤ デバッグとモニタリング
複数環境の構成
✤ アプリケーションを構築、テスト、実⾏するにはリソースごと分けた異な
る環境を⽤意するのがよい
✤ Why?
⎻ リソースの利⽤が被らないようにするため
⎻ ユーザ影響なく新規コードを「安全」にテストするため
⎻ インフラ構成の変更を「安全」にテストするため
✤ How?
⎻ AWSアカウントをわける
⎻ Infrastracture as a Codeのツールを活⽤する
⎻ アプリケーションのデリバリとテストを⾃動化する
複数環境を構成する2種類の⽅法
✤同⼀アカウント、別スタック
⎻ メリット
⎻ リソースの管理が簡単
⎻ 管理/モニタリングツールを通じた容易
な可視化
⎻ デメリット
⎻ パーミッションやアクセス権の分離が
難しい
⎻ 数が増えると⾒通しが悪くなる
✤複数アカウント
⎻ メリット
⎻ パーミッションとアクセス権の分離が
保証される
⎻ 利⽤量をコントロールするためのアカ
ウントごとのリソース制限
⎻ デメリット
⎻ 複数アカウントの管理とコントロール
のオーバーヘッド
複数環境を構成する2種類の⽅法
✤同⼀アカウント、別スタック
⎻ メリット
⎻ リソースの管理が簡単
⎻ 管理/モニタリングツールを通じた容易
な可視化
⎻ デメリット
⎻ パーミッションやアクセス権の分離が
難しい
⎻ 数が増えると⾒通しが悪くなる
✤複数アカウント
⎻ メリット
⎻ パーミッションとアクセス権の分離が
保証される
⎻ 利⽤量をコントロールするためのアカ
ウントごとのリソース制限
⎻ デメリット
⎻ 複数アカウントの管理とコントロール
のオーバーヘッド
⼩規模なチーム/個⼈におすすめ ⼤規模なチーム/企業におすすめ
複数環境を構成する2種類の⽅法
✤同⼀アカウント、別スタック
⎻ メリット
⎻ リソースの管理が簡単
⎻ 管理/モニタリングツールを通じた容易
な可視化
⎻ デメリット
⎻ パーミッションやアクセス権の分離が
難しい
⎻ 数が増えると⾒通しが悪くなる
✤複数アカウント
⎻ メリット
⎻ パーミッションとアクセス権の分離が
保証される
⎻ 利⽤量をコントロールするためのアカ
ウントごとのリソース制限
⎻ デメリット
⎻ 複数アカウントの管理とコントロール
のオーバーヘッド
⼩規模なチーム/個⼈におすすめ ⼤規模なチーム/企業におすすめ
AWS Organizationsの利⽤検討を
AWS Organizations
✤ 複数のAWSアカウントを運⽤するためのサービス
✤ APIを使⽤してAWSアカウントを作成可能
✤ 追加コストなし。
1つのテンプレートを複数環境にデプロイ
λ
λ
λ
1つのテンプレート
バージョン管理
Git etc…
Production
Staging
Testing
環境ごとにデプロイ
チェックリスト
✤ アプリケーションやインフラリソースのモデル化
✤ 複数環境のコンフィグと管理
✤ ⼿動によるデプロイメント
✤ デリバリプロセスの⾃動化(CI/CD)
✤ デバッグとモニタリング
パッケージとデプロイに関するAWSコマンド
✤ AWS SAMのリリースにともない以下のコマンドが追加
✤ aws cloudformation package
⎻ デプロイパッケージの作成(.zip file)
⎻ Amazon S3バケットへのデプロイパッケージのアップロード
⎻ S3 URIによるCodeUriプロパティの追加
✤ aws cloudformation deploy
⎻ CloudFormationの‘CreateChangeSet’ APIをコール
⎻ CloudFormationの‘ExecuteChangeSet’ APIをコール
チェックリスト
✤ アプリケーションやインフラリソースのモデル化
✤ 複数環境のコンフィグと管理
✤ ⼿動によるデプロイメント
✤ デリバリプロセスの⾃動化(CI/CD)
✤ デバッグとモニタリング
AWS CodePipeline
✤ ⾼速かつ信頼性の⾼いアプリケーション更新のためのサービス
✤ 独⾃のワークフローを定義
⎻ ソースコードチェック
⎻ ビルド
⎻ テスト
⎻ デプロイ
✤ ソフトウェアのリリースプロセスをモデル化し可視化
✤ Git pushごとにビルド、テスト、デプロイ
✤ AWSサービスやサードパーティツールとのインテグレーション
Source
Source
GitHub
Build
JenkinsOnEC2
Jenkins
Deploy
JavaApp
Elastic	Beanstalk
Pipeline
CodePipeline
Source
Source
GitHub
Build
JenkinsOnEC2
Jenkins
Deploy
JavaApp
Elastic	Beanstalk
Stage
CodePipeline
Source
Source
GitHub
Build
JenkinsOnEC2
Jenkins
Deploy
JavaApp
Elastic	Beanstalk
Action
CodePipeline
Source
Source
GitHub
Build
JenkinsOnEC2
Jenkins
Deploy
JavaApp
Elastic	Beanstalk
NotifyDevelopers
Lambda
CodePipeline
MyApplication
Parallel	actions
Source
Source
GitHub
Build
JenkinsOnEC2
Jenkins
Deploy
JavaApp
Elastic	Beanstalk
TestAPI
Runscope
CodePipeline
MyApplication
Sequential actions
Source
Source
GitHub
Build
JenkinsOnEC2
Jenkins
Deploy
JavaApp
Elastic	Beanstalk
TestAPI
Runscope
CodePipeline
MyApplication
Transition
What about build?
デプロイパッケージのビルド
Node.js & Python
• コードとすべての依存関係を含
むZIPファイル
• npm/pipを使ってライブラリを
インストール
Java
• コードとすべての依存関係を含
むZIPファイルもしくはスタン
ドアロンJar
• MavenやEclipseのプラグイン
を使ってライブラリをインスト
ール
• コンパイルされたクラスとリソ
ースファイル、/libにあるライ
ブラリ
C#(.NET Core)
• コードとすべての依存関係を含
むZIPファイルもしくはスタン
ドアロン.dll
• NuGetやプラグインを使ってラ
イブラリのインストール
AWS CodeBuild
✤ クラウド上でのビルドとテスト
⎻ ボリュームに合わせて⾃動でスケール
⎻ 分単位の時間課⾦
✤ ソースレポジトリとして、AWS CodeCommit、 GitHub、
S3を利⽤できる
✤ ビルド環境としてPython、Java、Node.jsをサポート
⎻ テストツールを含めたカスタムビルド環境も構築可能
✤ CodePipelineと連携しCI/CD環境を実現
サーバレスアプリのパイプライン
Source Build Beta Test Prod
サーバレスアプリのパイプライン
GitHub CodeBuild Ghost	inspector
Source Build Beta Test Prod
CloudFormation
(AWS	SAM)
CloudFormation
(AWS	SAM)
サーバレスアプリのパイプライン
GitHub CodeBuild Ghost	inspector
Source Build Beta Test Prod
CloudFormation
(AWS	SAM)
CloudFormation
(AWS	SAM)
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull
サーバレスアプリのパイプライン
GitHub CodeBuild Ghost	inspector
Source Build Beta Test Prod
CloudFormation
(AWS	SAM)
CloudFormation
(AWS	SAM)
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull
✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ npm、pip、Javaコンパイル
サーバレスアプリのパイプライン
GitHub CodeBuild Ghost	inspector
Source Build Beta Test Prod
CloudFormation
(AWS	SAM)
CloudFormation
(AWS	SAM)
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull
✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ npm、pip、Javaコンパイル
✤ AWS CloudFormationで完成したアプリをデプロイ
サーバレスアプリのパイプライン
GitHub CodeBuild Ghost	inspector
Source Build Beta Test Prod
CloudFormation
(AWS	SAM)
CloudFormation
(AWS	SAM)
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull
✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ npm、pip、Javaコンパイル
✤ AWS CloudFormationで完成したアプリをデプロイ
✤ サードパーティツールによるテスト
サーバレスアプリのパイプライン
GitHub CodeBuild Ghost	inspector
Source Build Beta Test Prod
CloudFormation
(AWS	SAM)
CloudFormation
(AWS	SAM)
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull
✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ npm、pip、Javaコンパイル
✤ AWS CloudFormationで完成したアプリをデプロイ
✤ サードパーティツールによるテスト
✤ 本番環境へのデプロイ
チェックリスト
✤ アプリケーションやインフラリソースのモデル化
✤ 複数環境のコンフィグと管理
✤ ⼿動によるデプロイメント
✤ デリバリプロセスの⾃動化(CI/CD)
✤ デバッグとモニタリング
メトリクスとログ
✤CloudWatchメトリクス
⎻ 標準
⎻ Invocations
⎻ Duration
⎻ Throttles
⎻ Errors
⎻ カスタムメトリクスの作成
✤CloudWatch Logs
⎻ 呼び出しごとに「START」、「
END」、「REPORT」エントリが
CloudWatch Logsに出⼒される
⎻ 独⾃のログエントリを出⼒
⎻ 可視化のためにサードパーティツー
ルを利⽤
メトリクスとログ
✤CloudWatchメトリクス
⎻ 標準
⎻ Invocations
⎻ Duration
⎻ Throttles
⎻ Errors
⎻ カスタムメトリクスの作成
✤CloudWatch Logs
⎻ 呼び出しごとに「START」、「
END」、「REPORT」エントリが
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
Service map
チェックリスト
✤ アプリケーションやインフラリソースのモデル化
✤ 複数環境のコンフィグと管理
✤ ⼿動によるデプロイメント
✤ デリバリプロセスの⾃動化(CI/CD)
✤ デバッグとモニタリング
まとめ
✤ サーバレスアプリにおけるライフサイクルマネージメント
⎻ サーバレスアプリケーションのコード
⎻ サーバレスアプリケーションのリソース
⎻ ⼀般的なシステムと⼤きな違いはない
✤ サーバレスアプリのモデル化とデプロイを実現するAWS SAM
⎻ ユニットテストはこれまで通り
✤ サーバレスアプリのビルドとデリバリパイプライン
⎻ CodeBuild
⎻ CodePipeline
✤ サーバレスアプリのデバッグ
⎻ CloudWatch
⎻ CloudWatch Logs
⎻ X-Ray
最後に、
ローカル実⾏について
テストドライバ例
import json
import lambda_function
f = open(“event.json”)
event = json.load(f)
f.close()
context = "”
lambda_function.lambda_handler(event,context)
テストドライバ例
import json
import lambda_function
f = open(“event.json”)
event = json.load(f)
f.close()
context = "”
lambda_function.lambda_handler(event,context)
イベントを静的ファイルとして⽤意しておき、ロード
<= 必要に応じて設定する(今回は空)
<= ファンクションの実⾏
テストドライバ例
def lambda_handler(event, context):
#Do something
if __name__ == "__main__":
f = open("event.json")
event = json.load(f)
f.close()
context = ""
lambda_handler(event,context)
• Pythonの場合、以下のようにすることでも可能。Javaも同様にPublicなmainメ
ソッドを定義して内部で呼び出すことも可能
AWS Dev Day Tokyo 2017
• 2017/5/31(⽔)〜 6/2(⾦)
• 受付開始 9:00〜
• セッション 13:20〜
• 品川プリンスホテル
アネックスタワー 5F
プリンスホール
• 来場無料(要事前申し込み)
http://www.awssummit.tokyo/devday/index.html
5/31(⽔) 6/1(⽊) 6/2(⾦)
• Serverless Evolution Day• Microservices、DevOps、IoT、Deep Learning
など最先端技術にフォーカスした実践的なセッション
• Amazon.com CTO Werner Vogelsも登壇
Application Lifecycle Management in a Serverless World

More Related Content

PDF
AWSでアプリ開発するなら 知っておくべこと
PDF
AWSのサーバレス関連アップデートを10分で紹介します
PDF
Introduction to AWS X-Ray
PDF
What's new with Serverless
PDF
AWS SAMで始めるサーバーレスアプリケーション開発
PDF
What's new with Serverless
PDF
Androidを中心に紐解くIoT
PPTX
Introducing C# in AWS Lambda
AWSでアプリ開発するなら 知っておくべこと
AWSのサーバレス関連アップデートを10分で紹介します
Introduction to AWS X-Ray
What's new with Serverless
AWS SAMで始めるサーバーレスアプリケーション開発
What's new with Serverless
Androidを中心に紐解くIoT
Introducing C# in AWS Lambda

What's hot (20)

PDF
Tune Up AWS Lambda
PDF
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
PDF
クラウド時代のソフトウェアアーキテクチャ
PPTX
jawsdays 2017 新訳-とある設計士の雲設計定石目録_3
PDF
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
PPTX
Raspberry Piを利用した顔の表情分析と感情を認識するシステム構築
PDF
Introducing Serverless Computing (20160802)
PDF
サーバーレスの今とこれから
PDF
Serverless Revolution
PPTX
Jaws days2017-ops jaws-2
PDF
Serverless Anti-Patterns
PDF
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
PDF
サーバーレスアーキテクチャのすすめ(公開版)
PDF
Building Scalable Application on the Cloud
PDF
Going Serverless, Building Applications with No Servers
PDF
Serverless AWS構成でセキュアなSPAを目指す
PPTX
AWSで始めるサーバレスな RESTful API システム
PDF
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
PPTX
20170311 jawsdays 新訳 とあるアーキテクトのクラウドデザインパターン目録
PDF
JAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance Environment
Tune Up AWS Lambda
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
クラウド時代のソフトウェアアーキテクチャ
jawsdays 2017 新訳-とある設計士の雲設計定石目録_3
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
Raspberry Piを利用した顔の表情分析と感情を認識するシステム構築
Introducing Serverless Computing (20160802)
サーバーレスの今とこれから
Serverless Revolution
Jaws days2017-ops jaws-2
Serverless Anti-Patterns
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスアーキテクチャのすすめ(公開版)
Building Scalable Application on the Cloud
Going Serverless, Building Applications with No Servers
Serverless AWS構成でセキュアなSPAを目指す
AWSで始めるサーバレスな RESTful API システム
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
20170311 jawsdays 新訳 とあるアーキテクトのクラウドデザインパターン目録
JAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance Environment
Ad

Viewers also liked (10)

PDF
Serverlessconf Tokyo 2017 Biz serverless お客様のビジネスを支える サーバーレスアーキテクチャーと開発としてのビジ...
PDF
[serverlessconf2017]FaaSで簡単に実現する数十万RPSスパイク負荷試験
PDF
Software Productivity and Serverless
PDF
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
PPTX
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
PDF
[Black Belt Online Seminar] AWS上でのログ管理
PDF
Growing up serverless
PDF
「サーバレスの薄い本」からの1年 #serverlesstokyo
PDF
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
Serverlessconf Tokyo 2017 Biz serverless お客様のビジネスを支える サーバーレスアーキテクチャーと開発としてのビジ...
[serverlessconf2017]FaaSで簡単に実現する数十万RPSスパイク負荷試験
Software Productivity and Serverless
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
[Black Belt Online Seminar] AWS上でのログ管理
Growing up serverless
「サーバレスの薄い本」からの1年 #serverlesstokyo
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
Ad

Similar to Application Lifecycle Management in a Serverless World (20)

PDF
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
PDF
AWS Black Belt Online Seminar 2016 AWS CloudFormation
PDF
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
PDF
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
PDF
開発者におくるサーバーレスモニタリング
PPTX
2016年7月のAWSサービスアップデートまとめ
PDF
Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行
PDF
拡がるクラウドの利用用途 - AWSの強みとクラウド活用最新事例 -
PDF
20170418 aws black-belt-architecture_pattern_of_serverless
PDF
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
PDF
JAWS-UG Meets Windows (JAWS Days 2017)
PPTX
インフラ系自主トレするならAWS
PDF
AWS Black Belt Online Seminar 2017 AWS Summit Tokyo 2017 まとめ
PPT
アマゾンクラウドの真価
PDF
CloudFormation/SAMのススメ
PDF
AWS re:Invent 2018 アップデート紹介 re:Invent Media & Entertainment Launches
PDF
AWS Black Belt Online Seminar 2016 クラウドのためのアーキテクチャ設計 -ベストプラクティス-
PDF
20190814 AWS Black Belt Online Seminar AWS Serverless Application Model
PDF
Morning Session - AWS Serverless Ways
PDF
AWS OpsWorksのご紹介
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormation
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
開発者におくるサーバーレスモニタリング
2016年7月のAWSサービスアップデートまとめ
Blackbelt Online Serminar Parse.comからAWSへのモバイルアプリの移行
拡がるクラウドの利用用途 - AWSの強みとクラウド活用最新事例 -
20170418 aws black-belt-architecture_pattern_of_serverless
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
JAWS-UG Meets Windows (JAWS Days 2017)
インフラ系自主トレするならAWS
AWS Black Belt Online Seminar 2017 AWS Summit Tokyo 2017 まとめ
アマゾンクラウドの真価
CloudFormation/SAMのススメ
AWS re:Invent 2018 アップデート紹介 re:Invent Media & Entertainment Launches
AWS Black Belt Online Seminar 2016 クラウドのためのアーキテクチャ設計 -ベストプラクティス-
20190814 AWS Black Belt Online Seminar AWS Serverless Application Model
Morning Session - AWS Serverless Ways
AWS OpsWorksのご紹介

More from Keisuke Nishitani (16)

PDF
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
PDF
AWS Lambda Updates
PDF
AWS Lambda / Amazon API Gateway Deep Dive
PDF
AWSで実現するクラウドネイティブなアプリ開発のポイント
PDF
Scale Your Business without Servers
PDF
RESTful API 入門
PDF
AWSにおける モバイル向けサービス及び事例紹介(20151211)
PDF
Serverless Architecture on AWS (20151201版)
PDF
Automated Testing on AWS Device Farm
PDF
Serverless Architecture on AWS(20151121版)
PDF
Serverless Architecture on AWS(20151023版)
PDF
クラウドネイティブ化する未来
PDF
UnityとAmazon Web Servicesで生み出す新しい価値
PDF
AWS Lambda Update
PDF
RubyとAmazon Web Service で生み出す新しい価値
PDF
AWS Lambdaを紐解く
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
AWS Lambda Updates
AWS Lambda / Amazon API Gateway Deep Dive
AWSで実現するクラウドネイティブなアプリ開発のポイント
Scale Your Business without Servers
RESTful API 入門
AWSにおける モバイル向けサービス及び事例紹介(20151211)
Serverless Architecture on AWS (20151201版)
Automated Testing on AWS Device Farm
Serverless Architecture on AWS(20151121版)
Serverless Architecture on AWS(20151023版)
クラウドネイティブ化する未来
UnityとAmazon Web Servicesで生み出す新しい価値
AWS Lambda Update
RubyとAmazon Web Service で生み出す新しい価値
AWS Lambdaを紐解く

Application Lifecycle Management in a Serverless World