翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS と Amazon SNSAWS X-Ray
AWS X-Rayは Amazon Simple Notification Service (Amazon SNS) と統合して、Amazon SNS 経由で渡されたメッセージをトレースします。Amazon SNS パブリッシャーが X-Ray SDK を使用してクライアントをトレースする場合、サブスクライバはトレースヘッダー次に、同じトレース ID を使用して、パブリッシャーからの元のトレースを継続して伝達します。この継続性により、ユーザーはダウンストリームサービス全体でトレース、分析、およびデバッグを実行できます。
現在、Amazon SNS トレースコンテキストの伝達では、以下のサブスクライバーがサポートされています。
-
HTTP/HTTPS— HTTP/HTTPS サブスクライバーの場合、X-Ray SDK を使用して、受信するメッセージリクエストをトレースできます。詳細な説明と Java の例については、「X-Ray SDK for Java を使用して受信リクエストをトレースします。」を参照してください。
-
AWS Lambda— アクティブトレースが有効な Lambda サブスクライバーの場合、Lambda は関数の呼び出しに関する詳細とともにセグメントを記録し、パブリッシャーのトレースに送信します。詳細については、「AWS Lambda と AWS X-Ray」を参照してください。
次の手順に従って、Lambda サブスクライバーを使用して X-Ray と Amazon SNS の間の基本的なコンテキストを作成する方法を学習します。2 つの Lambda 関数と 1 つの Amazon SNS トピックを作成します。次に、X-Ray コンソールで、インタラクションを通じて伝達されたトレース ID を表示できます。
要件
-
Bash シェル。Linux および macOS の場合、これはデフォルトで含まれます。Windows 10 では、Linux 用の Windows サブシステムをインストール
して、Windows 統合バージョンの Ubuntu および Bash を入手できます。
Lambda サブスクライバー関数の作成
以下のステップでは、サンプル Lambda 関数のサンプルMessageSubscriber
は Node.js で実装され、Amazon SNS トピックのエンドポイントとしてサブスクライブされます。-MessageSubscriber
関数では、custom
process_message
サブセグメントとサブセグメントAWSXRay.captureFunc
コマンド。この関数は、サブセグメントの注釈としてシンプルなメッセージを書き込みます。
サブスクライバーパッケージを作成するには
-
ファイルフォルダを作成し、それがサブスクライバー関数であることを示すために名前を付けます (たとえば、
sns-xray-subscriber
)。 -
2 つのファイル (
index.js
およびpackage.json
) を作成します。 -
次のコードを
index.js
に貼り付けます。var AWSXRay = require('aws-xray-sdk'); exports.handler = function(event, context, callback) { AWSXRay.captureFunc('process_message', function(subsegment) { var message = event.Records[0].Sns.Message; subsegment.addAnnotation('message_content', message); subsegment.close(); }); callback(null, "Message received."); };
-
次のコードを
package.json
に貼り付けます。{ "name": "sns-xray-subscriber", "version": "1.0.0", "description": "A demo service to test SNS X-Ray trace header propagation", "dependencies": { "aws-xray-sdk": "^2.2.0" } }
-
sns-xray-subscriber
フォルダ内で次のスクリプトを実行します。package-lock.json
ファイルとnode_modules
フォルダが作成され、すべての依存関係が処理されます。npm install --production
-
sns-xray-subscriber
フォルダを .zip ファイルに圧縮します。
サブスクライバー関数を作成し、X-Ray を有効にするには
-
Lambda コンソール
を開き、[関数の作成] を選択します。 -
[一から作成] を選択します。
-
[関数名] に名前 (たとえば、
MessageSubscriber
) を付けます。 -
[ランタイム] で、[Node.js 10.x] を選択します。
-
-
選択関数の作成をクリックして、Lambda コンソールで関数を作成および表示します。
-
[関数コード] で、[コードエントリタイプ] の [.ZIP ファイルをアップロードする] を選択します。
-
作成したサブスクライバーパッケージを選択します。アップロードするには、コンソールの右上にある [保存] を選択します。
-
Eclipseデバッグとエラー処理で、[] を選択します。の有効化AWSX-Rayボックスに移動するとそのように表示されます。
-
[Save] (保存) を選択します。
Amazon SNS トピックを作成する
Amazon SNS では、リクエストを受信すると、エンドポイントサブスクライバーにトレースヘッダーが伝達されます。以下のステップでは、トピックを作成し、前に作成した Lambda 関数としてエンドポイントを設定します。
Amazon SNS トピックを作成し、Lambda 関数をサブスクライブするには
-
SNS コンソール
を開きます。 -
[トピック] を選択し、[トピックの作成] を選択します。[名前] に名前を入力します。
-
[サブスクリプション] で、[サブスクリプションの作成] を選択します。
-
トピックの ARN (
arn:aws:sns:{region}:{account id}:{topic name}
など) を記録します。 -
[サブスクリプションの作成] を選択します。
-
を使用する場合プロトコルで、AWSLambda。
-
を使用する場合終点で、利用可能な Lambda 関数のリストから作成したレシーバーの Lambda 関数の ARN を選択します。
-
-
[Create subscription] (サブスクリプションの作成) を選択します。
Lambda パブリッシャー関数の作成
以下のステップでは、サンプル Lambda 関数のサンプルMessagePublisher
は Node.js で実装されています。この関数は、前に作成した Amazon SNS トピックにメッセージを送信します。関数は、AWS SDK for JavaScriptは Amazon SNS から通知を送信し、Node.js の X-Ray SDK を使用して、AWSSDK クライアント。
パブリッシャーパッケージを作成するには
-
ファイルフォルダを作成し、それがパブリッシャー関数であることを示すために名前を付けます (たとえば、
sns-xray-publisher
)。 -
2 つのファイル (
index.js
およびpackage.json
) を作成します。 -
次のコードを
index.js
に貼り付けます。var AWSXRay = require('aws-xray-sdk'); var AWS = AWSXRay.captureAWS(require('aws-sdk')); exports.handler = function(event, context, callback) { var sns = new AWS.SNS(); sns.publish({ // You can replace the following line with your custom message. Message: process.env.MESSAGE || "
Testing X-Ray trace header propagation
", TopicArn: process.env.TOPIC_ARN }, function(err, data) { if (err) { console.log(err.stack); callback(err); } else { callback(null, "Message sent."); } }); }; -
次のコードを
package.json
に貼り付けます。{ "name": "sns-xray-publisher", "version": "1.0.0", "description": "A demo service to test SNS X-Ray trace header propagation", "dependencies": { "aws-xray-sdk": "^2.2.0" } }
-
sns-xray-publisher
フォルダ内で、次のスクリプトを実行します。package-lock.json
ファイルとnode_modules
フォルダが作成され、すべての依存関係が処理されます。npm install --production
-
sns-xray-publisher
フォルダを .zip ファイルに圧縮します。
パブリッシャー関数を作成し、X-Ray を有効にするには
-
Lambda コンソール
を開き、[Create function] (関数の作成) を選択します。 -
[一から作成] を選択します。
-
[名前] に名前 (たとえば、
MessagePublisher
) を付けます。 -
[ランタイム] で、[Node.js 10.x] を選択します。
-
-
[Permissions (アクセス許可)] で、[実行ロールの選択または作成] を選択します。
-
[実行ロール] ドロップダウンリストで、[AWS ポリシーテンプレートから新しいロールを作成] を選択します。
-
[ロール名] に名前を入力します。
-
[ポリシーテンプレート] で、[Amazon SNS Publish policy (Amazon SNS 発行ポリシー)] を選択します。
-
-
選択関数の作成をクリックして、Lambda コンソールで関数を作成および表示します。
-
[関数コード] で、[コードエントリタイプ] の [.ZIP ファイルをアップロードする] を選択します。
-
作成したパブリッシャーパッケージを選択します。アップロードするには、コンソールの右上にある [保存] を選択します。
-
[環境変数] で、変数を追加します。
-
[Key (キー)] には、パブリッシャー関数で定義したキー名
TOPIC_ARN
を使用します。 -
を使用する場合値で、以前に記録した Amazon SNS トピック ARN を使用します。
-
-
必要に応じて、別の変数を追加します。
-
[キー] に、キー名 (たとえば、
MESSAGE
) を入力します。 -
[値] に、カスタムメッセージを入力します。
-
-
Eclipseデバッグとエラー処理で、[] を選択します。の有効化AWSX-Rayボックスに移動するとそのように表示されます。
-
[Save] (保存) を選択します。
コンテキスト伝達のテストと検証
パブリッシャー関数およびサブスクライバー関数の両方とも、トレースを送信するときに Lambda アクティブトレースを有効にします。パブリッシャー関数は X-Ray SDK を使用して、publish
SNS API コール. 次に、Amazon SNS は、サブスクライバーにトレースヘッダーを伝達します。最後に、サブスクライバーがトレースヘッダーを取得し、トレースを続行します。以降のステップでは、トレース ID に従います。
パブリッシャー関数を作成し、X-Ray を有効にするには
-
Lambda コンソール
を開き、前に作成したパブリッシャー関数を選択します。 -
テストを選択します。
-
[新しいテストイベントの作成] を選択します。
-
[イベントテンプレート] で、[Hello World] テンプレートを選択します。
-
[イベント名] に名前を入力します。
-
-
[Create] (作成) を選択します。
-
[テスト] を再度選択します。
-
検証のため、X-Ray コンソール
を開きます。トレースが表示されるまで、10 秒以上待機します。 -
サービスマップが生成されたら、2 つの Lambda 関数と Amazon SNS トピックが表示されることを確認します。
-
[
MessageSubscriber
] セグメントを選択し、[トレースの表示] を選択します。 -
リストからトレースを選択し、[詳細] ページを表示します。
-
[process_message] サブセグメントを選択します。
-
[注釈] タブを選択し、送信者からのメッセージの値とともに
message_content
キーを確認します。