

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Gunakan tindakan AWS FIS aws:lambda: function
<a name="use-lambda-actions"></a>

Anda dapat menggunakan tindakan **aws:lambda:function** untuk menyuntikkan kesalahan ke dalam pemanggilan fungsi Anda. AWS Lambda 

Tindakan ini menggunakan ekstensi AWS FIS terkelola untuk menyuntikkan kesalahan. Untuk menggunakan tindakan **aws:lambda:function**, Anda harus melampirkan ekstensi sebagai lapisan ke fungsi Lambda Anda dan mengonfigurasi bucket Amazon S3 untuk berkomunikasi antara dan ekstensi. AWS FIS 

Saat Anda menjalankan AWS FIS eksperimen yang menargetkan **aws:lambda:function, baca** konfigurasi AWS FIS Amazon S3 dari fungsi Lambda dan menulis informasi injeksi kesalahan ke lokasi Amazon S3 yang ditentukan, seperti yang ditunjukkan pada diagram di bawah ini.

![\[Diagram yang menunjukkan konfigurasi ekstensi AWS Fault Injection Service Lambda.\]](http://docs.aws.amazon.com/id_id/fis/latest/userguide/images/Serverless-config-distro-3.png)


## Tindakan
<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)

## Batasan
<a name="lambda-limitations"></a>
+ Ekstensi AWS FIS Lambda tidak dapat digunakan dengan fungsi yang menggunakan streaming respons. Bahkan ketika tidak ada kesalahan yang diterapkan, ekstensi AWS FIS Lambda akan menekan konfigurasi streaming. Untuk informasi selengkapnya, lihat [Streaming respons untuk fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html) di panduan *AWS Lambda pengguna*.

## Prasyarat
<a name="lambda-prerequisites"></a>

Sebelum menggunakan tindakan AWS FIS Lambda, pastikan Anda telah menyelesaikan tugas satu kali ini:
+ **Buat bucket Amazon S3 di wilayah tempat Anda berencana untuk memulai eksperimen** - Anda dapat menggunakan satu bucket Amazon S3 untuk beberapa eksperimen dan berbagi bucket di antara beberapa akun. AWS Namun, Anda harus memiliki ember terpisah untuk masing-masing Wilayah AWS.
+ **Buat kebijakan IAM untuk memberikan akses baca untuk ekstensi Lambda ke bucket Amazon S3** - Di template berikut, `my-config-distribution-bucket` ganti dengan nama bucket Amazon S3 yang Anda buat di atas `FisConfigs` dan dengan nama folder di bucket Amazon S3 yang ingin Anda gunakan.

------
#### [ 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/*"]
        }
    ]
  }
  ```

------
+ **Buat kebijakan IAM untuk memberikan akses tulis AWS FIS percobaan ke bucket Amazon S3** - Di template berikut, `my-config-distribution-bucket` ganti dengan nama bucket Amazon S3 yang Anda buat di atas `FisConfigs` dan dengan nama folder di bucket Amazon S3 yang ingin Anda gunakan.

------
#### [ 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": "*"
        }
    ]
  }
  ```

------

## Konfigurasikan fungsi Lambda
<a name="configure-lambda-functions"></a>

Ikuti langkah-langkah di bawah ini untuk setiap fungsi Lambda yang ingin Anda pengaruhi:

1. Lampirkan kebijakan akses baca Amazon S3 yang dibuat di atas ke fungsi Lambda.

1. Pasang AWS FIS ekstensi sebagai lapisan ke fungsi. Untuk informasi lebih lanjut tentang layer ARNs, lihat[Versi AWS FIS ekstensi yang tersedia untuk Lambda](actions-lambda-extension-arns.md). 

1. Setel `AWS_FIS_CONFIGURATION_LOCATION` variabel ke ARN dari folder konfigurasi Amazon S3, misalnya. `arn:aws:s3:::my-config-distribution-bucket/FisConfigs/`

1. Atur `AWS_LAMBDA_EXEC_WRAPPER` variabel ke`/opt/aws-fis/bootstrap`.

## Konfigurasikan AWS FIS eksperimen
<a name="configure-fis-experiment-lambda-actions"></a>

Sebelum menjalankan eksperimen, pastikan Anda telah melampirkan kebijakan akses tulis Amazon S3 yang Anda buat dalam prasyarat ke peran eksperimen yang akan menggunakan tindakan Lambda. AWS FIS Untuk informasi selengkapnya tentang cara menyiapkan AWS FIS eksperimen, lihat[Mengelola AWS templat eksperimen FISMengelola eksperimen AWS FIS Anda](experiments.md).

## Pencatatan log
<a name="lambda-actions-logging"></a>

Ekstensi AWS FIS Lambda menulis log ke konsol dan CloudWatch log. Logging dapat dikonfigurasi menggunakan `AWS_FIS_LOG_LEVEL` variabel. Nilai yang didukung adalah `INFO`, `WARN`, dan `ERROR`. Log akan ditulis dalam format log yang dikonfigurasi untuk fungsi Lambda Anda.

Berikut ini adalah contoh log in format teks:

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

Berikut ini adalah contoh log dalam format 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"
  }
}
```

Log yang dipancarkan dapat digunakan dengan filter CloudWatch metrik Amazon untuk menghasilkan metrik khusus. Untuk informasi selengkapnya tentang filter metrik, lihat [Membuat metrik dari peristiwa log menggunakan filter](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html) di *panduan pengguna Amazon CloudWatch Logs*.

### Menggunakan Format Metrik CloudWatch Tertanam (EMF)
<a name="lambda-actions-emf-metrics"></a>

Anda dapat mengonfigurasi ekstensi AWS FIS Lambda untuk memancarkan log EMF dengan menyetel variabel ke. `AWS_FIS_EXTENSION_METRICS` `all` Secara default, ekstensi tidak memancarkan log EMF, dan `AWS_FIS_EXTENSION_METRICS` defaultnya. `none` Log EMF diterbitkan `aws-fis-extension namespace` di CloudWatch konsol.

Di dalam `aws-fis-extension` namespace, Anda dapat memilih metrik tertentu untuk ditampilkan dalam grafik. Contoh di bawah ini menunjukkan beberapa metrik yang tersedia di `aws-fis-extension` namespace.

![\[Contoh grafik metrik EMF keluaran di dasbor. CloudWatch\]](http://docs.aws.amazon.com/id_id/fis/latest/userguide/images/emf-metrics-graph.png)


## Topik lanjutan
<a name="lambda-actions-advanced-topics"></a>

Bagian ini memberikan informasi tambahan tentang cara AWS FIS kerja dengan ekstensi Lambda dan kasus penggunaan khusus.

**Topics**
+ [Memahami polling](#understanding-polling)
+ [Memahami konkurensi](#understanding-concurrency)
+ [Memahami persentase pemanggilan](#understanding-invocation-percentage)
+ [Pertimbangan khusus untuk SnapStart](#considerations-for-snapshot)
+ [Pertimbangan khusus untuk fungsi cepat yang jarang](#considerations-for-fast-infrequent-functions)
+ [Mengonfigurasi beberapa ekstensi menggunakan proxy API Lambda Runtime](#configuring-multiple-extensions)
+ [Menggunakan AWS FIS dengan runtime kontainer](#container-runtimes)
+ [AWS FIS Variabel lingkungan Lambda](#fis-extension-environment-variables)

### Memahami polling
<a name="understanding-polling"></a>

Anda mungkin melihat periode peningkatan hingga 60-an sebelum kesalahan mulai memengaruhi semua pemanggilan. Ini karena ekstensi Lambda jarang melakukan polling untuk informasi konfigurasi sambil menunggu percobaan dimulai. Anda dapat menyesuaikan interval polling dengan menyetel variabel `AWS_FIS_SLOW_POLL_INTERVAL_SECONDS` lingkungan (default 60an). Nilai yang lebih rendah akan lebih sering melakukan polling tetapi menimbulkan dampak kinerja dan biaya yang lebih besar. Anda mungkin juga melihat periode ramp-down hingga 20-an setelah kesalahan disuntikkan. Ini karena jajak pendapat ekstensi lebih sering saat eksperimen sedang berjalan.

### Memahami konkurensi
<a name="understanding-concurrency"></a>

Anda dapat menargetkan fungsi Lambda yang sama dengan beberapa tindakan secara bersamaan. Jika semua tindakan berbeda satu sama lain, maka semua tindakan akan diterapkan. Misalnya, Anda dapat menambahkan penundaan awal sebelum mengembalikan kesalahan. Jika dua tindakan identik atau bertentangan diterapkan ke fungsi yang sama, maka hanya tindakan dengan tanggal mulai paling awal yang akan diterapkan. 

 **Gambar di bawah ini menunjukkan dua tindakan yang saling bertentangan, **aws:lambda:invocation-error dan aws:lambda:**, tumpang tindih. invocation-http-integration-response** Awalnya, **aws:lambda:invocation-error** meningkat pada 11:38 dan berjalan selama 2 menit. Kemudian, **aws:lambda: invocation-http-integration-response** upaya untuk memulai pada 11:39, tetapi tidak mulai berlaku sampai 11:40 setelah tindakan pertama selesai. Untuk mempertahankan waktu percobaan, **aws:lambda: invocation-http-integration-response** masih selesai pada waktu yang dimaksudkan pada 11:41. 

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


### Memahami persentase pemanggilan
<a name="understanding-invocation-percentage"></a>

Tindakan AWS Fault Injection Service Lambda menggunakan target **aws:lambda:function** yang memungkinkan Anda memilih satu atau beberapa fungsi. AWS Lambda ARNs Dengan menggunakan ini ARNs, tindakan AWS Fault Injection Service Lambda dapat menyuntikkan kesalahan di setiap pemanggilan fungsi Lambda yang dipilih. Untuk memungkinkan Anda menyuntikkan kesalahan hanya ke dalam sebagian kecil pemanggilan, setiap tindakan memungkinkan Anda menentukan `invocationPercentage` parameter dengan nilai dari 0 hingga 100. Dengan menggunakan `invocationPercentage` parameter, Anda dapat memastikan bahwa tindakan bersamaan bahkan untuk persentase pemanggilan di bawah 100%. 

### Pertimbangan khusus untuk SnapStart
<a name="considerations-for-snapshot"></a>

AWS Lambda fungsi dengan SnapStart diaktifkan akan memiliki kemungkinan lebih tinggi untuk menunggu durasi penuh `AWS_FIS_SLOW_POLL_INTERVAL_SECONDS` sebelum mengambil konfigurasi kesalahan pertama, bahkan jika percobaan sudah berjalan. Ini karena Lambda SnapStart menggunakan satu snapshot sebagai status awal untuk beberapa lingkungan eksekusi dan mempertahankan penyimpanan sementara. Untuk ekstensi AWS Fault Injection Service Lambda itu akan mempertahankan frekuensi polling dan melewati pemeriksaan konfigurasi awal pada inisialisasi lingkungan eksekusi. *Untuk informasi selengkapnya tentang Lambda SnapStart, lihat [Meningkatkan kinerja startup dengan Lambda SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html) di panduan pengguna.AWS Lambda * 

### Pertimbangan khusus untuk fungsi cepat yang jarang
<a name="considerations-for-fast-infrequent-functions"></a>

Jika fungsi Lambda Anda berjalan kurang dari durasi polling rata-rata 70 milidetik, maka utas polling mungkin memerlukan beberapa pemanggilan untuk mendapatkan konfigurasi kesalahan. Jika fungsi berjalan jarang, misalnya setiap 15 menit sekali, maka jajak pendapat tidak akan pernah selesai. Untuk memastikan utas polling dapat selesai, atur `AWS_FIS_POLL_MAX_WAIT_MILLISECONDS` parameternya. Ekstensi akan menunggu hingga durasi yang Anda tetapkan untuk menyelesaikan polling dalam penerbangan sebelum memulai fungsi. Perhatikan bahwa ini akan meningkatkan durasi fungsi yang ditagih dan menyebabkan penundaan tambahan pada beberapa pemanggilan.

### Mengonfigurasi beberapa ekstensi menggunakan proxy API Lambda Runtime
<a name="configuring-multiple-extensions"></a>

Ekstensi Lambda menggunakan proxy AWS Lambda Runtime API untuk mencegat pemanggilan fungsi sebelum mencapai runtime. Ini dilakukan dengan mengekspos proxy untuk Runtime API ke AWS Lambda runtime dan mengiklankan lokasinya di variabel. `AWS_LAMBDA_RUNTIME_API` 

Diagram berikut menunjukkan konfigurasi untuk satu ekstensi menggunakan proxy Lambda Runtime API:

![\[Konfigurasi default.\]](http://docs.aws.amazon.com/id_id/fis/latest/userguide/images/Proxy-1.png)


Untuk menggunakan ekstensi AWS FIS Lambda dengan ekstensi lain menggunakan pola proxy AWS Lambda Runtime API, Anda harus menghubungkan proxy menggunakan skrip bootstrap khusus. Ekstensi AWS FIS Lambda menerima variabel lingkungan berikut:
+ `AWS_FIS_PROXY_RUNTIME_API_ENDPOINT`- Mengambil string dalam bentuk yang `127.0.0.1:9876` mewakili IP lokal dan port listener untuk AWS Lambda Runtime API. Ini bisa menjadi nilai asli `AWS_LAMBDA_RUNTIME_API` atau lokasi proxy lain.
+ `AWS_FIS_PROXY_LISTENER_PORT`- Mengambil nomor port di mana AWS FIS ekstensi harus memulai proxy sendiri, secara default`9100`.

Dengan pengaturan ini, Anda dapat menghubungkan AWS FIS ekstensi dengan ekstensi lain menggunakan proxy API Lambda Runtime dalam dua urutan berbeda.

![\[Dua ekstensi berantai menggunakan proxy API Lambda.\]](http://docs.aws.amazon.com/id_id/fis/latest/userguide/images/lambda-runtime-api-proxy.png)


*Untuk informasi selengkapnya tentang proxy AWS Lambda Runtime API, lihat [Meningkatkan keamanan dan tata kelola runtime dengan ekstensi proxy AWS Lambda Runtime API dan Menggunakan API runtime](https://aws.amazon.com/blogs/compute/enhancing-runtime-security-and-governance-with-the-aws-lambda-runtime-api-proxy-extension/) [Lambda untuk runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) kustom dalam panduan pengguna.AWS Lambda *

### Menggunakan AWS FIS dengan runtime kontainer
<a name="container-runtimes"></a>

Untuk AWS Lambda fungsi yang menggunakan gambar kontainer yang menerima variabel `AWS_LAMBDA_RUNTIME_API` lingkungan, Anda dapat mengemas ekstensi AWS FIS Lambda ke dalam gambar kontainer Anda dengan mengikuti langkah-langkah di bawah ini:

1. Tentukan ARN dari lapisan untuk mengekstrak ekstensi. Untuk informasi lebih lanjut tentang cara menemukan ARN, lihat. [Konfigurasikan fungsi Lambda](#configure-lambda-functions)

1. Gunakan AWS Command Line Interface (CLI) untuk meminta detail tentang ekstensi. `aws lambda get-layer-version-by-arn --arn fis-extension-arn` Respons akan berisi `Location` bidang yang berisi URL yang telah ditandatangani sebelumnya dari mana Anda dapat mengunduh ekstensi FIS sebagai file ZIP.

1. Buka zip konten ekstensi ke dalam `/opt` sistem file Docker Anda. Berikut ini adalah contoh Dockerfile berdasarkan runtime NodeJS Lambda:

   ```
   # 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" ]
   ```

Untuk informasi selengkapnya tentang gambar kontainer, lihat [Membuat fungsi Lambda menggunakan gambar kontainer](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html) di panduan *AWS Lambda pengguna*.

### AWS FIS Variabel lingkungan Lambda
<a name="fis-extension-environment-variables"></a>

Berikut ini adalah daftar variabel lingkungan untuk ekstensi AWS FIS Lambda
+ `AWS_FIS_CONFIGURATION_LOCATION`- Diperlukan. Lokasi di mana AWS FIS akan menulis konfigurasi kesalahan aktif dan ekstensi akan membaca konfigurasi kesalahan. Lokasi harus dalam format Amazon S3 ARN termasuk bucket dan path. Misalnya, `arn:aws:s3:::my-fis-config-bucket/FisConfigs/`.
+ `AWS_LAMBDA_EXEC_WRAPPER`- Diperlukan. Lokasi [skrip AWS Lambda pembungkus](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html#runtime-wrapper) yang digunakan untuk mengkonfigurasi ekstensi AWS FIS Lambda. Ini harus diatur ke `/opt/aws-fis/bootstrap` skrip yang disertakan dengan ekstensi.
+ `AWS_FIS_LOG_LEVEL`- Opsional. Tingkat log untuk pesan yang dipancarkan oleh ekstensi Lambda AWS FIS . Nilai yang didukung adalah `INFO`, `WARN`, dan `ERROR`. Jika tidak disetel, AWS FIS ekstensi akan default ke`INFO`.
+ `AWS_FIS_EXTENSION_METRICS`- Opsional. Kemungkinan nilainya adalah `all` and `none`. Jika disetel `all` ke ekstensi akan memancarkan metrik EMF di bawah. `aws-fis-extension namespace`
+ `AWS_FIS_SLOW_POLL_INTERVAL_SECONDS`- Opsional. Jika set akan mengganti interval polling (dalam hitungan detik) sementara ekstensi tidak menyuntikkan kesalahan dan menunggu konfigurasi kesalahan ditambahkan ke lokasi konfigurasi. Default ke `60`.
+ `AWS_FIS_PROXY_RUNTIME_API_ENDPOINT`- Opsional. Jika set akan mengganti nilai `AWS_LAMBDA_RUNTIME_API` untuk menentukan di mana AWS FIS ekstensi berinteraksi dengan API AWS Lambda runtime untuk mengontrol pemanggilan fungsi. Mengharapkan IP: PORT, misalnya,. `127.0.0.1:9000` *Untuk informasi selengkapnya`AWS_LAMBDA_RUNTIME_API`, lihat [Menggunakan API runtime Lambda untuk runtime kustom dalam panduan pengguna](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html).AWS Lambda *
+ `AWS_FIS_PROXY_LISTENER_PORT`- Opsional. Mendefinisikan port tempat ekstensi AWS FIS Lambda mengekspos proxy API runtime AWS Lambda yang dapat digunakan oleh ekstensi lain atau runtime. Default ke `9100`.
+ `AWS_FIS_POLL_MAX_WAIT_MILLISECONDS`- Opsional. Jika disetel ke nilai bukan nol, variabel ini menentukan jumlah milidetik ekstensi akan menunggu polling asinkron dalam penerbangan selesai sebelum mengevaluasi konfigurasi kesalahan dan memulai pemanggilan runtime. Default ke `0`.