SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
ソニー株式会社 江藤 武司 / 岩井 良和
Copyright 2019 Sony Corporation
AWS Lake Formation で実現、
マイクロサービスの
サーバーレスな分散トレーシング
Copyright 2019 Sony Corporation2019.10.223
Agenda
• 分散トレーシングを必要とした背景
• トレーシング基盤の構成
• トレーシングIDの取得と伝播
• まとめ
About us
Copyright 2019 Sony Corporation2019.10.225
Takeshi Etoh - About us
EA* の テクノロジー領域にたずさわり10年
社内 IT 全体最適化 や 新技術の検証・導入と
様々な技術の評価と実証実験に取り組む。
その後、サービス構築の最前線にて IoT プラットフォームや
ウェブサービス、モバイルアプリ など の アーキテクチャ・
デザインから実装までをこなし、現在はサーバーレスだけで
構成する BaaS の開発・展開をしている。
サーバーレスはアイデアを高速に
実現できるアーキテクチャとして大のお気に入り。
* EA: Enterprise Architecture, 業務とシステムの現状 AsIs、あるべき姿 ToBe、その方向性 CanBe を策定し事業体を全体最適化する方法論
Copyright 2019 Sony Corporation2019.10.226
Yoshikazu Iwai - About us
入社以来、
サーバーレスアーキテクチャを
採用したサービス開発を
行ってきたバックエンドエンジニア。
現在は、BaaS の開発・展開をしている。
分散トレーシングを必要とした背景
Copyright 2019 Sony Corporation2019.10.228
全体イメージ
• aibo や Multifunctional Light など の バックエンド (BaaS)
• サーバーレスの構成 (Lambda, DynamoDB, S3, SNS, etc...)
• 10 近い AWS アカウントに配置されている
aibo - http://aibo.com/
Multifunctional Light - https://sony.co.jp/Products/multifunctional-light/
Multifunctional Light
aibo
製造
販売
物流
サポート
認証システム
aibo
Service
Provider
Prod, QA, Dev…
Copyright 2019 Sony Corporation2019.10.229
システム構成概要と特徴
• API Gateway/Lambda に加え、非同期イベント処理も多い
• 呼出チェーンは長く多岐、クロス・アカウントやオンプレも
• 1ヶ月を超えてからの問合せで確認や障害のトレースあり
Copyright 2019 Sony Corporation2019.10.2210
分散トレーシングとは (1/5)
マイクロサービスなどの分散アーキテクチャで
処理の可視化や追跡性を向上させるための仕組み
Web Process
External Service
Web API Proc. Web API Proc.
Async Function
Web API Proc.
Copyright 2019 Sony Corporation2019.10.2211
分散トレーシングとは (2/5)
マイクロサービスなどの分散アーキテクチャで
処理の可視化や追跡性を向上させるための仕組み
• 基本的な概念
• Span: 処理ユニット、例えば1つの AWS Lambda Function などにあたる
• Trace: 関連する Span を まとめる単位、Lambda ⇒ SNS ⇒ Lambda など
• Propagation: “Trace” 実現用のメタデータを、各 “Span” で伝搬させること
Web Process
External Service
Web API Proc. Web API Proc.
Async Function
Web API Proc.Span
Copyright 2019 Sony Corporation2019.10.2212
分散トレーシングとは (3/5)
マイクロサービスなどの分散アーキテクチャで
処理の可視化や追跡性を向上させるための仕組み
• 基本的な概念
• Span: 処理ユニット、例えば1つの AWS Lambda Function などにあたる
• Trace: 関連する Span を まとめる単位、Lambda ⇒ SNS ⇒ Lambda など
• Propagation: “Trace” 実現用のメタデータを、各 “Span” で伝搬させること
Web Process
Trace
External Service
Web API Proc. Web API Proc.
Async Function
Web API Proc.Span
Copyright 2019 Sony Corporation2019.10.2213
分散トレーシングとは (4/5)
マイクロサービスなどの分散アーキテクチャで
処理の可視化や追跡性を向上させるための仕組み
• 基本的な概念
• Span: 処理ユニット、例えば1つの AWS Lambda Function などにあたる
• Trace: 関連する Span を まとめる単位、Lambda ⇒ SNS ⇒ Lambda など
• Propagation: “Trace” 実現用のメタデータを、各 “Span” で伝搬させること
Web Process
Trace
External Service
Web API Proc. Web API Proc.
Async Function
Web API Proc.Span
Propagation
Copyright 2019 Sony Corporation2019.10.2214
分散トレーシングとは (5/5)
マイクロサービスなどの分散アーキテクチャで
処理の可視化や追跡性を向上させるための仕組み
• 基本的な概念
• Span: 処理ユニット、例えば1つの AWS Lambda Function などにあたる
• Trace: 関連する Span を まとめる単位、Lambda ⇒ SNS ⇒ Lambda など
• Propagation: “Trace” 実現用のメタデータを、各 “Span” で伝搬させること
OpenTeremetry Dapper AWS X-Ray
OpenTracing Zipkin Datadog
OpenCensus Jaeger
dazn-lambda-powertools
主な仕様や製品・サービス
Web Process
Trace
External Service
Web API Proc. Web API Proc.
Async Function
Web API Proc.Span
Propagation
Copyright 2019 Sony Corporation2019.10.2215
• 多種多様なソースを一元的に集めて分析を行うことが得意
• 複数のAWSアカウントにまたがるログを集約分析できる
• サーバーレスで実現できる!
なぜ Lake Formation を 分散トレーシングに? (1/4)
AWS Lake Formation
Web Process
External ServiceWeb API Proc. Web API Proc.
Async Function
Web API Proc.
Copyright 2019 Sony Corporation2019.10.2216
• 多種多様なソースを一元的に集めて分析を行うことが得意
• 複数のAWSアカウントにまたがるログを集約分析できる
• サーバーレスで実現できる!
なぜ Lake Formation を 分散トレーシングに? (2/4)
AWS Lake Formation
Web Process
External ServiceWeb API Proc. Web API Proc.
Async Function
Web API Proc.
柔軟な
権限設定が可能
Copyright 2019 Sony Corporation2019.10.2217
• 多種多様なソースを一元的に集めて分析を行うことが得意
• 複数のAWSアカウントにまたがるログを集約分析できる
• サーバーレスで実現できる!
なぜ Lake Formation を 分散トレーシングに? (3/4)
AWS Lake Formation
Web Process
External ServiceWeb API Proc. Web API Proc.
Async Function
Web API Proc.
1ヶ月を超える
ログも追跡可能
柔軟な
権限設定が可能
Copyright 2019 Sony Corporation2019.10.2218
• 多種多様なソースを一元的に集めて分析を行うことが得意
• 複数のAWSアカウントにまたがるログを集約分析できる
• サーバーレスで実現できる!
なぜ Lake Formation を 分散トレーシングに? (4/4)
AWS Lake Formation
Web Process
External ServiceWeb API Proc. Web API Proc.
Async Function
Web API Proc.
1ヶ月を超える
ログも追跡可能
AWS X-Ray や Datadog との使い分け
利用方法
- X-Ray は Trace 確認後の詳細分析
- Datadog は 主に監視と短期の可視化
制約
- X-Ray は AWS アカウント内に閉じる
- Datadog は 最長1ヶ月まで
柔軟な
権限設定が可能
トレーシング基盤の構成
Copyright 2019 Sony Corporation2019.10.2220
トレーシング基盤の構成(1/2)
• Step Functionsを利用したログの出力
• エクスポート対象のロググループを事前に定義
• CloudWatch ログデータのエクスポート機能を順次実行
• ログの即時性はそこまで重視していない
• 即時性を考慮する場合は、Subscription filterの利用を検討
• Serverless Application Repositoryに公開すると便利
• Lake Formationを利用して各アカウントからログを集約
• Lake Formationを配置したアカウントにログ集約バケットを配置
Copyright 2019 Sony Corporation2019.10.2221
トレーシング基盤の構成(2/2)
トレーシングIDの取得と伝播
Copyright 2019 Sony Corporation2019.10.2223
トレースIDの重要性
• ログの横断的分析をするためには
• 出力するログのスキーマ定義
• トレーシングIDの注入
• AWS X-Rayだけでは非同期イベントのトレースが困難
• 非同期イベントを処理する際に、
どのようにトレースIDを伝播させているかを紹介
• API Gateway
• SNS
• SQS
• Step Functions
• S3
Copyright 2019 Sony Corporation2019.10.2224
Amazon API Gateway
• カスタム HTTP headerを利用
• HTTP headersの x-correlation-id の存在を確認
• なければ、awsRequestId, uuidを利用してIDを生成
• トレースIDの保持にはzone.jsを利用
• Zone.js:
https://github.com/angular/angular/tree/master/packages/zone.js
• Zoneに登録したプロパティを参照できるライブラリ
• 非同期処理からもzoneに登録したプロパティの参照が可能import 'zone.js';
import { APIGatewayEvent, Context } from 'aws-lambda';
export const handler = async (event: APIGatewayEvent, context: Context) => {
const correlationId = event.headers['x-correlation-id'] || context.awsRequestId;
Zone.current.fork({
name: context.awsRequestId,
properties: { context: new EventContext(context, correlationId) }
}).run(async () => ...);
};
Copyright 2019 Sony Corporation2019.10.2226
Amazon SNS
• SNS message attributesを利用
• メッセージに関する構造化メタデータを指定可能
• タイムスタンプ, データ署名, 識別子
• MessageAttributesからトレースIDを取得、保持する
import 'zone.js';
import { Context, SNSEvent } from 'aws-lambda';
export const handler = async (event: SNSEvent, context: Context) => {
const correlationId = event.Records[0].Sns.MessageAttributes.correlationId.Value
|| context.awsRequestId;
Zone.current.fork({
name: context.awsRequestId,
properties: { context: new EventContext(context, correlationId) }
})
.run(async () => …);
};
Copyright 2019 Sony Corporation2019.10.2228
Amazon SQS
• SQS message attributesを利用
• メッセージに関する構造化メタデータを指定可能
• タイムスタンプ, 地理空間データ署名, 識別子
• MessageAttributesからトレースIDを取得、保持する
import 'zone.js';
import { Context, SQSEvent } from 'aws-lambda';
export const handler = async (event: SQSEvent, context: Context) => {
const correlationId = event.Records[0].messageAttributes.correlationId.stringValue
|| context.awsRequestId;
Zone.current.fork({
name: context.awsRequestId,
properties: { context: new EventContext(context, correlationId) }
})
.run(async () => ...);
};
Copyright 2019 Sony Corporation2019.10.2230
Step Functions
• StateMachine実行時にトレースIDを注入
• Input parameterに追加する
• Parameters, ResultPathを活用して、各Taskに
トレースIDを伝播
import 'zone.js';
import { StepFunctions } from 'aws-sdk';
const sfn = new StepFunctions();
const startExecution = async (input: any, stateMachineArn: string) => {
const context = Zone.current.get('context');
input.correlationId = context.correlationId;
await sfn.startExecution({
stateMachineArn,
input: JSON.stringify(input)
}).promise();
};
Copyright 2019 Sony Corporation2019.10.2231
Amazon S3 (1/2)
• S3オブジェクトメタデータを利用する
• オブジェクトアップロード時に設定可能なkey-valueセット
• S3 APIの head-objectを利用してメタデータを取得
• S3イベントオブジェクトからは取得できない
const s3 = new S3();
export const handler = async (event: S3Event, context: Context): Promise<void> => {
const metadata = await s3.headObject({
Bucket: event.Records[0].s3.bucket.name,
Key: event.Records[0].s3.object.key
})
.promise()
.then((res: S3.HeadObjectOutput) => res.Metadata);
const correlationId = metadata.correlationId || context.awsRequestId;
Zone.current.fork({
name: event.Records[0].eventName,
properties: { new EventContext(context, correlationId) }
})
.run(async () => ...);
};
Copyright 2019 Sony Corporation2019.10.2232
Amazon S3 (2/2)
• オブジェクト削除イベントの場合は一工夫必要
• 同じLambdaで処理を継続させる
• SNSを利用してObject削除通知を送信する際にIDを伝播させる
まとめ
Copyright 2019 Sony Corporation2019.10.2234
まとめ
• サーバーレスは必然的にマイクロサービス・アーキテクチャ
 可視化・トレーサビは複雑になりがち、ログ・トレースは五里霧中の彷徨いに
• 分散トレーシングによりシステムの視界を確保する
 OpenTeremetry, Dapper, Zipkin, Datadog, dazn-lambda-powertools...
• データレイク活用でサーバーレスなトレーサビの実現も
 霧の中に浮かび上がる澄んだ湖のようにシステムを見渡すかのように
Copyright 2019 Sony Corporation2019.10.2235
まとめ
• サーバーレスは必然的にマイクロサービス・アーキテクチャ
 可視化・トレーサビは複雑になりがち、ログ・トレースは五里霧中の彷徨いに
• 分散トレーシングによりシステムの視界を確保する
 OpenTeremetry, Dapper, Zipkin, Datadog, dazn-lambda-powertools...
• データレイク活用でサーバーレスなトレーサビの実現も
 霧の中に浮かび上がる澄んだ湖のようにシステムを見渡すかのように
サーバーレスはルーブ・ゴールドバーグ・マシンに例えられるように
さまざまな部品を組み合わせて必要なものを実現するのも魅力
SONY is a registered trademark of Sony Corporation.
Names of Sony products and services are the registered trademarks and/or trademarks of Sony Corporation or its Group companies.
Other company names and product names are registered trademarks and/or trademarks of the respective companies.

Mais conteúdo relacionado

Mais procurados

20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング
20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング
20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティングAmazon Web Services Japan
 
Introduction to New CloudWatch Agent
Introduction to New CloudWatch AgentIntroduction to New CloudWatch Agent
Introduction to New CloudWatch AgentNoritaka Sekiyama
 
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたいAmazon Web Services Japan
 
Effective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターンEffective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターンNoritaka Sekiyama
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介Amazon Web Services Japan
 
Amazon Game Tech Night #22 AWSで実現するデータレイクとアナリティクス
Amazon Game Tech Night #22 AWSで実現するデータレイクとアナリティクスAmazon Game Tech Night #22 AWSで実現するデータレイクとアナリティクス
Amazon Game Tech Night #22 AWSで実現するデータレイクとアナリティクスAmazon Web Services Japan
 
AWS Black Belt Online Seminar 2018 re:Invent recap IoT and DevOps
AWS Black Belt Online Seminar 2018 re:Invent recap IoT and DevOpsAWS Black Belt Online Seminar 2018 re:Invent recap IoT and DevOps
AWS Black Belt Online Seminar 2018 re:Invent recap IoT and DevOpsAmazon Web Services Japan
 
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpacesAWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpacesAmazon Web Services Japan
 
20200414 Advanced Features in Amazon Elasticsearch Service
20200414 Advanced Features in Amazon Elasticsearch Service20200414 Advanced Features in Amazon Elasticsearch Service
20200414 Advanced Features in Amazon Elasticsearch ServiceAmazon Web Services Japan
 
20180313 Amazon Container Services アップデート
20180313 Amazon Container Services アップデート20180313 Amazon Container Services アップデート
20180313 Amazon Container Services アップデートAmazon Web Services Japan
 
AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit 入門
AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit 入門AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit 入門
AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit 入門Amazon Web Services Japan
 
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発Amazon Web Services Japan
 
20201207 AWS Black Belt Online Seminar AWS re:Invent 2020 速報 Part1
20201207 AWS Black Belt Online Seminar AWS re:Invent 2020 速報 Part120201207 AWS Black Belt Online Seminar AWS re:Invent 2020 速報 Part1
20201207 AWS Black Belt Online Seminar AWS re:Invent 2020 速報 Part1Amazon Web Services Japan
 
アマゾンクラウド実践講座 in 福岡/山口クラウドセミナー 20101208
アマゾンクラウド実践講座 in 福岡/山口クラウドセミナー 20101208アマゾンクラウド実践講座 in 福岡/山口クラウドセミナー 20101208
アマゾンクラウド実践講座 in 福岡/山口クラウドセミナー 20101208SORACOM, INC
 
【12/5 最新版】AWS Black Belt Online Seminar AWS re:Invent 2018 アップデート情報
【12/5 最新版】AWS Black Belt Online Seminar AWS re:Invent 2018 アップデート情報【12/5 最新版】AWS Black Belt Online Seminar AWS re:Invent 2018 アップデート情報
【12/5 最新版】AWS Black Belt Online Seminar AWS re:Invent 2018 アップデート情報Amazon Web Services Japan
 
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティングAmazon Web Services Japan
 
Japan Wrap Up re:Invent2018
Japan Wrap Up re:Invent2018Japan Wrap Up re:Invent2018
Japan Wrap Up re:Invent2018Kameda Harunobu
 

Mais procurados (20)

20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング
20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング
20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング
 
Introduction to New CloudWatch Agent
Introduction to New CloudWatch AgentIntroduction to New CloudWatch Agent
Introduction to New CloudWatch Agent
 
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
 
Effective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターンEffective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターン
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
 
Amazon Game Tech Night #22 AWSで実現するデータレイクとアナリティクス
Amazon Game Tech Night #22 AWSで実現するデータレイクとアナリティクスAmazon Game Tech Night #22 AWSで実現するデータレイクとアナリティクス
Amazon Game Tech Night #22 AWSで実現するデータレイクとアナリティクス
 
AWS Black Belt Online Seminar 2018 re:Invent recap IoT and DevOps
AWS Black Belt Online Seminar 2018 re:Invent recap IoT and DevOpsAWS Black Belt Online Seminar 2018 re:Invent recap IoT and DevOps
AWS Black Belt Online Seminar 2018 re:Invent recap IoT and DevOps
 
Serverless Application Security on AWS
Serverless Application Security on AWSServerless Application Security on AWS
Serverless Application Security on AWS
 
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpacesAWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
 
20200414 Advanced Features in Amazon Elasticsearch Service
20200414 Advanced Features in Amazon Elasticsearch Service20200414 Advanced Features in Amazon Elasticsearch Service
20200414 Advanced Features in Amazon Elasticsearch Service
 
20201125 EC Solution Seminar Recommend
20201125 EC Solution Seminar Recommend20201125 EC Solution Seminar Recommend
20201125 EC Solution Seminar Recommend
 
20180313 Amazon Container Services アップデート
20180313 Amazon Container Services アップデート20180313 Amazon Container Services アップデート
20180313 Amazon Container Services アップデート
 
AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit 入門
AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit 入門AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit 入門
AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit 入門
 
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発
 
20201207 AWS Black Belt Online Seminar AWS re:Invent 2020 速報 Part1
20201207 AWS Black Belt Online Seminar AWS re:Invent 2020 速報 Part120201207 AWS Black Belt Online Seminar AWS re:Invent 2020 速報 Part1
20201207 AWS Black Belt Online Seminar AWS re:Invent 2020 速報 Part1
 
アマゾンクラウド実践講座 in 福岡/山口クラウドセミナー 20101208
アマゾンクラウド実践講座 in 福岡/山口クラウドセミナー 20101208アマゾンクラウド実践講座 in 福岡/山口クラウドセミナー 20101208
アマゾンクラウド実践講座 in 福岡/山口クラウドセミナー 20101208
 
【12/5 最新版】AWS Black Belt Online Seminar AWS re:Invent 2018 アップデート情報
【12/5 最新版】AWS Black Belt Online Seminar AWS re:Invent 2018 アップデート情報【12/5 最新版】AWS Black Belt Online Seminar AWS re:Invent 2018 アップデート情報
【12/5 最新版】AWS Black Belt Online Seminar AWS re:Invent 2018 アップデート情報
 
Data Lake ハンズオン
Data Lake ハンズオンData Lake ハンズオン
Data Lake ハンズオン
 
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
 
Japan Wrap Up re:Invent2018
Japan Wrap Up re:Invent2018Japan Wrap Up re:Invent2018
Japan Wrap Up re:Invent2018
 

Semelhante a AWS Lake Formation で実現、マイクロサービスのサーバーレスな分散トレーシング

AWS re:Invent 2019 Recap IoT アップデート
AWS re:Invent 2019 Recap IoT アップデートAWS re:Invent 2019 Recap IoT アップデート
AWS re:Invent 2019 Recap IoT アップデートAmazon Web Services Japan
 
Architectingforhighavailability 170629010328
Architectingforhighavailability 170629010328Architectingforhighavailability 170629010328
Architectingforhighavailability 170629010328anzhong70
 
Architecting+for+high+availability
Architecting+for+high+availabilityArchitecting+for+high+availability
Architecting+for+high+availabilityanzhong70
 
AWS Introduction for Startups
AWS Introduction for StartupsAWS Introduction for Startups
AWS Introduction for Startupsakitsukada
 
01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデート01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデートAmazon Web Services Japan
 
AWSにおける モバイル向けサービス及び事例紹介(20151211)
AWSにおける モバイル向けサービス及び事例紹介(20151211)AWSにおける モバイル向けサービス及び事例紹介(20151211)
AWSにおける モバイル向けサービス及び事例紹介(20151211)Keisuke Nishitani
 
DevAx::connect はじめました
DevAx::connect はじめましたDevAx::connect はじめました
DevAx::connect はじめました政雄 金森
 
AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)
AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)
AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)Amazon Web Services Japan
 
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or ServerlessRunning Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or ServerlessKeisuke Nishitani
 
aws mackerel twilio_handson_public
aws mackerel twilio_handson_publicaws mackerel twilio_handson_public
aws mackerel twilio_handson_publicTomoaki Sakatoku
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係Hiraku Komuro
 
Windows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWSWindows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWSAmazon Web Services Japan
 
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜Atsushi Fukui
 
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介Amazon Web Services Japan
 
"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築
"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築
"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築Junji Nishihara
 
Google Compute EngineとPipe API
Google Compute EngineとPipe APIGoogle Compute EngineとPipe API
Google Compute EngineとPipe APImaruyama097
 

Semelhante a AWS Lake Formation で実現、マイクロサービスのサーバーレスな分散トレーシング (20)

AWS re:Invent 2019 Recap IoT アップデート
AWS re:Invent 2019 Recap IoT アップデートAWS re:Invent 2019 Recap IoT アップデート
AWS re:Invent 2019 Recap IoT アップデート
 
Architectingforhighavailability 170629010328
Architectingforhighavailability 170629010328Architectingforhighavailability 170629010328
Architectingforhighavailability 170629010328
 
Architecting+for+high+availability
Architecting+for+high+availabilityArchitecting+for+high+availability
Architecting+for+high+availability
 
AWS Introduction for Startups
AWS Introduction for StartupsAWS Introduction for Startups
AWS Introduction for Startups
 
01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデート01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデート
 
AWSにおける モバイル向けサービス及び事例紹介(20151211)
AWSにおける モバイル向けサービス及び事例紹介(20151211)AWSにおける モバイル向けサービス及び事例紹介(20151211)
AWSにおける モバイル向けサービス及び事例紹介(20151211)
 
DevAx::connect はじめました
DevAx::connect はじめましたDevAx::connect はじめました
DevAx::connect はじめました
 
AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)
AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)
AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)
 
AWS Ops service recap
AWS Ops service recapAWS Ops service recap
AWS Ops service recap
 
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or ServerlessRunning Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
 
aws mackerel twilio_handson_public
aws mackerel twilio_handson_publicaws mackerel twilio_handson_public
aws mackerel twilio_handson_public
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
 
Windows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWSWindows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWS
 
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
 
Amazon EC2 Container Service Deep dive
Amazon EC2 Container Service Deep diveAmazon EC2 Container Service Deep dive
Amazon EC2 Container Service Deep dive
 
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
 
"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築
"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築
"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築
 
Serverless for VUI
Serverless for VUIServerless for VUI
Serverless for VUI
 
AWS IoT アップデート 2016.02.16
AWS IoT アップデート 2016.02.16AWS IoT アップデート 2016.02.16
AWS IoT アップデート 2016.02.16
 
Google Compute EngineとPipe API
Google Compute EngineとPipe APIGoogle Compute EngineとPipe API
Google Compute EngineとPipe API
 

AWS Lake Formation で実現、マイクロサービスのサーバーレスな分散トレーシング

  • 1. ソニー株式会社 江藤 武司 / 岩井 良和 Copyright 2019 Sony Corporation AWS Lake Formation で実現、 マイクロサービスの サーバーレスな分散トレーシング
  • 2.
  • 3. Copyright 2019 Sony Corporation2019.10.223 Agenda • 分散トレーシングを必要とした背景 • トレーシング基盤の構成 • トレーシングIDの取得と伝播 • まとめ
  • 5. Copyright 2019 Sony Corporation2019.10.225 Takeshi Etoh - About us EA* の テクノロジー領域にたずさわり10年 社内 IT 全体最適化 や 新技術の検証・導入と 様々な技術の評価と実証実験に取り組む。 その後、サービス構築の最前線にて IoT プラットフォームや ウェブサービス、モバイルアプリ など の アーキテクチャ・ デザインから実装までをこなし、現在はサーバーレスだけで 構成する BaaS の開発・展開をしている。 サーバーレスはアイデアを高速に 実現できるアーキテクチャとして大のお気に入り。 * EA: Enterprise Architecture, 業務とシステムの現状 AsIs、あるべき姿 ToBe、その方向性 CanBe を策定し事業体を全体最適化する方法論
  • 6. Copyright 2019 Sony Corporation2019.10.226 Yoshikazu Iwai - About us 入社以来、 サーバーレスアーキテクチャを 採用したサービス開発を 行ってきたバックエンドエンジニア。 現在は、BaaS の開発・展開をしている。
  • 8. Copyright 2019 Sony Corporation2019.10.228 全体イメージ • aibo や Multifunctional Light など の バックエンド (BaaS) • サーバーレスの構成 (Lambda, DynamoDB, S3, SNS, etc...) • 10 近い AWS アカウントに配置されている aibo - http://aibo.com/ Multifunctional Light - https://sony.co.jp/Products/multifunctional-light/ Multifunctional Light aibo 製造 販売 物流 サポート 認証システム aibo Service Provider Prod, QA, Dev…
  • 9. Copyright 2019 Sony Corporation2019.10.229 システム構成概要と特徴 • API Gateway/Lambda に加え、非同期イベント処理も多い • 呼出チェーンは長く多岐、クロス・アカウントやオンプレも • 1ヶ月を超えてからの問合せで確認や障害のトレースあり
  • 10. Copyright 2019 Sony Corporation2019.10.2210 分散トレーシングとは (1/5) マイクロサービスなどの分散アーキテクチャで 処理の可視化や追跡性を向上させるための仕組み Web Process External Service Web API Proc. Web API Proc. Async Function Web API Proc.
  • 11. Copyright 2019 Sony Corporation2019.10.2211 分散トレーシングとは (2/5) マイクロサービスなどの分散アーキテクチャで 処理の可視化や追跡性を向上させるための仕組み • 基本的な概念 • Span: 処理ユニット、例えば1つの AWS Lambda Function などにあたる • Trace: 関連する Span を まとめる単位、Lambda ⇒ SNS ⇒ Lambda など • Propagation: “Trace” 実現用のメタデータを、各 “Span” で伝搬させること Web Process External Service Web API Proc. Web API Proc. Async Function Web API Proc.Span
  • 12. Copyright 2019 Sony Corporation2019.10.2212 分散トレーシングとは (3/5) マイクロサービスなどの分散アーキテクチャで 処理の可視化や追跡性を向上させるための仕組み • 基本的な概念 • Span: 処理ユニット、例えば1つの AWS Lambda Function などにあたる • Trace: 関連する Span を まとめる単位、Lambda ⇒ SNS ⇒ Lambda など • Propagation: “Trace” 実現用のメタデータを、各 “Span” で伝搬させること Web Process Trace External Service Web API Proc. Web API Proc. Async Function Web API Proc.Span
  • 13. Copyright 2019 Sony Corporation2019.10.2213 分散トレーシングとは (4/5) マイクロサービスなどの分散アーキテクチャで 処理の可視化や追跡性を向上させるための仕組み • 基本的な概念 • Span: 処理ユニット、例えば1つの AWS Lambda Function などにあたる • Trace: 関連する Span を まとめる単位、Lambda ⇒ SNS ⇒ Lambda など • Propagation: “Trace” 実現用のメタデータを、各 “Span” で伝搬させること Web Process Trace External Service Web API Proc. Web API Proc. Async Function Web API Proc.Span Propagation
  • 14. Copyright 2019 Sony Corporation2019.10.2214 分散トレーシングとは (5/5) マイクロサービスなどの分散アーキテクチャで 処理の可視化や追跡性を向上させるための仕組み • 基本的な概念 • Span: 処理ユニット、例えば1つの AWS Lambda Function などにあたる • Trace: 関連する Span を まとめる単位、Lambda ⇒ SNS ⇒ Lambda など • Propagation: “Trace” 実現用のメタデータを、各 “Span” で伝搬させること OpenTeremetry Dapper AWS X-Ray OpenTracing Zipkin Datadog OpenCensus Jaeger dazn-lambda-powertools 主な仕様や製品・サービス Web Process Trace External Service Web API Proc. Web API Proc. Async Function Web API Proc.Span Propagation
  • 15. Copyright 2019 Sony Corporation2019.10.2215 • 多種多様なソースを一元的に集めて分析を行うことが得意 • 複数のAWSアカウントにまたがるログを集約分析できる • サーバーレスで実現できる! なぜ Lake Formation を 分散トレーシングに? (1/4) AWS Lake Formation Web Process External ServiceWeb API Proc. Web API Proc. Async Function Web API Proc.
  • 16. Copyright 2019 Sony Corporation2019.10.2216 • 多種多様なソースを一元的に集めて分析を行うことが得意 • 複数のAWSアカウントにまたがるログを集約分析できる • サーバーレスで実現できる! なぜ Lake Formation を 分散トレーシングに? (2/4) AWS Lake Formation Web Process External ServiceWeb API Proc. Web API Proc. Async Function Web API Proc. 柔軟な 権限設定が可能
  • 17. Copyright 2019 Sony Corporation2019.10.2217 • 多種多様なソースを一元的に集めて分析を行うことが得意 • 複数のAWSアカウントにまたがるログを集約分析できる • サーバーレスで実現できる! なぜ Lake Formation を 分散トレーシングに? (3/4) AWS Lake Formation Web Process External ServiceWeb API Proc. Web API Proc. Async Function Web API Proc. 1ヶ月を超える ログも追跡可能 柔軟な 権限設定が可能
  • 18. Copyright 2019 Sony Corporation2019.10.2218 • 多種多様なソースを一元的に集めて分析を行うことが得意 • 複数のAWSアカウントにまたがるログを集約分析できる • サーバーレスで実現できる! なぜ Lake Formation を 分散トレーシングに? (4/4) AWS Lake Formation Web Process External ServiceWeb API Proc. Web API Proc. Async Function Web API Proc. 1ヶ月を超える ログも追跡可能 AWS X-Ray や Datadog との使い分け 利用方法 - X-Ray は Trace 確認後の詳細分析 - Datadog は 主に監視と短期の可視化 制約 - X-Ray は AWS アカウント内に閉じる - Datadog は 最長1ヶ月まで 柔軟な 権限設定が可能
  • 20. Copyright 2019 Sony Corporation2019.10.2220 トレーシング基盤の構成(1/2) • Step Functionsを利用したログの出力 • エクスポート対象のロググループを事前に定義 • CloudWatch ログデータのエクスポート機能を順次実行 • ログの即時性はそこまで重視していない • 即時性を考慮する場合は、Subscription filterの利用を検討 • Serverless Application Repositoryに公開すると便利 • Lake Formationを利用して各アカウントからログを集約 • Lake Formationを配置したアカウントにログ集約バケットを配置
  • 21. Copyright 2019 Sony Corporation2019.10.2221 トレーシング基盤の構成(2/2)
  • 23. Copyright 2019 Sony Corporation2019.10.2223 トレースIDの重要性 • ログの横断的分析をするためには • 出力するログのスキーマ定義 • トレーシングIDの注入 • AWS X-Rayだけでは非同期イベントのトレースが困難 • 非同期イベントを処理する際に、 どのようにトレースIDを伝播させているかを紹介 • API Gateway • SNS • SQS • Step Functions • S3
  • 24. Copyright 2019 Sony Corporation2019.10.2224 Amazon API Gateway • カスタム HTTP headerを利用 • HTTP headersの x-correlation-id の存在を確認 • なければ、awsRequestId, uuidを利用してIDを生成 • トレースIDの保持にはzone.jsを利用 • Zone.js: https://github.com/angular/angular/tree/master/packages/zone.js • Zoneに登録したプロパティを参照できるライブラリ • 非同期処理からもzoneに登録したプロパティの参照が可能import 'zone.js'; import { APIGatewayEvent, Context } from 'aws-lambda'; export const handler = async (event: APIGatewayEvent, context: Context) => { const correlationId = event.headers['x-correlation-id'] || context.awsRequestId; Zone.current.fork({ name: context.awsRequestId, properties: { context: new EventContext(context, correlationId) } }).run(async () => ...); };
  • 25. Copyright 2019 Sony Corporation2019.10.2226 Amazon SNS • SNS message attributesを利用 • メッセージに関する構造化メタデータを指定可能 • タイムスタンプ, データ署名, 識別子 • MessageAttributesからトレースIDを取得、保持する import 'zone.js'; import { Context, SNSEvent } from 'aws-lambda'; export const handler = async (event: SNSEvent, context: Context) => { const correlationId = event.Records[0].Sns.MessageAttributes.correlationId.Value || context.awsRequestId; Zone.current.fork({ name: context.awsRequestId, properties: { context: new EventContext(context, correlationId) } }) .run(async () => …); };
  • 26. Copyright 2019 Sony Corporation2019.10.2228 Amazon SQS • SQS message attributesを利用 • メッセージに関する構造化メタデータを指定可能 • タイムスタンプ, 地理空間データ署名, 識別子 • MessageAttributesからトレースIDを取得、保持する import 'zone.js'; import { Context, SQSEvent } from 'aws-lambda'; export const handler = async (event: SQSEvent, context: Context) => { const correlationId = event.Records[0].messageAttributes.correlationId.stringValue || context.awsRequestId; Zone.current.fork({ name: context.awsRequestId, properties: { context: new EventContext(context, correlationId) } }) .run(async () => ...); };
  • 27. Copyright 2019 Sony Corporation2019.10.2230 Step Functions • StateMachine実行時にトレースIDを注入 • Input parameterに追加する • Parameters, ResultPathを活用して、各Taskに トレースIDを伝播 import 'zone.js'; import { StepFunctions } from 'aws-sdk'; const sfn = new StepFunctions(); const startExecution = async (input: any, stateMachineArn: string) => { const context = Zone.current.get('context'); input.correlationId = context.correlationId; await sfn.startExecution({ stateMachineArn, input: JSON.stringify(input) }).promise(); };
  • 28. Copyright 2019 Sony Corporation2019.10.2231 Amazon S3 (1/2) • S3オブジェクトメタデータを利用する • オブジェクトアップロード時に設定可能なkey-valueセット • S3 APIの head-objectを利用してメタデータを取得 • S3イベントオブジェクトからは取得できない const s3 = new S3(); export const handler = async (event: S3Event, context: Context): Promise<void> => { const metadata = await s3.headObject({ Bucket: event.Records[0].s3.bucket.name, Key: event.Records[0].s3.object.key }) .promise() .then((res: S3.HeadObjectOutput) => res.Metadata); const correlationId = metadata.correlationId || context.awsRequestId; Zone.current.fork({ name: event.Records[0].eventName, properties: { new EventContext(context, correlationId) } }) .run(async () => ...); };
  • 29. Copyright 2019 Sony Corporation2019.10.2232 Amazon S3 (2/2) • オブジェクト削除イベントの場合は一工夫必要 • 同じLambdaで処理を継続させる • SNSを利用してObject削除通知を送信する際にIDを伝播させる
  • 31. Copyright 2019 Sony Corporation2019.10.2234 まとめ • サーバーレスは必然的にマイクロサービス・アーキテクチャ  可視化・トレーサビは複雑になりがち、ログ・トレースは五里霧中の彷徨いに • 分散トレーシングによりシステムの視界を確保する  OpenTeremetry, Dapper, Zipkin, Datadog, dazn-lambda-powertools... • データレイク活用でサーバーレスなトレーサビの実現も  霧の中に浮かび上がる澄んだ湖のようにシステムを見渡すかのように
  • 32. Copyright 2019 Sony Corporation2019.10.2235 まとめ • サーバーレスは必然的にマイクロサービス・アーキテクチャ  可視化・トレーサビは複雑になりがち、ログ・トレースは五里霧中の彷徨いに • 分散トレーシングによりシステムの視界を確保する  OpenTeremetry, Dapper, Zipkin, Datadog, dazn-lambda-powertools... • データレイク活用でサーバーレスなトレーサビの実現も  霧の中に浮かび上がる澄んだ湖のようにシステムを見渡すかのように サーバーレスはルーブ・ゴールドバーグ・マシンに例えられるように さまざまな部品を組み合わせて必要なものを実現するのも魅力
  • 33. SONY is a registered trademark of Sony Corporation. Names of Sony products and services are the registered trademarks and/or trademarks of Sony Corporation or its Group companies. Other company names and product names are registered trademarks and/or trademarks of the respective companies.