View a markdown version of this page

AZ: Perlambatan Aplikasi - AWS Layanan Injeksi Kesalahan

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

AZ: Perlambatan Aplikasi

Anda dapat menggunakan skenario AZ: Application Slowdown untuk memperkenalkan latensi tambahan antar sumber daya dalam satu Availability Zone (AZ). Latensi ini menciptakan banyak gejala perlambatan aplikasi, gangguan sebagian, kadang-kadang dikenal sebagai kegagalan abu-abu. Ini menambahkan latensi ke aliran jaringan antara sumber daya target. Aliran jaringan mewakili lalu lintas antara sumber daya komputasi - paket data yang membawa permintaan, respons, dan komunikasi lain antara server, kontainer, dan layanan Anda. Skenario ini dapat membantu memvalidasi pengaturan pengamatan, menyetel ambang alarm, menemukan sensitivitas aplikasi terhadap perlambatan, dan mempraktikkan keputusan operasional penting seperti evakuasi AZ.

Secara default, skenario menambahkan latensi 200 ms ke 100% aliran jaringan antara sumber daya target dalam AZ yang dipilih selama durasi 30 menit. Anda dapat menggunakan dialog Edit parameter bersama di konsol AWS FIS untuk menyesuaikan parameter berikut di tingkat skenario, yang kemudian berlaku untuk tindakan yang mendasarinya:

  • Zona Ketersediaan - Anda dapat memilih AZ untuk mengganggu dalam skenario.

  • Latensi milidetik (ms) - sesuaikan ini berdasarkan sensitivitas dan kebutuhan aplikasi Anda. Anda dapat mengatur latensi yang lebih rendah untuk aplikasi yang lebih sensitif atau lebih tinggi untuk menguji penanganan batas waktu, misalnya. Pertimbangkan untuk menggunakan kelipatan latensi aplikasi Anda saat ini sebagai dasar.

  • Persentase aliran - kurangi untuk mengganggu subset lalu lintas. Misalnya, Anda dapat menambahkan latensi 200ms yang mempengaruhi 25% aliran jaringan untuk pengujian yang lebih halus.

  • Durasi - mengatur berapa lama percobaan berjalan. Anda dapat mempersingkat untuk tes yang lebih cepat, atau menjalankan tes berkelanjutan yang lebih lama. Misalnya, atur durasi ke 2 jam untuk menguji mekanisme pemulihan Anda dalam kondisi terganggu.

  • Penargetan sumber daya - Anda dapat menentukan sumber daya target untuk skenario keseluruhan menggunakan tag (untuk instans EC2 atau tugas ECS di EC2 atau Fargate) atau label (untuk pod EKS di EC2). Anda dapat menentukan tag dan label Anda sendiri, atau menggunakan default yang disediakan dalam skenario. Jika Anda tidak ingin menggunakan tag atau label, Anda dapat mengedit tindakan untuk menargetkan sumber daya dengan menentukan parameter lain.

  • Kustomisasi - Jika Anda tidak ingin menargetkan sumber daya EC2 atau ECS, Anda dapat meninggalkan tindakan dengan tag default. Eksperimen tidak akan menemukan sumber daya apa pun untuk ditargetkan dan tindakan akan dilewati. Namun, jika Anda tidak ingin menargetkan sumber daya EKS, Anda harus menghapus tindakan dan target EKS dari skenario sepenuhnya, karena memerlukan pengenal cluster EKS untuk disediakan. Untuk penyesuaian yang lebih terperinci, Anda dapat memodifikasi tindakan individual dalam template percobaan secara langsung.

Tindakan

Bersama-sama, tindakan berikut membantu menciptakan banyak gejala perlambatan aplikasi dalam AZ tunggal dengan memperkenalkan latensi tambahan pada aliran jaringan, yang kemudian menyebar melalui aplikasi. Tindakan ini berjalan secara paralel, masing-masing menambahkan latensi 200ms selama 30 menit secara default. Setelah periode ini, latensi kembali ke tingkat normal. Skenario memerlukan setidaknya satu dari jenis sumber daya berikut untuk dijalankan: instans EC2, tugas ECS, atau pod EKS.

Latensi Jaringan ECS

AZ: Perlambatan Aplikasi mencakup aws:ecs:task-network-latency untuk memperkenalkan latensi untuk tugas EC S. Tindakan menargetkan tugas di AZ yang dipilih. Secara default, ini menargetkan tugas AZApplicationSlowdown dengan tag bernama dengan nilaiLatencyForECS. Anda dapat mengganti tag default dengan tag Anda sendiri, atau menambahkan tag skenario ke tugas Anda. Jika tidak ada tugas yang valid ditemukan, tindakan ini akan dilewati. Sebelum menjalankan eksperimen di ECS, Anda harus mengikuti langkah-langkah pengaturan untuk tindakan tugas ECS.

Latensi Jaringan EKS

AZ: Perlambatan Aplikasi menyertakan aws:eks:pod-network- latency untuk memperkenalkan latensi untuk pod EKS. Tindakan menargetkan pod di AZ yang dipilih. Secara default, ini menargetkan pod dalam cluster yang memiliki label dengan format key=value. Label default yang disediakan adalahAZApplicationSlowdown=LatencyForEKS. Anda dapat mengganti label default dengan label Anda sendiri, atau menambahkan label ini ke pod Anda. Jika tidak ditemukan pod valid, tindakan ini akan dilewati. Sebelum menjalankan eksperimen di EKS, Anda harus mengikuti langkah-langkah pengaturan untuk tindakan pod EKS.

Latensi Jaringan EC2

AZ: Perlambatan Aplikasi menggunakan tindakan aws:ssm:send-command untuk menjalankan dokumen guna memperkenalkan latensi untuk instans EC2. AWSFIS-Run-Network-Latency-Sources Tindakan menargetkan instance di AZ yang dipilih. Secara default, ini menargetkan instance AZApplicationSlowdown dengan tag bernama dengan nilaiLatencyForEC2. Anda dapat mengganti tag default dengan tag Anda sendiri, atau menambahkan tag ini ke instance Anda. Jika tidak ada instans valid yang ditemukan, tindakan ini akan dilewati. Sebelum menjalankan percobaan pada EC2 menggunakan SSM, Anda harus mengonfigurasi agen AWS Systems Manager.

Batasan

  • Skenario ini tidak termasuk kondisi berhenti. Kondisi berhenti yang benar untuk aplikasi Anda harus ditambahkan ke template percobaan.

Persyaratan

  • Tambahkan izin yang diperlukan ke peran eksperimen AWS FIS.

  • Anda perlu menargetkan satu atau lebih sumber daya dari salah satu dari 3 jenis berikut dalam AZ yang dipilih: instans EC2, tugas ECS, atau pod EKS.

  • Semua target skenario harus dalam VPC yang sama.

Izin

Untuk menjalankan skenario ini, Anda memerlukan peran IAM dengan kebijakan kepercayaan yang memungkinkan FIS mengambil peran dan kebijakan terkelola untuk jenis sumber daya yang Anda targetkan dalam percobaan: EC2, ECS, dan EKS. Saat Anda membuat template eksperimen dari skenario AZ: Application Slowdown, FIS membuat peran untuk Anda dengan kebijakan kepercayaan dan kebijakan terkelola AWS berikut:

Jika Anda menggunakan peran IAM yang ada untuk menjalankan skenario AZ: Application Slowdown, Anda dapat melampirkan kebijakan berikut untuk memberikan izin yang diperlukan kepada AWS FIS:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DescribeTasks", "Effect": "Allow", "Action": "ecs:DescribeTasks", "Resource": "*" }, { "Sid": "DescribeContainerInstances", "Effect": "Allow", "Action": "ecs:DescribeContainerInstances", "Resource": "arn:aws:ecs:*:*:container-instance/*/*" }, { "Sid": "DescribeInstances", "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Sid": "DescribeSubnets", "Effect": "Allow", "Action": "ec2:DescribeSubnets", "Resource": "*" }, { "Sid": "DescribeCluster", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:*:*:cluster/*" }, { "Sid": "TargetResolutionByTags", "Effect": "Allow", "Action": "tag:GetResources", "Resource": "*" }, { "Sid": "SendCommand", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ssm:*:*:managed-instance/*", "arn:aws:ssm:*:*:document/*" ] }, { "Sid": "ListCommands", "Effect": "Allow", "Action": [ "ssm:ListCommands" ], "Resource": "*" }, { "Sid": "CancelCommand", "Effect": "Allow", "Action": [ "ssm:CancelCommand" ], "Resource": "*" } ] }

Isi Skenario

Konten berikut mendefinisikan skenario. JSON ini dapat disimpan dan digunakan untuk membuat template percobaan menggunakan perintah create-experimentent-template dari AWS Command Line Interface (AWS CLI). Untuk versi terbaru skenario, kunjungi pustaka skenario di konsol FIS dan buka tab Konten.

{ "tags": { "Name": "AZ: Application Slowdown" }, "description": "Add latency between resources within a single AZ.", "actions": { "LatencyForEKS": { "actionId": "aws:eks:pod-network-latency", "parameters": { "delayMilliseconds": "200", "duration": "PT30M", "flowsPercent": "100", "interface": "DEFAULT", "kubernetesServiceAccount": "fis-service-account", "sources": "us-east-1a" }, "targets": { "Pods": "TargetsForEKS" } }, "LatencyForEC2": { "actionId": "aws:ssm:send-command", "parameters": { "duration": "PT30M", "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-Network-Latency-Sources", "documentParameters": "{\"DelayMilliseconds\":\"200\",\"Sources\":\"us-east-1a\",\"Interface\":\"DEFAULT\",\"TrafficType\":\"egress\",\"DurationSeconds\":\"1800\",\"FlowsPercent\":\"100\",\"InstallDependencies\":\"True\"}" }, "targets": { "Instances": "TargetsForEC2" } }, "LatencyForECS": { "actionId": "aws:ecs:task-network-latency", "parameters": { "delayMilliseconds": "200", "duration": "PT30M", "flowsPercent": "100", "installDependencies": "true", "sources": "us-east-1a", "useEcsFaultInjectionEndpoints": "true" }, "targets": { "Tasks": "TargetsForECS" }, "startAfter": [] } }, "targets": { "TargetsForEKS": { "parameters": { "availabilityZoneIdentifier": "us-east-1a", "clusterIdentifier": "", "namespace": "default", "selectorType": "labelSelector", "selectorValue": "AZApplicationSlowdown=LatencyForEKS" }, "resourceType": "aws:eks:pod", "selectionMode": "ALL" }, "TargetsForEC2": { "filters": [ { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "AZApplicationSlowdown": "LatencyForEC2" }, "resourceType": "aws:ec2:instance", "selectionMode": "ALL" }, "TargetsForECS": { "filters": [ { "path": "AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "AZApplicationSlowdown": "LatencyForECS" }, "resourceType": "aws:ecs:task", "selectionMode": "ALL" } }, "experimentOptions": { "accountTargeting": "single-account", "emptyTargetResolutionMode": "skip" }, "stopConditions": [ { "source": "none" } ] }