View a markdown version of this page

Gunakan AWS FIS aws:lambda:tindakan fungsi - AWS Layanan Injeksi Kesalahan

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

Gunakan AWS FIS aws:lambda:tindakan fungsi

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 menjalankan AWS FIS eksperimen yang menargetkan aws:lambda:function, AWS FIS baca konfigurasi Amazon S3 dari fungsi Lambda Anda dan tulis 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.

Tindakan

Batasan

  • Ek AWS FIS stensi 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 di panduan AWS Lambda pengguna.

Prasyarat

Sebelum menggunakan tindakan AWS FIS Lambda, pastikan Anda telah menyelesaikan tugas satu kali ini:

  • Buat bucket Amazon S3 di wilayah tempat Anda rencanakan untuk memulai eksperimen ‐ Anda dapat menggunakan satu bucket Amazon S3 untuk beberapa eksperimen dan berbagi bucket di antara beberapa AWS akun. 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, ganti my-config-distribution-bucket dengan nama bucket Amazon S3 yang Anda buat di atas dan FisConfigs 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 untuk AWS FIS eksperimen ke bucket Amazon S3 ‐ Di template berikut, ganti my-config-distribution-bucket dengan nama bucket Amazon S3 yang Anda buat di atas dan FisConfigs 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

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.

  2. Pasang AWS FIS ekstensi sebagai lapisan ke fungsi. Untuk informasi selengkapnya tentang layer ARN, lihatVersi yang tersedia dari AWS FIS ekstensi untuk Lambda.

  3. Atur AWS_FIS_CONFIGURATION_LOCATION variabel ke ARN folder konfigurasi Amazon S3, misalnyaarn:aws:s3:::my-config-distribution-bucket/FisConfigs/.

  4. Atur AWS_LAMBDA_EXEC_WRAPPER variabel ke/opt/aws-fis/bootstrap.

Konfigurasikan AWS FIS percobaan

Sebelum menjalankan eksperimen, pastikan Anda telah melampirkan kebijakan akses tulis Amazon S3 yang Anda buat dalam prasyarat ke peran eksperimen yang akan menggunakan tindakan AWS FIS Lambda. Untuk informasi selengkapnya tentang cara mengatur AWS FIS eksperimen, lihatMengelola AWS templat eksperimen FIS.

Pencatatan log

Ek AWS FIS stensi 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 dalam 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 di panduan pengguna Amazon CloudWatch Logs.

Menggunakan Format Metrik Ter CloudWatch tanam (EMF)

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

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 CloudWatch dasbor.

Topik lanjutan

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

Memahami polling

Anda mungkin melihat periode peningkatan hingga 60 detik sebelum kesalahan mulai mempengaruhi semua pemanggilan. Ini karena ekstensi Lambda jarang mensurvei informasi konfigurasi saat menunggu percobaan dimulai. Anda dapat menyesuaikan interval polling dengan mengatur variabel AWS_FIS_SLOW_POLL_INTERVAL_SECONDS lingkungan (default 60s). Nilai yang lebih rendah akan mensurvei lebih sering tetapi menimbulkan dampak kinerja dan biaya yang lebih besar. Anda mungkin juga melihat periode penurunan hingga 20 tahun setelah kesalahan disuntikkan. Ini karena jajak pendapat ekstensi lebih sering saat eksperimen sedang berjalan.

Memahami konkurensi

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 yang identik atau saling bertentangan diterapkan pada 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:in vocation-http-integration-response, tumpang tindih. Awalnya, aws:lambda:invocation-error naik pada pukul 11:38 dan berjalan selama 2 menit. Kemudian, aws:lambda:invocation-http-integration-response mencoba 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 semula 11:41.

Grafik kode kesalahan dan respons yang menunjukkan dua tindakan yang tumpang tindih dari 11:38 hingga 11:41 pada x86 dan arm.

Memahami persentase pemanggilan

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

Pertimbangan khusus untuk SnapStart

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 snapshot tunggal 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 di panduan AWS Lambda pengguna.

Pertimbangan khusus untuk fungsi cepat yang jarang

Jika fungsi Lambda Anda berjalan kurang dari durasi polling rata-rata 70 milidetik maka thread 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. Perpanjangan akan menunggu hingga durasi yang Anda tetapkan agar jajak pendapat dalam penerbangan selesai sebelum memulai fungsi. Perhatikan bahwa ini akan meningkatkan durasi fungsi yang ditagih dan menyebabkan penundaan tambahan pada beberapa pemanggilan.

Mengkonfigurasi beberapa ekstensi menggunakan proxy Lambda Runtime API

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

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

Konfigurasi default.

Untuk menggunakan ekstensi AWS FIS Lambda dengan ekstensi lain menggunakan pola proxy AWS Lambda Runtime API, Anda harus mengrantai proxy menggunakan skrip bootstrap khusus. Ek AWS FIS stensi 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 pendengar 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 proxynya sendiri, secara default9100.

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

Dua ekstensi beranTAI menggunakan proxy API Lambda.

Untuk informasi selengkapnya tentang proxy AWS Lambda Runtime API, lihat Meningkatkan keamanan dan tata kelola AWS Lambda runtime dengan ekstensi proxy Runtime API dan Menggunakan API runtime Lambda untuk runtime kustom di panduan AWS Lambda pengguna.

Penggunaan AWS FIS dengan runtime kontainer

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 tempat untuk mengekstrak ekstensi. Untuk informasi lebih lanjut tentang cara menemukan ARN, lihatKonfigurasikan fungsi Lambda.

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

  3. Buka zip konten ekstensi ke dalam sistem file /opt 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 di panduan AWS Lambda pengguna.

AWS FIS Variabel lingkungan lambda

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 pem AWS Lambda bungkus 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 AWS FIS Lambda. Nilai yang didukung adalah INFO, WARN, dan ERROR. Jika tidak disetel, AWS FIS ekstensi akan default keINFO.

  • AWS_FIS_EXTENSION_METRICS‐ Opsional. Kemungkinan nilainya adalah all and none. Jika disetel all ke ekstensi akan memancarkan metrik EMF di bawahaws-fis-extension namespace.

  • AWS_FIS_SLOW_POLL_INTERVAL_SECONDS‐ Opsional. Jika disetel akan mengganti interval polling (dalam detik) sementara ekstensi tidak menyuntikkan kesalahan dan menunggu konfigurasi kesalahan ditambahkan ke lokasi konfigurasi. Default ke 60.

  • AWS_FIS_PROXY_RUNTIME_API_ENDPOINT‐ Opsional. If 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. Mengh IP:PORT arapkan, misalnya,127.0.0.1:9000. Untuk informasi selengkap AWS_LAMBDA_RUNTIME_API nya, lihat Menggunakan API runtime Lambda untuk runtime kustom di panduan AWS Lambda pengguna.

  • AWS_FIS_PROXY_LISTENER_PORT‐ Opsional. Mendefinisikan port di mana ekstensi AWS FIS Lambda mengekspos proxy API AWS Lambda runtime 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 jajak pendapat asinkron dalam penerbangan selesai sebelum mengevaluasi konfigurasi kesalahan dan memulai pemanggilan runtime. Default ke 0. Saat menggunakan preventExecution set to true dalam aws:lambda:invocation-error tindakan, kami sarankan mengatur variabel ini ke setidaknya 2000 (2 detik) untuk memastikan ekstensi memiliki konfigurasi kesalahan terbaru sebelum memutuskan apakah akan memblokir eksekusi fungsi.