

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# aws:lambda:function AWS FIS アクションを使用する
<a name="use-lambda-actions"></a>

**aws:lambda:function** アクションを使用して、 AWS Lambda 関数の呼び出しに障害を挿入できます。

これらのアクションでは、 AWS FIS マネージド拡張機能を使用して障害を挿入します。**aws:lambda:function** アクションを使用するには、拡張機能を Lambda 関数にレイヤーとしてアタッチし、 AWS FIS と拡張機能の間で通信するように Amazon S3 バケットを設定する必要があります。

**aws:lambda:function** をターゲットとする AWS FIS 実験を実行すると、 は Lambda 関数から Amazon S3 設定を AWS FIS 読み取り、次の図に示すように、指定された Amazon S3 の場所にフォールトインジェクション情報を書き込みます。

![\[AWS Fault Injection Service Lambda 拡張機能の設定を示す図。\]](http://docs.aws.amazon.com/ja_jp/fis/latest/userguide/images/Serverless-config-distro-3.png)


## アクション
<a name="supported-lambda-actions"></a>
+ [aws:lambda:invocation-add-delay](fis-actions-reference.md#invocation-add-delay)
+ [aws:lambda:invocation-error](fis-actions-reference.md#invocation-error)
+ [aws:lambda:invocation-http-integration-response](fis-actions-reference.md#invocation-http-integration-response)

## 制限事項
<a name="lambda-limitations"></a>
+  AWS FIS Lambda 拡張機能は、レスポンスストリーミングを使用する関数では使用できません。障害が適用されていなくても、 AWS FIS Lambda 拡張機能はストリーミング設定を抑制します。詳細については、 *AWS Lambda ユーザーガイド*の[「Lambda 関数のレスポンスストリーミング](https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html)」を参照してください。

## 前提条件
<a name="lambda-prerequisites"></a>

 AWS FIS Lambda アクションを使用する前に、次の 1 回限りのタスクが完了していることを確認してください。
+ **実験を開始する予定のリージョンに Amazon S3 バケットを作成します**。1 つの Amazon S3 バケットを複数の実験に使用して、複数の AWS アカウント間でバケットを共有できます。ただし、それぞれに個別のバケットが必要です AWS リージョン。
+ Amazon **Amazon S3 バケットへの Lambda 拡張機能の読み取りアクセスを許可する IAM ポリシーを作成します**。次のテンプレートでは、 を上記で作成した Amazon S3 バケットの名前`my-config-distribution-bucket`に置き換え、 を使用する Amazon S3 バケット内のフォルダの名前`FisConfigs`に置き換えます。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowListingConfigLocation",
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::my-config-distribution-bucket"],
            "Condition": {
                "StringLike": {
                    "s3:prefix": ["FisConfigs/*"]
                }
            }
        },
        {
            "Sid": "AllowReadingObjectFromConfigLocation",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": ["arn:aws:s3:::my-config-distribution-bucket/FisConfigs/*"]
        }
    ]
  }
  ```

------
+ **Amazon S3 バケットへの AWS FIS 実験の書き込みアクセスを許可する IAM ポリシーを作成する** - 次のテンプレートで、 を上記で作成した Amazon S3 バケットの名前`my-config-distribution-bucket`に置き換え、 を使用する Amazon S3 バケット内のフォルダの名前`FisConfigs`に置き換えます。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowFisToWriteAndDeleteFaultConfigurations",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::my-config-distribution-bucket/FisConfigs/*"
        },
        {
            "Sid": "AllowFisToInspectLambdaFunctions",
            "Effect": "Allow",
            "Action": [
                "lambda:GetFunction"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowFisToDoTagLookups",
            "Effect": "Allow",
            "Action": [
                "tag:GetResources"
            ],
            "Resource": "*"
        }
    ]
  }
  ```

------

## Lambda 関数の設定
<a name="configure-lambda-functions"></a>

影響を与えるすべての Lambda 関数について、以下のステップに従います。

1. 上記で作成した Amazon S3 読み取りアクセスポリシーを Lambda 関数にアタッチします。

1.  AWS FIS 拡張機能をレイヤーとして関数にアタッチします。レイヤー ARNs「」を参照してください[Lambda で利用可能な AWS FIS 拡張機能のバージョン](actions-lambda-extension-arns.md)。

1. `AWS_FIS_CONFIGURATION_LOCATION` 変数を、 などの Amazon S3 設定フォルダの ARN に設定します`arn:aws:s3:::my-config-distribution-bucket/FisConfigs/`。

1. `AWS_LAMBDA_EXEC_WRAPPER` 変数を `/opt/aws-fis/bootstrap` に設定します。

## AWS FIS 実験を設定する
<a name="configure-fis-experiment-lambda-actions"></a>

実験を実行する前に、前提条件で作成した Amazon S3 書き込みアクセスポリシーを AWS FIS Lambda アクションを使用する実験ロールにアタッチしていることを確認してください。 AWS FIS 実験のセットアップ方法の詳細については、「」を参照してください[FIS AWS 実験テンプレートの管理FIS AWS 実験の管理](experiments.md)。

## ログ記録
<a name="lambda-actions-logging"></a>

 AWS FIS Lambda 拡張機能は、コンソールと CloudWatch ログにログを書き込みます。ログ記録は、 `AWS_FIS_LOG_LEVEL`変数を使用して設定できます。サポートされている値は `INFO`、`WARN`、`ERROR` です。ログは、Lambda 関数用に設定されたログ形式で書き込まれます。

以下は、テキスト形式のログの例です。

```
2024-08-09T18:51:38.599984Z INFO AWS FIS EXTENSION - extension enabled 1.0.1
```

以下は、JSON 形式のログの例です。

```
{
  "timestamp": "2024-10-08T17:15:36.953905Z",
  "level": "INFO",
  "fields": {
    "message": "AWS FIS EXTENSION - adding 5000 milliseconds of latency to function invocation",
    "requestId":"0608bf70-908f-4a17-bbfe-3782cd783d8b"
  }
}
```

出力されたログを Amazon CloudWatch メトリクスフィルターで使用して、カスタムメトリクスを生成できます。メトリクスフィルターの詳細については、*Amazon CloudWatch Logs ユーザーガイド*の[「フィルターを使用したログイベントからのメトリクスの作成](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)」を参照してください。

### CloudWatch Embedded Metric Format (EMF) の使用
<a name="lambda-actions-emf-metrics"></a>

`AWS_FIS_EXTENSION_METRICS` 変数を に設定することで、EMF ログを出力するように AWS FIS Lambda 拡張機能を設定できます`all`。デフォルトでは、拡張機能は EMF ログを出力せず、`AWS_FIS_EXTENSION_METRICS`デフォルトは です`none`。EMF ログは、CloudWatch コンソールの `aws-fis-extension namespace` で公開されます。

`aws-fis-extension` 名前空間内で、グラフに表示する特定のメトリクスを選択できます。以下の例は、 `aws-fis-extension`名前空間で使用可能なメトリクスの一部を示しています。

![\[CloudWatch ダッシュボードの出力 EMF メトリクスのグラフ例。\]](http://docs.aws.amazon.com/ja_jp/fis/latest/userguide/images/emf-metrics-graph.png)


## 高度なトピック
<a name="lambda-actions-advanced-topics"></a>

このセクションでは、 が Lambda 拡張機能と特別なユースケースと AWS FIS どのように連携するかに関する追加情報を提供します。

**Topics**
+ [ポーリングについて](#understanding-polling)
+ [同時実行について](#understanding-concurrency)
+ [呼び出しの割合について](#understanding-invocation-percentage)
+ [SnapStart に関する特別な考慮事項](#considerations-for-snapshot)
+ [高速低頻度関数に関する特別な考慮事項](#considerations-for-fast-infrequent-functions)
+ [Lambda Runtime API プロキシを使用した複数の拡張機能の設定](#configuring-multiple-extensions)
+ [コンテナランタイム AWS FIS での の使用](#container-runtimes)
+ [AWS FIS Lambda 環境変数](#fis-extension-environment-variables)

### ポーリングについて
<a name="understanding-polling"></a>

障害がすべての呼び出しに影響を与え始めるまでに、最大 60 秒のランプアップ期間が発生することがあります。これは、Lambda 拡張機能が実験の開始を待っている間、設定情報をポーリングする頻度が低いためです。`AWS_FIS_SLOW_POLL_INTERVAL_SECONDS` 環境変数 (デフォルトは 60 秒) を設定することで、ポーリング間隔を調整できます。値が低いほどポーリングの頻度は高くなりますが、パフォーマンスへの影響とコストは大きくなります。また、障害が挿入されてから最大 20 秒のランプダウン期間が発生することもあります。これは、実験の実行中に拡張機能がポーリングする頻度が高いためです。

### 同時実行について
<a name="understanding-concurrency"></a>

同じ Lambda 関数を複数のアクションで同時にターゲットにすることができます。アクションがすべて異なる場合、すべてのアクションが適用されます。たとえば、エラーを返す前に初期遅延を追加できます。2 つの同一のアクションまたは競合するアクションが同じ関数に適用される場合、最も早い開始日のアクションのみが適用されます。

 次の図は、**aws:lambda:invocation-error** と **aws:lambda:invocation-http-integration-response** の 2 つの競合するアクションが重複していることを示しています。当初、**aws:lambda:invocation-error** は 11:38 にランプアップし、2 分間実行されます。その後、**aws:lambda:invocation-http-integration-response** は 11:39 に開始しようとしますが、最初のアクションが終了してから 11:40 まで有効になりません。実験のタイミングを維持するために、**aws:lambda:invocation-http-integration-response** は当初意図した時刻の 11:41 に終了します。

![\[Graphs showing error and response code percentages for x86 and arm during overlapping actions.\]](http://docs.aws.amazon.com/ja_jp/fis/latest/userguide/images/understanding-concurrency.png)


### 呼び出しの割合について
<a name="understanding-invocation-percentage"></a>

 AWS Fault Injection Service Lambda アクションは、**aws:lambda:function** ターゲットを使用して、1 つ以上の AWS Lambda 関数 ARNs を選択できます。これらの ARNs を使用すると、 AWS Fault Injection Service Lambda アクションは選択した Lambda 関数の呼び出しごとに障害を挿入できます。呼び出しのほんの一部に障害を挿入できるようにするには、各アクションで 0～100 の値を持つ `invocationPercentage`パラメータを指定できます。`invocationPercentage` パラメータを使用すると、呼び出し率が 100% 未満の場合でも、アクションが同時に実行されるようにできます。

### SnapStart に関する特別な考慮事項
<a name="considerations-for-snapshot"></a>

AWS Lambda SnapStart が有効になっている 関数は、実験がすでに実行されていても、最初の障害設定を取得する`AWS_FIS_SLOW_POLL_INTERVAL_SECONDS`前に の全期間待機する可能性が高くなります。これは、Lambda SnapStart が複数の実行環境の初期状態として単一のスナップショットを使用し、一時ストレージを保持するためです。 AWS Fault Injection Service Lambda 拡張機能では、ポーリング頻度が保持され、実行環境の初期化時の初期設定チェックがスキップされます。Lambda SnapStart の詳細については、ユーザーガイドの[「Lambda SnapStart による起動パフォーマンスの向上](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html)」を参照してください。 *AWS Lambda *

### 高速低頻度関数に関する特別な考慮事項
<a name="considerations-for-fast-infrequent-functions"></a>

Lambda 関数が平均ポーリング期間である 70 ミリ秒未満で実行される場合、ポーリングスレッドは障害設定を取得するために複数の呼び出しが必要になる場合があります。関数が 15 分に 1 回など頻繁に実行されない場合、ポーリングは完了しません。ポーリングスレッドを完了できるようにするには、 `AWS_FIS_POLL_MAX_WAIT_MILLISECONDS`パラメータを設定します。拡張機能は、関数を開始する前に、処理中のポーリングが終了するまで設定した期間まで待機します。これにより、課金される関数の期間が長くなり、一部の呼び出しで追加の遅延が発生することに注意してください。

### Lambda Runtime API プロキシを使用した複数の拡張機能の設定
<a name="configuring-multiple-extensions"></a>

Lambda 拡張機能は AWS Lambda 、ランタイム API プロキシを使用して、ランタイムに到達する前に関数呼び出しを傍受します。これを行うには、 AWS Lambda ランタイム API のプロキシをランタイムに公開し、その場所を `AWS_LAMBDA_RUNTIME_API`変数にアドバタイズします。

次の図は、Lambda Runtime API プロキシを使用した単一の拡張機能の設定を示しています。

![\[デフォルト設定。\]](http://docs.aws.amazon.com/ja_jp/fis/latest/userguide/images/Proxy-1.png)


ランタイム API プロキシパターンを使用して別の拡張機能で AWS FIS Lambda AWS Lambda 拡張機能を使用するには、カスタムブートストラップスクリプトを使用してプロキシをチェーンする必要があります。 AWS FIS Lambda 拡張機能は、次の環境変数を受け入れます。
+ `AWS_FIS_PROXY_RUNTIME_API_ENDPOINT` - AWS Lambda Runtime API のローカル IP とリスナーポート`127.0.0.1:9876`を表す形式の文字列を取得します。これは、 の元の値`AWS_LAMBDA_RUNTIME_API`でも、別のプロキシの場所でもかまいません。
+ `AWS_FIS_PROXY_LISTENER_PORT` - デフォルトでは、 AWS FIS 拡張機能が独自のプロキシを起動するポート番号を取得します`9100`。

これらの設定では、Lambda ランタイム API プロキシを 2 つの異なる順序で使用して、 AWS FIS 拡張機能を別の拡張機能とチェーンできます。

![\[Lambda API プロキシを使用する 2 つの連鎖された拡張機能。\]](http://docs.aws.amazon.com/ja_jp/fis/latest/userguide/images/lambda-runtime-api-proxy.png)


 AWS Lambda ランタイム API プロキシの詳細については、「 *AWS Lambda ユーザーガイド*」の[AWS Lambda 「ランタイム API プロキシ拡張機能を使用したランタイムのセキュリティとガバナンスの強化](https://aws.amazon.com/blogs/compute/enhancing-runtime-security-and-governance-with-the-aws-lambda-runtime-api-proxy-extension/)」および[「カスタムランタイムに Lambda ランタイム API を使用する](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html)」を参照してください。

### コンテナランタイム AWS FIS での の使用
<a name="container-runtimes"></a>

`AWS_LAMBDA_RUNTIME_API` 環境変数を受け入れるコンテナイメージを使用する AWS Lambda 関数の場合、以下の手順に従って Lambda AWS FIS 拡張機能をコンテナイメージにパッケージ化できます。

1. 拡張機能を抽出するレイヤーの ARN を決定します。ARN の検索方法の詳細については、「」を参照してください[Lambda 関数の設定](#configure-lambda-functions)。

1.  AWS Command Line Interface (CLI) を使用して、拡張機能 の詳細をリクエストします`aws lambda get-layer-version-by-arn --arn fis-extension-arn`。レスポンスには、署名付き URL を含む`Location`フィールドが含まれ、そこから FIS 拡張機能を ZIP ファイルとしてダウンロードできます。

1. 拡張機能のコンテンツを Docker ファイルシステムの に解凍`/opt`します。NodeJS Lambda ランタイムに基づく Dockerfile の例を次に示します。

   ```
   # extension installation #
   FROM amazon/aws-lambda-nodejs:12 AS builder
   COPY extension.zip extension.zip
   RUN yum install -y unzip
   RUN mkdir -p /opt
   RUN unzip extension.zip -d /opt
   RUN rm -f extension.zip
   FROM amazon/aws-lambda-nodejs:12
   WORKDIR /opt
   COPY --from=builder /opt .
   # extension installation finished #
   # JS example. Modify as required by your runtime
   WORKDIR ${LAMBDA_TASK_ROOT}
   COPY index.js package.json .
   RUN npm install
   CMD [ "index.handler" ]
   ```

コンテナイメージの詳細については、 *AWS Lambda ユーザーガイド*の[「コンテナイメージを使用して Lambda 関数を作成する](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)」を参照してください。

### AWS FIS Lambda 環境変数
<a name="fis-extension-environment-variables"></a>

以下は、 AWS FIS Lambda 拡張機能の環境変数のリストです。
+ `AWS_FIS_CONFIGURATION_LOCATION` - 必須。 AWS FIS がアクティブな障害設定を書き込み、拡張機能が障害設定を読み取る場所。場所は、バケットとパスを含む Amazon S3 ARN 形式である必要があります。例えば、`arn:aws:s3:::my-fis-config-bucket/FisConfigs/`。
+ `AWS_LAMBDA_EXEC_WRAPPER` - 必須。 AWS FIS Lambda 拡張機能の設定に使用される AWS Lambda [ラッパースクリプト](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html#runtime-wrapper)の場所。これは、 拡張機能に含まれている`/opt/aws-fis/bootstrap`スクリプトに設定する必要があります。
+ `AWS_FIS_LOG_LEVEL` ‐ オプション。 AWS FIS Lambda 拡張機能によって出力されるメッセージのログレベル。サポートされている値は `INFO`、`WARN`、`ERROR` です。設定されていない場合、 AWS FIS 拡張機能はデフォルトで になります`INFO`。
+ `AWS_FIS_EXTENSION_METRICS` ‐ オプション。指定できる値は `all` および `none` です。拡張機能に設定する`all`と、 の下に EMF メトリクスが出力されます`aws-fis-extension namespace`。
+ `AWS_FIS_SLOW_POLL_INTERVAL_SECONDS` ‐ オプション。設定すると、拡張機能が障害を挿入せず、障害設定が設定場所に追加されるのを待っている間、ポーリング間隔 (秒単位) が上書きされます。デフォルトは `60` です。
+ `AWS_FIS_PROXY_RUNTIME_API_ENDPOINT` ‐ オプション。設定すると、 の値が上書き`AWS_LAMBDA_RUNTIME_API`され、 AWS FIS 拡張機能が AWS Lambda ランタイム API とやり取りして関数の呼び出しを制御する場所が定義されます。など、IP:PORT が必要です`127.0.0.1:9000`。の詳細については`AWS_LAMBDA_RUNTIME_API`、「 ユーザーガイド」の[「カスタムランタイムに Lambda ランタイム API を使用する](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html)」を参照してください。 *AWS Lambda *
+ `AWS_FIS_PROXY_LISTENER_PORT` ‐ オプション。 AWS FIS Lambda 拡張機能が別の拡張機能またはランタイムで使用できる AWS Lambda ランタイム API プロキシを公開するポートを定義します。デフォルトは `9100` です。
+ `AWS_FIS_POLL_MAX_WAIT_MILLISECONDS` ‐ オプション。ゼロ以外の値に設定すると、この変数は、障害設定を評価してランタイムの呼び出しを開始する前に、拡張機能が処理中の非同期ポーリングが完了するまで待機するミリ秒数を定義します。デフォルトは `0` です。