application lifecycle management in a serverless world
Post on 22-Jan-2018
2.874 Views
Preview:
TRANSCRIPT
Application Lifecycle Managementin a Serverless World
Keisuke Nishitani (@Keisuke69)Amazon Web Services Japan K.K.
Apr 25, 2017
Who am IKeisuke NishitaniSpecialist Solutions Architect, ServerlessAmazon 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
Noservers toprovisionormanage Scaleswithusage
Neverpayforidle Availabilityandfaulttolerancebuiltin
Serverlessとは
サーバレスなアプリケーションモデルイベントソース ファンクション サービスなど
JavaC#Node.jsPython
λイベント
S3にオブジェクトが作られるKinesisにストリームデータが保存されるHTTPSによるリクエストetc...
Amazon S3 Amazon DynamoDB
Amazon Kinesis
AWS CloudFormation
AWS CloudTrail
Amazon CloudWatch
Amazon SNSAmazonSES
AmazonAPI Gateway
Amazon Cognito
AWSIoT
AmazonAlexa
Cron events
DATASTORES ENDPOINTS
REPOSITORIES EVENT/MESSAGESERVICES
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 SESAmazon Machine Learning
Amazon Route53Amazon SQS
AWS Step Functions
AmazonSWF
Amazon Pinpoint*
AmazonAthena
ユースケース
Web Applications
Data Processing
ChatbotsBackends
</></>
Amazon Alexa
Autonomous IT
• Staticwebsites
• Complexwebapps
• PackagesforFlaskandExpress
• Realtime
• MapReduce
• Batch
• Poweringchatbot logic
• Apps&services
• Mobile
• IoT
• Poweringvoice-enabledapps
• AlexaSkillsKit
• Policyengines
• ExtendingAWSservices
• Infrastructuremanagement
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
AWSLambdaconsole
サーバレスアプリのライフサイクルマネジメント
Author Package Test Deploy
AWSLambdaconsole
IDEplugins
サーバレスアプリのライフサイクルマネジメント
Author Package Test Deploy
AWSLambdaconsole
IDEplugins
3rd partytoolsTexteditor
サーバレスアプリのライフサイクルマネジメント
Author Package Test Deploy
AWSLambdaconsole
IDEplugins
3rd partytoolsTexteditor
サーバレスアプリのライフサイクルマネジメント
サーバレスアプリのライフサイクルマネジメント
✤ 数⼗、数百の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
SourceGitHub
Build
JenkinsOnEC2Jenkins
Deploy
JavaAppElasticBeanstalk
Pipeline
CodePipeline
Source
SourceGitHub
Build
JenkinsOnEC2Jenkins
Deploy
JavaAppElasticBeanstalk
Stage
CodePipeline
Source
SourceGitHub
Build
JenkinsOnEC2Jenkins
Deploy
JavaAppElasticBeanstalk
Action
CodePipeline
Source
SourceGitHub
Build
JenkinsOnEC2Jenkins
Deploy
JavaAppElasticBeanstalk
NotifyDevelopersLambda
CodePipelineMyApplication
Parallelactions
Source
SourceGitHub
Build
JenkinsOnEC2Jenkins
Deploy
JavaAppElasticBeanstalk
TestAPIRunscope
CodePipelineMyApplication
Sequential actions
Source
SourceGitHub
Build
JenkinsOnEC2Jenkins
Deploy
JavaAppElasticBeanstalk
TestAPIRunscope
CodePipelineMyApplication
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 Ghostinspector
Source Build Beta Test Prod
CloudFormation(AWSSAM)
CloudFormation(AWSSAM)
サーバレスアプリのパイプライン
GitHub CodeBuild Ghostinspector
Source Build Beta Test Prod
CloudFormation(AWSSAM)
CloudFormation(AWSSAM)
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull
サーバレスアプリのパイプライン
GitHub CodeBuild Ghostinspector
Source Build Beta Test Prod
CloudFormation(AWSSAM)
CloudFormation(AWSSAM)
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ npm、pip、Javaコンパイル
サーバレスアプリのパイプライン
GitHub CodeBuild Ghostinspector
Source Build Beta Test Prod
CloudFormation(AWSSAM)
CloudFormation(AWSSAM)
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ npm、pip、Javaコンパイル✤ AWS CloudFormationで完成したアプリをデプロイ
サーバレスアプリのパイプライン
GitHub CodeBuild Ghostinspector
Source Build Beta Test Prod
CloudFormation(AWSSAM)
CloudFormation(AWSSAM)
✤ CodePipelineを⽤いてGithubもしくはCodeCommitからソースを直接Pull✤ AWS CodeBuildでサーバレスアプリのビルドとパッケージング
⎻ npm、pip、Javaコンパイル✤ AWS CloudFormationで完成したアプリをデプロイ✤ サードパーティツールによるテスト
サーバレスアプリのパイプライン
GitHub CodeBuild Ghostinspector
Source Build Beta Test Prod
CloudFormation(AWSSAM)
CloudFormation(AWSSAM)
✤ 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ファンクションから他のサービスに対する呼び出しと時間をトレース
✤ ファンクションとサービスの依存関係、関連性を実際に⽬視
✤ 消えたイベントやスロットルといった状態を確認したり診断したりが簡単に
✤ 簡単なセットアップ
簡単セットアップ
AWSLambda
AmazonS3
AmazonDynamoDB
AWS X-Rayを使ったトラブルシューティング✤ ⾮同期呼び出しの滞留時間とリトライを確認✤ AWSサービスに対する呼び出しパフォーマンスをプロファイリング
⎻ イベント処理の失敗を検知⎻ パフォーマンス問題の特定と修正が簡単に
dwelltimes
servicecalltimes
retries
Service map
チェックリスト✤ アプリケーションやインフラリソースのモデル化
✤ 複数環境のコンフィグと管理
✤ ⼿動によるデプロイメント
✤ デリバリプロセスの⾃動化(CI/CD)
✤ デバッグとモニタリング
まとめ✤ サーバレスアプリにおけるライフサイクルマネージメント
⎻ サーバレスアプリケーションのコード⎻ サーバレスアプリケーションのリソース⎻ ⼀般的なシステムと⼤きな違いはない
✤ サーバレスアプリのモデル化とデプロイを実現するAWS SAM⎻ ユニットテストはこれまで通り
✤ サーバレスアプリのビルドとデリバリパイプライン⎻ CodeBuild⎻ CodePipeline
✤ サーバレスアプリのデバッグ⎻ CloudWatch⎻ CloudWatch Logs⎻ X-Ray
最後に、
ローカル実⾏について
テストドライバ例
import jsonimport lambda_function
f = open(“event.json”)event = json.load(f)f.close()
context = "”
lambda_function.lambda_handler(event,context)
テストドライバ例
import jsonimport 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も登壇
top related