的目標 AWS FIS - AWS 故障注入服務

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

的目標 AWS FIS

目標是在實驗期間 Fault Injection Service AWS (AWS FIS) 執行動作的一或多個 AWS 資源。目標可以位於與實驗相同的AWS帳戶,也可以位於使用多帳戶實驗的不同帳戶。若要進一步了解如何鎖定不同帳戶中的資源,請參閱 使用 的多帳戶實驗 AWS FIS

您可以在建立實驗範本時定義目標。您可以在實驗範本中針對多個動作使用相同的目標。

AWS FIS 會在實驗開始時識別所有目標,再啟動動作集中的任何動作。 AWS FIS 會使用其為整個實驗選取的目標資源。如果找不到目標,實驗會失敗。

目標語法

以下是目標的語法。

{ "targets": { "target_name": { "resourceType": "resource-type", "resourceArns": [ "resource-arn" ], "resourceTags": { "tag-key": "tag-value" }, "parameters": { "parameter-name": "parameter-value" }, "filters": [ { "path": "path-string", "values": ["value-string"] } ], "selectionMode": "value" } } }

當您定義目標時,請提供下列項目:

target_name

目標的名稱。

resourceType

資源類型

resourceArns

特定資源的 Amazon Resource Names (ARN)。

resourceTags

套用至特定資源的標籤。

parameters

使用特定屬性識別目標的參數

filters

資源篩選條件會使用特定屬性來範圍識別的目標資源。

selectionMode

已識別資源的選擇模式

如需範例,請參閱 範例目標

資源類型

每個 AWS FIS動作都會在特定 AWS 資源類型上執行。當您定義目標時,必須指定一個資源類型。當您為動作指定目標時,目標必須是 動作支援的資源類型。

支援下列資源類型 AWS FIS:

  • aws:dynamodb:global-table – Amazon DynamoDB 全域資料表

  • aws:ec2:autoscaling-group – Amazon EC2 Auto Scaling 群組

  • aws:ec2:ebs-volume – Amazon EBS磁碟區

  • aws:ec2:instance – Amazon EC2執行個體

  • aws:ec2:spot-instance – Amazon EC2 Spot 執行個體

  • aws:ec2:subnet – Amazon VPC子網路

  • aws:ec2:transit-gateway – 傳輸閘道

  • aws:ecs:cluster – Amazon ECS叢集

  • aws:ecs:task – Amazon ECS任務

  • aws:eks:cluster – Amazon EKS叢集

  • aws:eks:nodegroup – Amazon EKS節點群組

  • aws:eks:Pod – Kubernetes Pod

  • aws:elasticache:redis-replicationgroup – An ElastiCache (RedisOSS) Replication Group

  • aws:iam:role – IAM角色

  • aws:lambda:function – AWS Lambda 函數

  • aws:rds:cluster – Amazon Aurora 資料庫叢集

  • aws:rds:db – Amazon RDS 資料庫執行個體

  • aws:s3:bucket – Amazon S3 儲存貯體

識別目標資源

當您在 AWS FIS主控台中定義目標時,您可以選擇要鎖定的特定 AWS 資源 (特定資源類型)。或者,您可以 AWS FIS讓 根據您提供的條件來識別資源群組。

若要識別目標資源,您可以指定下列項目:

  • 資源 IDs – 特定 AWS 資源IDs的資源。所有資源IDs都必須代表相同類型的資源。

  • 資源標籤 – 套用至特定 AWS 資源的標籤。

  • 資源篩選條件 – 代表具有特定屬性之資源的路徑和值。如需詳細資訊,請參閱資源篩選條件

  • 資源參數 – 代表符合特定條件之資源的參數。如需詳細資訊,請參閱資源參數

考量事項
  • 您無法同時指定相同目標的資源 ID 和資源標籤。

  • 您無法同時指定相同目標的資源 ID 和資源篩選條件。

  • 如果您指定具有空白標籤值的資源標籤,則它不等同於萬用字元。它會比對具有具有指定標籤索引鍵之標籤和空白標籤值的資源。

  • 如果您指定多個標籤,則所有指定的標籤都必須存在於目標資源上,才能選取它 (AND)。

資源篩選條件

資源篩選條件是根據特定屬性識別目標資源的查詢。 AWS FIS 會根據您指定的資源類型,將查詢套用至包含 AWS 資源正式描述API的動作輸出。具有符合查詢之屬性的資源會包含在目標定義中。

每個篩選條件都以屬性路徑和可能的值表示。路徑是依句點分隔的元素序列,描述在資源的描述動作輸出中到達 屬性的路徑。每個期間代表 元素的擴展。每個元素必須以 Pascal 案例表示,即使資源描述動作的輸出是以駱駝案例表示。例如,您應該使用 AvailabilityZone,而非 availablityZone 屬性元素。

"filters": [ { "path": "Component.Component.Component", "values": [ "string" ] } ],

下列邏輯適用於所有資源篩選條件:

  • 如果提供多個篩選條件,包括具有相同路徑的篩選條件,則所有篩選條件都必須符合才能選取資源: AND

  • 如果為單一篩選條件提供多個值,則任何一個值都必須符合才能選取資源: OR

  • 如果在描述API呼叫的路徑位置找到多個值,則任何一個值都需要符合才能選取資源: OR

  • 若要比對標籤索引鍵/值對,您應該改為依標籤選取目標資源 (請參閱上述)。

下表包含您可以用來取得每個資源類型的正式描述API的動作和 AWS CLI 命令。 AWS FIS 會代表您執行這些動作,以套用您指定的篩選條件。根據預設,對應的文件會說明結果中包含的資源。例如,最近終止執行個體DescribeInstances的狀態文件可能會出現在結果中。

資源類型 API 動作 AWS CLI 命令
aws:ec2:autoscaling-group DescribeAutoScalingGroups describe-auto-scaling-groups
aws:ec2:ebs-volume DescribeVolumes describe-volumes
aws:ec2:instance DescribeInstances describe-instances
aws:ec2:subnet DescribeSubnets describe-subnets
aws:ec2:transit-gateway DescribeTransitGateways describe-transit-gateways
aws:ecs:cluster DescribeClusters describe-clusters
aws:ecs:task DescribeTasks describe-tasks
aws:eks:cluster DescribeClusters describe-clusters
aws:eks:nodegroup DescribeNodegroup describe-nodegroup
aws:elasticache:redis-replicationgroup DescribeReplicationGroups describe-replication-groups
aws:iam:role ListRoles list-roles
aws:lambda:function ListFunctions list-functions
aws:rds:cluster DescribeDBClusters describe-db-clusters
aws:rds:db DescribeDBInstances describe-db-instances
aws:s3:bucket ListBuckets list-buckets
aws:dynamodb:global-table DescribeTable describe-table

如需範例,請參閱 範例篩選條件

資源參數

資源參數會根據特定條件識別目標資源。

下列資源類型支援參數。

aws:ec2:ebs-volume
  • availabilityZoneIdentifier – 包含目標磁碟區的可用區域的程式碼 (例如 us-east-1a)。

aws:ec2:subnet
  • availabilityZoneIdentifier – 包含目標子網路之可用區域的程式碼 (例如 us-east-1a) 或 AZ ID (例如 use1-az1)。

  • vpc – VPC包含目標子網路的 。VPC 每個帳戶不支援超過一個。

aws:ecs:task
  • cluster – 包含目標任務的叢集。

  • service – 包含目標任務的服務。

aws:eks:pod
  • availabilityZoneIdentifier - 選用。包含目標 Pod 的可用區域。例如:us-east-1d。我們會比較 Pod 的 hostIP 和叢集子網路的 ,以判斷 Pod CIDR的可用區域。

  • clusterIdentifier - 必要。ARN 目標EKS叢集的名稱或 。

  • namespace - 必要。目標 Pod 的 Kubernetes 命名空間。

  • selectorType - 必要。選擇器類型。可能的值為 labelSelectordeploymentNamepodName

  • selectorValue - 必要。選擇器值。此值取決於 的值selectorType

  • targetContainerName - 選用。Pod 規格中定義的目標容器名稱。預設值是每個目標 Pod 規格中定義的第一個容器。

aws:lambda:function
  • functionQualifier - 選用。要目標的函數版本或別名。如果未指定任何限定詞,則會考慮將所有調用設定為目標。如果指定具有多個版本的別名,只要使用ARN包含別名的 叫用,則別名中包含的所有版本都會被視為目標。如果$LATEST使用特殊別名,ARN則會考慮對基本函數的呼叫,ARN以及 $LATEST中包含 的呼叫,以進行故障注入。如需 Lambda 版本的詳細資訊,請參閱 AWS Lambda 使用者指南中的管理 Lambda 函數版本

aws:rds:cluster
  • writerAvailabilityZoneIdentifiers - 選用。資料庫叢集寫入器的可用區域。可能的值為:可用區域識別符的逗號分隔清單,all

aws:rds:db
  • availabilityZoneIdentifiers - 選用。要受影響的資料庫執行個體可用區域。可能的值為:可用區域識別符的逗號分隔清單,all

aws:elasticache:redis-replicationgroup
  • availabilityZoneIdentifier - 必要。包含目標節點之可用區域的程式碼 (例如 us-east-1a) 或 AZ ID (例如 use1-az1)。

選擇模式

您可以透過指定選取模式來限制識別的資源範圍。 AWS FIS 支援下列選取模式:

  • ALL – 對所有目標執行 動作。

  • COUNT(n) – 對指定數量的目標執行動作,該目標是從已識別的目標隨機選擇。例如,COUNT(1) 選取其中一個已識別的目標。

  • PERCENT(n) – 對指定百分比的目標執行動作,該目標是從已識別的目標隨機選擇。例如,PERCENT(25) 會選取 25% 的已識別目標。

如果您有奇數的資源並指定 50%, AWS FIS 會捨棄。例如,如果您將五個 Amazon EC2執行個體新增為目標,範圍為 50%, AWS FIS 會捨棄為兩個執行個體。您無法指定少於一個資源的百分比。例如,如果您將四個 Amazon EC2執行個體和範圍新增至 5%, AWS FIS則 無法選取執行個體。

如果您使用相同的目標資源類型定義多個目標, AWS FIS 可以多次選取相同的資源。

無論您使用哪種選擇模式,如果您指定的範圍未識別任何資源,則實驗會失敗。

範例目標

以下是範例目標。

範例:指定 中VPC具有指定標籤的執行個體

此範例的可能目標為 中VPC指定標籤的 Amazon EC2執行個體 env=prod。 選擇模式會指定 AWS FIS 隨機選擇其中一個目標。

{ "targets": { "randomInstance": { "resourceType": "aws:ec2:instance", "resourceTags": { "env": "prod" }, "filters": [ { "path": "VpcId", "values": [ "vpc-aabbcc11223344556" ] } ], "selectionMode": "COUNT(1)" } } }
範例:具有指定參數的任務

此範例的可能目標為具有指定叢集和服務的 Amazon ECS任務。選擇模式會指定 AWS FIS隨機選擇其中一個目標。

{ "targets": { "randomTask": { "resourceType": "aws:ecs:task", "parameters": { "cluster": "myCluster", "service": "myService" }, "selectionMode": "COUNT(1)" } } }

範例篩選條件

以下是範例篩選條件。

範例:EC2執行個體

當您為支援 aws:ec2:instance 資源類型的動作指定篩選條件時, AWS FIS 會使用 Amazon EC2describe-instances命令並套用篩選條件來識別目標。

describe-instances 命令會傳回JSON輸出,其中每個執行個體都是 下的結構Instances。以下是部分輸出,其中包含以 標記的欄位italics。我們會提供範例,這些範例使用這些欄位來從JSON輸出的結構指定屬性路徑。

{ "Reservations": [ { "Groups": [], "Instances": [ { "ImageId": "ami-00111111111111111", "InstanceId": "i-00aaaaaaaaaaaaaaa", "InstanceType": "t2.micro", "KeyName": "virginia-kp", "LaunchTime": "2020-09-30T11:38:17.000Z", "Monitoring": { "State": "disabled" }, "Placement": { "AvailabilityZone": "us-east-1a", "GroupName": "", "Tenancy": "default" }, "PrivateDnsName": "ip-10-0-1-240.ec2.internal", "PrivateIpAddress": "10.0.1.240", "ProductCodes": [], "PublicDnsName": "ec2-203-0-113-17.compute-1.amazonaws.com", "PublicIpAddress": "203.0.113.17", "State": { "Code": 16, "Name": "running" }, "StateTransitionReason": "", "SubnetId": "subnet-aabbcc11223344556", "VpcId": "vpc-00bbbbbbbbbbbbbbbbb", ... "NetworkInterfaces": [ { ... "Groups": [ { "GroupName": "sec-group-1", "GroupId": "sg-a0011223344556677" }, { "GroupName": "sec-group-1", "GroupId": "sg-b9988776655443322" } ], ... }, ... }, ... { ... } ], "OwnerId": "123456789012", "ReservationId": "r-aaaaaabbbbb111111" }, ... ] }

若要使用資源篩選條件選取特定可用區域中的執行個體,請指定 的屬性路徑AvailabilityZone和可用區域的程式碼做為 值。例如:

"filters": [ { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ],

若要使用資源篩選條件選取特定子網路中的執行個體,請指定 的屬性路徑SubnetId和子網路的 ID 做為值。例如:

"filters": [ { "path": "SubnetId", "values": [ "subnet-aabbcc11223344556" ] } ],

若要選取處於特定執行個體狀態的執行個體,請指定 的屬性路徑Name和下列其中一個狀態名稱做為值: pending | running | shutting-down | terminated | stopping | | stopped。例如:

"filters": [ { "path": "State.Name", "values": [ "running" ] } ],

若要選取連接任何數個安全群組的執行個體,請指定具有 GroupId和多個安全群組 之屬性路徑的單一篩選條件IDs。例如:

"filters": [ { "path": "NetworkInterfaces.Groups.GroupId", "values": [ "sg-a0011223344556677", "sg-f1100110011001100" ] } ],

若要選取已連接所有數量安全群組的執行個體,請指定多個具有屬性路徑的篩選條件,GroupId以及每個篩選條件的單一安全群組 ID。例如:

"filters": [ { "path": "NetworkInterfaces.Groups.GroupId", "values": [ "sg-a0011223344556677" ] }, { "path": "NetworkInterfaces.Groups.GroupId", "values": [ "sg-b9988776655443322" ] } ],
範例:Amazon RDS叢集 (資料庫叢集)

當您為支援 aws:rds:cluster 資源類型的動作指定篩選條件時, AWS FIS 會執行 Amazon RDSdescribe-db-clusters命令並套用篩選條件以識別目標。

describe-db-clusters 命令會針對每個資料庫叢集傳回類似下列的JSON輸出。以下是部分輸出,其中包含標示為 的欄位italics。我們會提供範例,使用這些欄位從JSON輸出的結構指定屬性路徑。

[ { "AllocatedStorage": 1, "AvailabilityZones": [ "us-east-2a", "us-east-2b", "us-east-2c" ], "BackupRetentionPeriod": 7, "DatabaseName": "", "DBClusterIdentifier": "database-1", "DBClusterParameterGroup": "default.aurora-postgresql11", "DBSubnetGroup": "default-vpc-01234567abc123456", "Status": "available", "EarliestRestorableTime": "2020-11-13T15:08:32.211Z", "Endpoint": "database-1.cluster-example.us-east-2.rds.amazonaws.com", "ReaderEndpoint": "database-1.cluster-ro-example.us-east-2.rds.amazonaws.com", "MultiAZ": false, "Engine": "aurora-postgresql", "EngineVersion": "11.7", ... } ]

若要套用資源篩選條件,只傳回使用特定資料庫引擎的資料庫叢集,請將屬性路徑指定為 Engine,並將值指定為 aurora-postgresql,如下列範例所示。

"filters": [ { "path": "Engine", "values": [ "aurora-postgresql" ] } ],

若要套用僅傳回特定可用區域中資料庫叢集的資源篩選條件,請指定屬性路徑和值,如下列範例所示。

"filters": [ { "path": "AvailabilityZones", "values": [ "us-east-2a" ] } ],