# Lambda 自動計装

> あなたのLambdaをOpenTelemetryで自動的に計装する

---

LLMS index: [llms.txt](/llms.txt)

---

OpenTelemetryコミュニティは、以下の言語用のスタンドアロン計装Lambdaレイヤーを提供しています。

- Java
- JavaScript
- Python
- Ruby

これらのレイヤーは、AWSポータルを使用してLambdaに追加し、アプリケーションを自動的に計装できます。
これらのレイヤーにはコレクターは含まれておらず、外部コレクターインスタンスを構成してデータを送信しない限り、追加する必要があります。

## OTel Collector LambdaレイヤーのARNを追加する {#add-the-arn-of-the-otel-collector-lambda-layer}

[Collector Lambdaレイヤーのガイダンス](../lambda-collector/)を参照して、アプリケーションにレイヤーを追加し、Collectorを設定してください。
これを最初に追加することをおすすめします。

## 言語要件 {#language-requirements}

     <ul class="nav nav-tabs" id="tabs-0" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
          data-td-tp-persist="java" aria-controls="tabs-00-00" aria-selected="true">
        Java
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
          data-td-tp-persist="javascript" aria-controls="tabs-00-01" aria-selected="false">
        JavaScript
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
          data-td-tp-persist="python" aria-controls="tabs-00-02" aria-selected="false">
        Python
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-03" role="tab"
          data-td-tp-persist="ruby" aria-controls="tabs-00-03" aria-selected="false">
        Ruby
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-0-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
        <p>Lambdaレイヤーは、Java 8, 11, 17 (Corretto) Lambdaランタイムをサポートしています。
サポートされているJavaのバージョンについては、<a href="/ja/docs/languages/java/">OpenTelemetry Java ドキュメント</a> を参照してください。</p>
<p><strong>注意:</strong> Javaの自動計装エージェントがLambdaレイヤー内にあります - 自動計装エージェントはAWS Lambdaの起動時間に顕著な影響を与えるので、初期化中に最初のリクエストでタイムアウトを起こさずに本番のリクエストに対応するためには、一般的にプロビジョニングされた同時実行とウォームアップリクエストと共にこれを使用する必要があります。</p>
<p>デフォルトでは、レイヤーのOTel Javaエージェントは、アプリケーション内のすべてのコードを自動計装しようとします。
これはLambdaのコールドスタートの起動時間に悪影響を及ぼす可能性があります。</p>
<p>アプリケーションで使用するライブラリ／フレームワークの自動計装のみを有効にすることをおすすめします。</p>
<p>特定の計装だけを有効にするには、以下の環境変数を使用します。</p>
<ul>
<li>
<p><code>OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED</code>: falseに設定すると、レイヤーの自動計装を無効にし、各計装を個別に有効にする必要があります。</p>
</li>
<li>
<p><code>OTEL_INSTRUMENTATION_&lt;NAME&gt;_ENABLED</code>: 特定のライブラリやフレームワークの自動計装を有効にするには true を設定します。<code>&lt;NAME&gt;</code>の部分を有効にしたい計装で置き換えます。利用可能な計装のリストについては、<a href="/ja/docs/zero-code/java/agent/disable/#suppressing-specific-agent-instrumentation">特定のエージェントの計装を抑制する</a> を参照してください。</p>
</li>
</ul>
<p>たとえば、LambdaとAWS SDKの自動計装だけを有効にするには、以下の環境変数を設定します。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="nv">OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED</span><span class="o">=</span><span class="nb">false</span>
</span></span><span class="line"><span class="cl"><span class="nv">OTEL_INSTRUMENTATION_AWS_LAMBDA_ENABLED</span><span class="o">=</span><span class="nb">true</span>
</span></span><span class="line"><span class="cl"><span class="nv">OTEL_INSTRUMENTATION_AWS_SDK_ENABLED</span><span class="o">=</span><span class="nb">true</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
        <p>Lambdaレイヤーは、Node.js v18+のLambdaランタイムをサポートしています。
サポートされるJavaScriptとNode.jsのバージョンの詳細については、<a href="https://github.com/open-telemetry/opentelemetry-js" target="_blank" rel="noopener" class="external-link">OpenTelemetry JavaScriptドキュメント</a>を参照してください。</p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0">
        <p>LambdaレイヤーはPython 3.9+のLambdaランタイムをサポートしています。
サポートされているPythonのバージョンについては、<a href="https://github.com/open-telemetry/opentelemetry-python/blob/main/README.md#supported-runtimes" target="_blank" rel="noopener" class="external-link">OpenTelemetry Pythonドキュメント</a> と <a href="https://pypi.org/project/opentelemetry-api/" target="_blank" rel="noopener" class="external-link">PyPi</a> のパッケージを参照してください。</p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-03" role="tabpanel" aria-labelled-by="tabs-00-03-tab" tabindex="0">
        <p>Lambda レイヤーは、Ruby 3.2 と 3.3 の Lambda ランタイムをサポートしています。
サポートされる OpenTelemetry Ruby SDK と API バージョンの詳細については、<a href="https://github.com/open-telemetry/opentelemetry-ruby/blob/main/README.md#compatibility" target="_blank" rel="noopener" class="external-link">OpenTelemetry Rubyドキュメント</a> と <a href="https://rubygems.org/search?query=opentelemetry" target="_blank" rel="noopener" class="external-link">RubyGem</a> のパッケージを参照してください。</p>

    </div>
</div>


## `AWS_LAMBDA_EXEC_WRAPPER` を設定する {#configure-aws_lambda_exec_wrapper}

Node.js、Java、Ruby、Pythonの場合は `AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler` を設定して、アプリケーションのエントリーポイントを変更します。
このラッパースクリプトは、自動計装を適用したLambdaアプリケーションを起動します。

## 計装LambdaレイヤーのARNを追加する {#add-the-arn-of-instrumentation-lambda-layer}

Lambda関数でOTelの自動計装を有効にするには、計装レイヤーとコレクターレイヤーを追加して設定し、トレースを有効にする必要があります。

1. AWSコンソールで、計装するLambda関数を開く。
2. 「レイヤー」セクションで、「レイヤーの追加」を選択します。
3. 「ARNを指定」でレイヤーのARNを貼り付け、「追加」を選択します。

あなたの言語の[最新の計装レイヤーリリース](https://github.com/open-telemetry/opentelemetry-lambda/releases)を見つけ、そのARNを使用します。
`<region>`タグをあなたのラムダがあるリージョンに変更します。

注意: ラムダレイヤーはリージョンで分かれたリソースで、公開されているリージョンでのみ使用できます。Lambda関数と同じリージョンでレイヤーを使用するようにしてください。コミュニティは、利用可能なすべてのリージョンでレイヤーを公開しています。

## SDKのエクスポーターの設定 {#configure-your-sdk-exporters}

gRPC/HTTPレシーバーを持つコレクターが組み込まれている場合、Lambdaレイヤーで使用されるデフォルトのエクスポーターは変更なしで動作します。
環境変数を更新する必要はありません。
ただし、プロトコルのサポートレベルやデフォルト値は言語によって異なります。

     <ul class="nav nav-tabs" id="tabs-1" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
          data-td-tp-persist="java" aria-controls="tabs-01-00" aria-selected="true">
        Java
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
          data-td-tp-persist="javascript" aria-controls="tabs-01-01" aria-selected="false">
        JavaScript
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-02" role="tab"
          data-td-tp-persist="python" aria-controls="tabs-01-02" aria-selected="false">
        Python
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-03" role="tab"
          data-td-tp-persist="ruby" aria-controls="tabs-01-03" aria-selected="false">
        Ruby
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-1-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
        <p><code>OTEL_EXPORTER_OTLP_PROTOCOL=grpc</code> は <code>grpc</code>、<code>http/protobuf</code> および <code>http/json</code>、<code>OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317</code> をサポートします。</p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
        <p>環境変数 <code>OTEL_EXPORTER_OTLP_PROTOCOL</code> はサポートされていません。ハードコードされたエクスポーターはプロトコル <code>http/protobuf</code> を使用します。<code>OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318</code></p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-02" role="tabpanel" aria-labelled-by="tabs-01-02-tab" tabindex="1">
        <p><code>OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf</code> は <code>http/protobuf</code> と <code>http/json</code> 、<code>OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318</code> をサポートします。</p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-03" role="tabpanel" aria-labelled-by="tabs-01-03-tab" tabindex="1">
        <p><code>OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf</code> は <code>http/protobuf</code> <code>OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318</code> をサポートします。</p>

    </div>
</div>


## Lambdaを公開する {#publish-your-lambda}

Lambdaの新しいバージョンを公開して、新しい変更と計装をデプロイします。
