Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AZ Availability: Power Interruption
Anda dapat menggunakan AZ Availability: Power Interruption skenario untuk menginduksi gejala yang diharapkan dari gangguan total daya di Availability Zone (AZ).
Skenario ini dapat digunakan untuk menunjukkan bahwa aplikasi Multi-AZ beroperasi seperti yang diharapkan selama gangguan daya AZ tunggal yang lengkap. Ini termasuk hilangnya komputasi zonal (Amazon EC2, EKS, dan ECS), tidak ada penskalaan ulang komputasi di AZ, kehilangan konektivitas subnet, failover RDS, failover, dan volume EBS yang tidak responsif. ElastiCache Secara default, tindakan yang tidak ditemukan targetnya akan dilewati.
Tindakan
Bersama-sama, tindakan berikut menciptakan banyak gejala yang diharapkan dari gangguan daya lengkap dalam satu AZ. Ketersediaan AZ: Gangguan Daya hanya memengaruhi layanan yang diperkirakan akan berdampak selama gangguan daya AZ tunggal. Secara default, skenario menyuntikkan gejala gangguan daya selama 30 menit dan kemudian, selama 30 menit tambahan, menyuntikkan gejala yang mungkin terjadi selama pemulihan.
Instans Berhenti
Selama gangguan daya AZ, EC2 instans di AZ yang terpengaruh akan mati. Setelah daya dipulihkan, instance akan reboot. AZ Availability: Power Interruption menyertakan aws:ec2:stop-instances untuk menghentikan semua instans di AZ yang terpengaruh selama durasi interupsi. Setelah durasi, instance dimulai ulang. Menghentikan EC2 instans yang dikelola oleh Amazon EKS menyebabkan pod EKS dependen dihapus. Menghentikan EC2 instans yang dikelola oleh Amazon ECS menyebabkan tugas ECS dependen dihentikan.
Tindakan ini menargetkan EC2 instance yang berjalan di AZ yang terpengaruh. Secara default, ini menargetkan instance dengan tag bernama AzImpairmentPower
dengan nilai. StopInstances
Anda dapat menambahkan tag ini ke instance Anda atau mengganti tag default dengan tag Anda sendiri di template eksperimen. Secara default, jika tidak ditemukan instance valid, tindakan ini akan dilewati.
Instans Stop-ASG
Selama gangguan daya AZ, EC2 instans yang dikelola oleh grup Auto Scaling di AZ yang terpengaruh akan dimatikan. Setelah daya dipulihkan, instance akan reboot. AZ Availability: Power Interruption menyertakan aws:ec2:stop-instances untuk menghentikan semua instans, termasuk yang dikelola oleh Auto Scaling, di AZ yang terpengaruh selama durasi interupsi. Setelah durasi, instance dimulai ulang.
Tindakan ini menargetkan EC2 instance yang berjalan di AZ yang terpengaruh. Secara default, ini menargetkan instance dengan tag bernama AzImpairmentPower
dengan nilai. IceAsg
Anda dapat menambahkan tag ini ke instance Anda atau mengganti tag default dengan tag Anda sendiri di template eksperimen. Secara default, jika tidak ditemukan instance valid, tindakan ini akan dilewati.
Jeda Peluncuran Instans
Selama gangguan daya AZ, panggilan EC2 API ke kapasitas penyediaan di AZ akan gagal. Secara khusus, hal-hal berikut APIs akan terpengaruh:ec2:StartInstances
,ec2:CreateFleet
, danec2:RunInstances
. AZ Availability: Power Interruption includes termasuk aws:ec2: api-insufficient-instance-capacity -error untuk mencegah instance baru disediakan di AZ yang terpengaruh.
Tindakan ini menargetkan peran IAM yang digunakan untuk menyediakan instance. Ini harus ditargetkan menggunakan ARN. Secara default, jika tidak ditemukan peran IAM yang valid, tindakan ini akan dilewati.
Jeda Penskalaan ASG
Selama gangguan daya AZ, panggilan EC2 API yang dilakukan oleh pesawat kontrol Auto Scaling untuk memulihkan kapasitas yang hilang di AZ akan gagal. Secara khusus, hal-hal berikut APIs akan terpengaruh:ec2:StartInstances
,ec2:CreateFleet
, danec2:RunInstances
. AZ Availability: Power Interruption termasuk aws:ec2: asg-insufficient-instance-capacity -error untuk mencegah instance baru disediakan di AZ yang terpengaruh. Ini juga mencegah Amazon EKS dan Amazon ECS dari penskalaan di AZ yang terpengaruh.
Tindakan ini menargetkan grup Auto Scaling. Secara default, ini menargetkan grup Auto Scaling dengan tag bernama AzImpairmentPower
dengan nilai. IceAsg
Anda dapat menambahkan tag ini ke grup Auto Scaling atau mengganti tag default dengan tag Anda sendiri di template eksperimen. Secara default, jika tidak ditemukan grup Auto Scaling yang valid, tindakan ini akan dilewati.
Jeda Konektivitas Jaringan
Selama gangguan daya AZ, jaringan di AZ tidak akan tersedia. Ketika ini terjadi, beberapa layanan AWS mungkin memerlukan waktu hingga beberapa menit untuk memperbarui DNS agar mencerminkan bahwa titik akhir pribadi di AZ yang terpengaruh tidak tersedia. Selama waktu ini, pencarian DNS dapat mengembalikan alamat IP yang tidak dapat diakses. AZ Availability: Power Interruption termasuk aws:network:disrupt-connectivity untuk memblokir semua konektivitas jaringan untuk semua subnet di AZ yang terpengaruh selama 2 menit. Ini akan memaksa batas waktu dan penyegaran DNS untuk sebagian besar aplikasi. Mengakhiri tindakan setelah 2 menit memungkinkan pemulihan DNS layanan regional selanjutnya sementara AZ terus tidak tersedia.
Tindakan ini menargetkan subnet. Secara default, ini menargetkan cluster dengan tag bernama AzImpairmentPower
dengan nilai. DisruptSubnet
Anda dapat menambahkan tag ini ke subnet Anda atau mengganti tag default dengan tag Anda sendiri di template percobaan. Secara default, jika tidak ditemukan subnet yang valid, tindakan ini akan dilewati.
Kegagalan RDS
Selama gangguan daya AZ, node RDS di AZ yang terpengaruh akan mati. Node RDS AZ tunggal di AZ yang terpengaruh akan sepenuhnya tidak tersedia. Untuk cluster multi-AZ, node penulis akan gagal menjadi AZ yang tidak terpengaruh dan node pembaca di AZ yang terpengaruh tidak akan tersedia. Untuk cluster multi-AZ, AZ Availability: Power Interruption termasuk aws:rds: failover-db-cluster untuk gagal jika penulis berada di AZ yang terpengaruh.
Tindakan ini menargetkan cluster RDS. Secara default, ini menargetkan cluster dengan tag bernama AzImpairmentPower
dengan nilai. DisruptRds
Anda dapat menambahkan tag ini ke kluster atau mengganti tag default dengan tag Anda sendiri di templat eksperimen. Secara default, jika tidak ditemukan cluster yang valid, tindakan ini akan dilewati.
Jeda Redis ElastiCache
Selama gangguan daya AZ, ElastiCache node di AZ tidak tersedia. AZ Availability: Power Interruption termasuk aws:elasticache: interrupt-cluster-az-power untuk mengakhiri ElastiCache node di AZ yang terpengaruh. Selama durasi interupsi, instans baru tidak akan disediakan di AZ yang terpengaruh, sehingga cluster akan tetap pada kapasitas yang berkurang.
Tindakan ini menargetkan ElastiCache cluster. Secara default, ini menargetkan cluster dengan tag bernama AzImpairmentPower
dengan nilai. ElasticacheImpact
Anda dapat menambahkan tag ini ke kluster atau mengganti tag default dengan tag Anda sendiri di templat eksperimen. Secara default, jika tidak ditemukan cluster yang valid, tindakan ini akan dilewati. Perhatikan bahwa hanya cluster dengan node penulis di AZ yang terpengaruh yang akan dianggap sebagai target yang valid.
Jeda EBS I/O
Setelah gangguan daya AZ, setelah daya dipulihkan, persentase instans yang sangat kecil mungkin mengalami volume EBS yang tidak responsif. AZ Availability: Power Interruption menyertakan aws:ebs:pause-io untuk membiarkan 1 volume EBS dalam keadaan tidak responsif.
Secara default, hanya volume yang disetel untuk bertahan setelah instance dihentikan yang ditargetkan. Tindakan ini menargetkan volume dengan tag bernama AzImpairmentPower
dengan nilaiAPIPauseVolume
. Anda dapat menambahkan tag ini ke volume Anda atau mengganti tag default dengan tag Anda sendiri di template eksperimen. Secara default, jika tidak ditemukan volume yang valid, tindakan ini akan dilewati.
Batasan
-
Skenario ini tidak termasuk kondisi berhenti. Kondisi berhenti yang benar untuk aplikasi Anda harus ditambahkan ke template percobaan.
-
Di AZ yang ditargetkan, Pod Amazon EKS yang berjalan EC2 akan dihentikan dengan node EC2 pekerja dan awal EC2 node baru akan diblokir. Namun, Pod Amazon EKS yang berjalan di AWS Fargate tidak didukung.
-
Di AZ yang ditargetkan, tugas Amazon ECS yang berjalan pada EC2 akan dihentikan dengan node EC2 pekerja dan memulai EC2 node baru akan diblokir. Namun, tugas Amazon ECS yang berjalan di AWS Fargate tidak didukung.
-
Amazon RDS Multi-AZ dengan dua instans DB siaga yang dapat dibaca tidak didukung. Dalam hal ini, instans akan dihentikan, RDS akan gagal, dan kapasitas akan segera disediakan kembali di AZ yang terpengaruh. Siaga yang dapat dibaca di AZ yang terpengaruh akan tetap tersedia.
Persyaratan
-
Tambahkan izin yang diperlukan ke peran eksperimen AWS FIS.
-
Tag sumber daya harus diterapkan pada sumber daya yang akan ditargetkan oleh eksperimen. Ini dapat menggunakan konvensi penandaan Anda sendiri atau tag default yang ditentukan dalam skenario.
Izin
Kebijakan berikut memberikan AWS FIS izin yang diperlukan untuk menjalankan eksperimen dengan AZ Availability: Power Interruption skenario. Kebijakan ini harus dilampirkan pada peran percobaan.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowFISExperimentLoggingActionsCloudwatch", "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-acl/*", "Condition": { "StringEquals": { "ec2:CreateAction": "CreateNetworkAcl", "aws:RequestTag/managedByFIS": "true" } } }, { "Effect": "Allow", "Action": "ec2:CreateNetworkAcl", "Resource": "arn:aws:ec2:*:*:network-acl/*", "Condition": { "StringEquals": { "aws:RequestTag/managedByFIS": "true" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkAclEntry", "ec2:DeleteNetworkAcl" ], "Resource": [ "arn:aws:ec2:*:*:network-acl/*", "arn:aws:ec2:*:*:vpc/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/managedByFIS": "true" } } }, { "Effect": "Allow", "Action": "ec2:CreateNetworkAcl", "Resource": "arn:aws:ec2:*:*:vpc/*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeManagedPrefixLists", "ec2:DescribeSubnets", "ec2:DescribeNetworkAcls" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:ReplaceNetworkAclAssociation", "Resource": [ "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-acl/*" ] }, { "Effect": "Allow", "Action": [ "rds:FailoverDBCluster" ], "Resource": [ "arn:aws:rds:*:*:cluster:*" ] }, { "Effect": "Allow", "Action": [ "rds:RebootDBInstance" ], "Resource": [ "arn:aws:rds:*:*:db:*" ] }, { "Effect": "Allow", "Action": [ "elasticache:DescribeReplicationGroups", "elasticache:InterruptClusterAzPower" ], "Resource": [ "arn:aws:elasticache:*:*:replicationgroup:*" ] }, { "Sid": "TargetResolutionByTags", "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "kms:CreateGrant" ], "Resource": [ "arn:aws:kms:*:*:key/*" ], "Condition": { "StringLike": { "kms:ViaService": "ec2.*.amazonaws.com" }, "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "ec2:DescribeVolumes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:PauseVolumeIO" ], "Resource": "arn:aws:ec2:*:*:volume/*" }, { "Sid": "AllowInjectAPI", "Effect": "Allow", "Action": [ "ec2:InjectApiError" ], "Resource": [ "*" ], "Condition": { "ForAnyValue:StringEquals": { "ec2:FisActionId": [ "aws:ec2:api-insufficient-instance-capacity-error", "aws:ec2:asg-insufficient-instance-capacity-error" ] } } }, { "Sid": "DescribeAsg", "Effect": "Allow", "Action": [ "autoscaling:DescribeAutoScalingGroups" ], "Resource": [ "*" ] } ] }
Skenario Konten
Konten berikut mendefinisikan skenario. JSON ini dapat disimpan dan digunakan untuk membuat template eksperimen menggunakan create-experiment-template
{ "targets": { "IAM-role": { "resourceType": "aws:iam:role", "resourceArns": [], "selectionMode": "ALL" }, "EBS-Volumes": { "resourceType": "aws:ec2:ebs-volume", "resourceTags": { "AzImpairmentPower": "ApiPauseVolume" }, "selectionMode": "COUNT(1)", "parameters": { "availabilityZoneIdentifier": "us-east-1a" }, "filters": [ { "path": "Attachments.DeleteOnTermination", "values": [ "false" ] } ] }, "EC2-Instances": { "resourceType": "aws:ec2:instance", "resourceTags": { "AzImpairmentPower": "StopInstances" }, "filters": [ { "path": "State.Name", "values": [ "running" ] }, { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ], "selectionMode": "ALL" }, "ASG": { "resourceType": "aws:ec2:autoscaling-group", "resourceTags": { "AzImpairmentPower": "IceAsg" }, "selectionMode": "ALL" }, "ASG-EC2-Instances": { "resourceType": "aws:ec2:instance", "resourceTags": { "AzImpairmentPower": "IceAsg" }, "filters": [ { "path": "State.Name", "values": [ "running" ] }, { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ], "selectionMode": "ALL" }, "Subnet": { "resourceType": "aws:ec2:subnet", "resourceTags": { "AzImpairmentPower": "DisruptSubnet" }, "filters": [ { "path": "AvailabilityZone", "values": [ "us-east-1a" ] } ], "selectionMode": "ALL", "parameters": {} }, "RDS-Cluster": { "resourceType": "aws:rds:cluster", "resourceTags": { "AzImpairmentPower": "DisruptRds" }, "selectionMode": "ALL", "parameters": { "writerAvailabilityZoneIdentifiers": "us-east-1a" } }, "ElastiCache-Cluster": { "resourceType": "aws:elasticache:redis-replicationgroup", "resourceTags": { "AzImpairmentPower": "DisruptElasticache" }, "selectionMode": "ALL", "parameters": { "availabilityZoneIdentifier": "us-east-1a" } } }, "actions": { "Pause-Instance-Launches": { "actionId": "aws:ec2:api-insufficient-instance-capacity-error", "parameters": { "availabilityZoneIdentifiers": "us-east-1a", "duration": "PT30M", "percentage": "100" }, "targets": { "Roles": "IAM-role" } }, "Pause-EBS-IO": { "actionId": "aws:ebs:pause-volume-io", "parameters": { "duration": "PT30M" }, "targets": { "Volumes": "EBS-Volumes" }, "startAfter": [ "Stop-Instances", "Stop-ASG-Instances" ] }, "Stop-Instances": { "actionId": "aws:ec2:stop-instances", "parameters": { "completeIfInstancesTerminated": "true", "startInstancesAfterDuration": "PT30M" }, "targets": { "Instances": "EC2-Instances" } }, "Pause-ASG-Scaling": { "actionId": "aws:ec2:asg-insufficient-instance-capacity-error", "parameters": { "availabilityZoneIdentifiers": "us-east-1a", "duration": "PT30M", "percentage": "100" }, "targets": { "AutoScalingGroups": "ASG" } }, "Stop-ASG-Instances": { "actionId": "aws:ec2:stop-instances", "parameters": { "completeIfInstancesTerminated": "true", "startInstancesAfterDuration": "PT30M" }, "targets": { "Instances": "ASG-EC2-Instances" } }, "Pause-network-connectivity": { "actionId": "aws:network:disrupt-connectivity", "parameters": { "duration": "PT2M", "scope": "all" }, "targets": { "Subnets": "Subnet" } }, "Failover-RDS": { "actionId": "aws:rds:failover-db-cluster", "parameters": {}, "targets": { "Clusters": "RDS-Cluster" } }, "Pause-ElastiCache": { "actionId": "aws:elasticache:interrupt-cluster-az-power", "parameters": { "duration": "PT30M" }, "targets": { "ReplicationGroups": "ElastiCache-Cluster" } } }, "stopConditions": [ { "source": "aws:cloudwatch:alarm", "value": "" } ], "roleArn": "", "tags": { "Name": "AZ Impairment: Power Interruption" }, "logConfiguration": { "logSchemaVersion": 2 }, "experimentOptions": { "accountTargeting": "single-account", "emptyTargetResolutionMode": "skip" }, "description": "Affect multiple resource types in a single AZ, targeting by tags and explicit ARNs, to approximate power interruption in one AZ." }