AWS X-RayでAPI Gateway + Lambda + SNSをトレースする

AWS X-RayでAPI Gateway + Lambda + SNSをトレースする

だいぶ前にAPI Gateway + Lambda + DynamoDBでX-Rayを使おうとしたのですが、その当時はDynamoDBの部分が上手く可視化できなかった?ようなことがあり、断念しました。

今は簡単に可視化できるようになっており、ボトルネックを調べたりパフォーマンスを見ることができるようになっているようです。

API Gateway トレースの有効化

API Gatewayでトレースの有効化を行います。

API Gatewayをデプロイした後、ステージエディターで「ログ/トレース」から「X-Rayトレースの有効化」にチェックを入れます。

AWS X-RayでAPI Gateway + Lambda + SNSをトレースする

Lambda トレースの有効化

Lambdaでトレースの有効化を行います。

「アクティブトレース」にチェックを入れて保存します。

AWS X-RayでAPI Gateway + Lambda + SNSをトレースする

SNS トレースの有効化

SNSのマネジメントコンソールでは有効化する設定が見当たりませんが、以下にある通りサポートをしているようです。

Amazon SNS で AWS X-Ray のサポートを追加

開発者ガイドを見ると、aws-xray-sdkモジュールのインストールが必要です。--saveでインストールします。

npm i aws-xray-sdk --save

これでLambdaを以下のように書き換えます。

const AWSXRay = require('aws-xray-sdk');
const aws = AWSXRay.captureAWS(require('aws-sdk')); // aws-sdkをAWSXRay.captureAWSの引数にする
const sns = aws.SNS({
  apiVersion: '2010-03-31',
  region: 'ap-southeast-2'
});

exports.handler = (event, context, callback) => {
  sns.publish({
    Message : '{"Message":"test"}',
    Subject : 'title',
    TopicArn: 'arn:aws:sns:ap-southeast-2:xxxxxxxxxxxx:test'
  }, function(err, data){
    if (err) {
      console.log(err);
      context.fail('fail');
    }
  });
  callback(null, 'OK');
};

これでAPI Gatewayをデプロイした後にGETでも実行します。そのあとにX-RayのTracesを見てみましょう。

AWS X-RayでAPI Gateway + Lambda + SNSをトレースする

機会があれば、API Gateway + Lambda + PinpointでX-Rayが正常表示されるか試してみたいと思います。

コメント

タイトルとURLをコピーしました