Ruby のLambda関数に対するトレースの設定

Instana の AWS Lambda トレースを有効にして、パフォーマンスを監視し、問題を検出し、 Ruby ベースの AWS Lambda の実行状況を可視化します。

詳細については、 AWS Lambda tracing を参照してください。

サポートされるランタイム

  • Ruby 3.3
  • Ruby 3.2
  • Ruby 3.1
注: 2024年1月7日より、 AWS Lambda は Ruby 2.7 ランタイムをサポートしなくなりました。

AWS Lambda 関数の設定

以下の設定オプションのいずれかを使用することで、Lambda関数のトレースを有効にできます:

Ruby のLambda関数でトレース機能を有効にする

Lambda関数のトレース機能は、 AWS のWebコンソール、または以下の AWS 管理ツールのいずれかを使用して有効にできます:

AWS のWebコンソールを使用してトレースを有効にする

AWS のWebコンソールで Ruby のLambda関数のトレースを有効にするには、以下の手順を実行してください:

  1. 関数に Instana のLambdaレイヤーを追加します:

    1. Lambda 関数の設定ページで、 「レイヤー」 をクリックします。

      図 1. Lambdaレイヤー
      Lambdaレイヤー
    2. [ レイヤー] ボックスで、 [レイヤーを追加] をクリックします。

      図 2. 層の追加
      層の追加
    3. レイヤーの追加」 ページで、レイヤーのソースとして 「ARNを指定」 オプションを選択します。

    4. ARNを指定 」フィールドに、ご利用のリージョンに対応する「 Instana 」LambdaレイヤーのARNをコピーして貼り付けてください。 「 Instana 」Lambdaレイヤーに対応するARNは、 「 Instana 」 の「Lambdaレイヤー」セクションで確認できます。

    5. 追加 をクリックします。

      図 3. Instana の「 Ruby 」レイヤーを追加
      Instana の「 Ruby 」レイヤーを追加
  2. ハンドラ関数を実装する:

    次の例に示すように、 Ruby のラムダ関数を ` Instana.serverless.wrap_aws block` で囲み、イベントとコンテキストを引数として渡します。 このラッパーは、Lambdaの呼び出しに対して自動的にspanを生成し、トレースコンテキストを処理します。

    require 'bundler/setup'
    
    require 'json'
    require 'instana'
    
    def lambda_handler(event:, context:)
      Instana.serverless.wrap_aws(event, context) do
        # Your original Lambda function code goes here
        {
          statusCode: 200,
          body: {
            message: "Hello World!",
          }.to_json
        }
      end
    end
     

    ラッパー方式を採用すれば、既存のハンドラ関数の名前を維持したまま、 Instana のトレース機能を追加することができます。 AWS コンソールでLambdaハンドラーの設定を変更する必要はありません。

  3. 環境変数を設定します。

    以下の環境変数を追加します。

    • INSTANA_ENDPOINT_URL: サーバーレス監視のエンドポイント。 該当するリージョン用の、https://serverless- で始まる適切な値を使用していることを確認してください。
    • INSTANA_AGENT_KEY: エージェントキー。
    • LAMBDA_HANDLER: デフォルトのハンドラーを使用していない場合 lambda_function.lambda_handler、独自のハンドラー。

    これらの環境変数の正しい値は、 Instana のUIからも確認できます。 これらの環境変数の正しい値を取得するには、 [データソース] > [エージェントのインストール ] > [ AWS Lambda ] をクリックします。

AWS CLI を使用してトレースを有効にする

以下の例は、 AWS Lambda 関数における Instana との連携を自動化したい場合に、出発点として活用できる AWS のCLIコマンドを示しています:

# Do not copy and paste this verbatim!
# It will overwrite any previously defined collection of layers and
# environment variables.
aws --region $YOUR_REGION lambda update-function-configuration \
  --function-name $YOUR_LAMBDA_FUNCTION_NAME \
  --layers $INSTANA_LAYER_ARN \
  --environment ""Variables={INSTANA_ENDPOINT_URL=... , INSTANA_AGENT_KEY=... , LAMBDA_HANDLER=...}""
 
注: 他の言語の統合とは異なり、 Ruby の統合を使用する場合、ハンドラーの設定を変更する必要はありません。 Ruby との統合では、元のハンドラ関数を保持するラッパー方式が採用されています。

gemを手動 instana でインストールする

Instana のLambdaレイヤーを使用する代わりに、 Instana の Ruby Tracer gemを手動でインストールすることも可能です。 このオプションは、 FedRAMP-compliant 環境などの制限のある環境において推奨されます。

Ruby のLambda関数のトレースを有効にするには、以下の手順を実行してください:

  1. 関数プロジェクトに、 Instana Ruby の Tracer gem を依存関係として追加してください。 [1]
  2. Ruby のラムダ関数を ` Instana.serverless.wrap_aws block` で囲み、イベントとコンテキストを引数として渡します。
  3. Lambda関数に対して、以下の環境変数を設定してください:
    • INSTANA_ENDPOINT_URL : サーバーレス監視のエンドポイント。 該当するリージョン用の、https://serverless- で始まる適切な値を使用していることを確認してください。
    • INSTANA_AGENT_KEY : エージェントキー。
    • LAMBDA_HANDLER : デフォルトのハンドラーを使用していない場合 lambda_function.lambda_handler、独自のハンドラー。

トラブルシューティング

Ruby とLambdaの連携で問題が発生した場合は、以下の手順でトラブルシューティングを行ってください

  • お使いのリージョンに対して正しいレイヤーARNが使用されていることを確認してください。
  • 必要な環境変数がすべて正しく設定されていることを確認してください。
  • CloudWatch のログを確認し、 Instana との連携に関連するエラーメッセージがないか確認してください。
  • Lambda関数が Instana のバックエンドにアクセスできることを確認してください。

さらにサポートが必要な場合は、『 AWS Lambda 』のトラブルシューティングガイドを参照するか、 Instana のサポートまでお問い合わせください。

Instana Lambda レイヤー

Ruby 向けの「 AWS Lambda 」レイヤーの最新バージョンの ARN は、リージョンごとに以下の通りです

リージョン ARN
af-south-1 arn:aws:lambda:af-south-1:410797082306:layer:instana-ruby:8
ap-east-1 arn:aws:lambda:ap-east-1:410797082306:layer:instana-ruby:8
ap-northeast-1 arn:aws:lambda:ap-northeast-1:410797082306:layer:instana-ruby:8
ap-northeast-2 arn:aws:lambda:ap-northeast-2:410797082306:layer:instana-ruby:8
ap-northeast-3 arn:aws:lambda:ap-northeast-3:410797082306:layer:instana-ruby:8
ap-south-1 arn:aws:lambda:ap-south-1:410797082306:layer:instana-ruby:8
ap-south-2 arn:aws:lambda:ap-south-2:410797082306:layer:instana-ruby:8
ap-southeast-1 arn:aws:lambda:ap-southeast-1:410797082306:layer:instana-ruby:8
ap-southeast-2 arn:aws:lambda:ap-southeast-2:410797082306:layer:instana-ruby:8
ap-southeast-3 arn:aws:lambda:ap-southeast-3:410797082306:layer:instana-ruby:8
ap-southeast-4 arn:aws:lambda:ap-southeast-4:410797082306:layer:instana-ruby:8
ap-southeast-5 arn:aws:lambda:ap-southeast-5:410797082306:layer:instana-ruby:8
ap-southeast-7 arn:aws:lambda:ap-southeast-7:410797082306:layer:instana-ruby:8
ca-central-1 arn:aws:lambda:ca-central-1:410797082306:layer:instana-ruby:8
ca-west-1 arn:aws:lambda:ca-west-1:410797082306:layer:instana-ruby:8
cn-north-1 arn:aws-cn:lambda:cn-north-1:107998019096:layer:instana-ruby:8
cn-northwest-1 arn:aws-cn:lambda:cn-northwest-1:107998019096:layer:instana-ruby:8
eu-central-1 arn:aws:lambda:eu-central-1:410797082306:layer:instana-ruby:8
eu-central-2 arn:aws:lambda:eu-central-2:410797082306:layer:instana-ruby:8
eu-north-1 arn:aws:lambda:eu-north-1:410797082306:layer:instana-ruby:8
eu-south-1 arn:aws:lambda:eu-south-1:410797082306:layer:instana-ruby:8
eu-south-2 arn:aws:lambda:eu-south-2:410797082306:layer:instana-ruby:8
eu-west-1 arn:aws:lambda:eu-west-1:410797082306:layer:instana-ruby:8
eu-west-2 arn:aws:lambda:eu-west-2:410797082306:layer:instana-ruby:8
eu-west-3 arn:aws:lambda:eu-west-3:410797082306:layer:instana-ruby:8
il-central-1 arn:aws:lambda:il-central-1:410797082306:layer:instana-ruby:8
me-central-1 arn:aws:lambda:me-central-1:410797082306:layer:instana-ruby:null
me-south-1 arn:aws:lambda:me-south-1:410797082306:layer:instana-ruby:null
sa-east-1 arn:aws:lambda:sa-east-1:410797082306:layer:instana-ruby:8
us-east-1 arn:aws:lambda:us-east-1:410797082306:layer:instana-ruby:8
us-east-2 arn:aws:lambda:us-east-2:410797082306:layer:instana-ruby:8
us-west-1 arn:aws:lambda:us-west-1:410797082306:layer:instana-ruby:8
us-west-2 arn:aws:lambda:us-west-2:410797082306:layer:instana-ruby:8

中国地域のパターンは であり arn:aws-cn:lambda:${region}:107998019096:layer:instana-ruby:${layer-version} 、その他の地域のパターンは です arn:aws:lambda:${region}:410797082306:layer:instana-ruby:${layer-version}

常に最新バージョンを使用し、使用中のレイヤーのバージョンも定期的に更新して、新しいバージョンで提供される新機能や修正の恩恵を受けられるようにしてください。

  1. AWS Lambda の公式ドキュメントに従って、 依存関係を含む.zip形式のデプロイメントパッケージを作成してください。↩︎