本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
目標 AWS FIS
目標是一個或多個 AWS 執行動作的資源 AWS 故障注入服務AWS FIS)在實驗期間。目標可以與實驗在同一個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
"
}
}
}
當您定義目標時,請提供下列資訊:
如需範例,請參閱 範例目標。
資源類型
每個 AWS FIS動作是在特定的執行 AWS 資源類型。定義目標時,您必須只指定一種資源類型。當您指定動作的目標時,目標必須是動作支援的資源類型。
下列資源類型受到支援 AWS FIS:
-
aws: 動態:全域表 — Amazon DynamoDB 全域表
-
aw: ec2: 自動擴展組 — Amazon 自 Auto Scaling 組 EC2
-
aw:ec2: EBS-體積-Amazon 音量 EBS
-
aw:ec2: 實例 — 一個 Amazon 實例 EC2
-
aw:ec2: 現場實例 — Amazon 競價型實例 EC2
-
aw:ec2: 子網 — Amazon 子網 VPC
-
aw: ec2: 傳輸網關 — 一個傳輸網關
-
aws:EC:集群-Amazon 集群 ECS
-
提問:EC:任務-Amazon 的任務 ECS
-
aws:EK:集群-Amazon 集群 EKS
-
aws: EK: 節點組 — Amazon 節點組 EKS
-
aws: EKS: POD — 一個庫伯尼特斯吊艙
-
AW: 彈性:重新複製組 — 一個 (Redis 的) 複製組 ElastiCache OSS
-
aw:iam: 角色 — 角色 IAM
-
aws: RDS: 叢集 — Amazon Aurora 資料庫叢集
-
aws: RDS: db — Amazon 資料庫執行個體 RDS
-
aws:S3:桶-一個 Amazon S3 存儲桶
識別目標資源
當您定義目標 AWS FIS控制台,您可以選擇具體 AWS 要鎖定的資源 (特定資源類型)。或者,你可以讓 AWS FIS根據您提供的條件來識別資源群組。
若要識別目標資源,您可以指定下列項目:
考量事項
-
您無法同時為相同目標指定資源 ID 和資源標籤。
-
您無法同時為相同目標指定資源 ID 和資源篩選器。
-
如果您指定具有空白標籤值的資源標籤,則該標籤不等同於萬用字元。它匹配具有指定標籤鍵和空標籤值的標籤的資源。
資源篩選
資源篩選器是根據特定屬性識別目標資源的查詢。 AWS FIS將查詢套用至API動作的輸出,該動作包含 AWS 資源,根據您指定的資源類型。具有與查詢相符之屬性的資源會包含在目標定義中。
每個篩選器都以屬性路徑和可能的值表示。路徑是一系列元素,以句點分隔,描述在資源的「描述」動作輸出中達到屬性的路徑。每個元素必須在帕斯卡的情況下表示,即使描述動作的資源的輸出是駱駝情況下。例如,您應該使用AvailabilityZone
,而不是availablityZone
作為屬性元素。
"filters": [ { "path": "
component
.component
.component
", "values": [ "string
" ] } ],
下表包括動API作和 AWS CLI 可用來取得每個資源類型之規範描述的指令。 AWS FIS代表您執行這些動作,以套用您指定的篩選器。對應的文件說明預設包含在結果中的資源。例如,最近終止例證的DescribeInstances狀態文件可能會出現在結果中。
資源類型 | API動作 | AWS CLI command |
---|---|---|
aws:ec2:autoscaling-group | DescribeAutoScalingGroups | describe-auto-scaling-groups |
aws:ec2:ebs-volume | DescribeVolumes | 描述卷 |
aws:ec2:instance | DescribeInstances | 描述實例 |
aws:ec2:subnet | DescribeSubnets | describe-subnets |
aws:ec2:transit-gateway | DescribeTransitGateways | describe-transit-gateways |
aws:ecs:cluster | DescribeClusters | describe-clusters |
aws:ecs:task | DescribeTasks | 描述任務 |
aws:eks:cluster | DescribeClusters | describe-clusters |
aws:eks:nodegroup | DescribeNodegroup | 描述節點群組 |
aws:elasticache:redis-replicationgroup | DescribeReplicationGroups | describe-replication-groups |
aws:iam:role | ListRoles | 列表角色 |
aws:rds:cluster | D escribeDBClusters | describe-db-clusters |
aws:rds:db | D escribeDBInstances | describe-db-instances |
aws:s3:bucket | ListBuckets | 列表桶 |
下列邏輯適用於所有資源篩選器:
過濾器內的值-
OR
跨過濾器的值 —
AND
如需範例,請參閱 範例篩選。
資源參數
資源參數會根據特定條件識別目標資源。
下列資源類型支援參數。
- aws:ec2:ebs-volume
-
-
availabilityZoneIdentifier
— 包含目標磁碟區之可用區域的程式碼 (例如 us-east-1a)。
-
- aws:ec2:subnet
-
-
availabilityZoneIdentifier
— 包含目標子網路之可用區域的程式碼 (例如 us-east-1a) 或 AZ 識別碼 (例如,use1-az1)。 -
vpc
— 包VPC含目標子網路的。每個帳號不支援超過一VPC個。
-
- aws:ecs:task
-
cluster
— 包含目標作業的叢集。service
— 包含目標工作的服務。
- aws:eks:pod
-
availabilityZoneIdentifier
- 選用。包含目標網繭的可用區域。例如:us-east-1d
。我們透過比較網繭的 HoSTIP 和叢集子網路來判斷網繭CIDR的可用區域。clusterIdentifier
- 必要。目標EKS叢集ARN的名稱或。namespace
- 必要。目標網繭的 Kubernetes 命名空間。selectorType
- 必要。選擇器類型。可能的值為labelSelector
、deploymentName
和podName
。selectorValue
- 必要。選擇器值。此值取決於的值selectorType
。targetContainerName
- 選用。網繭規格中定義的目標容器名稱。預設值是每個目標網繭規格中定義的第一個容器。
- aws:rds:cluster
-
-
writerAvailabilityZoneIdentifiers
- 選用。資料庫叢集之寫入器的可用區域。可能的值為:以逗號分隔的可用區域識別碼清單、all
。
-
- aws:rds:db
-
-
availabilityZoneIdentifiers
- 選用。受影響之資料庫執行個體的可用區域。可能的值為:以逗號分隔的可用區域識別碼清單、all
。
-
- aws:elasticache:redis-replicationgroup
-
-
availabilityZoneIdentifier
- 必要。包含目標節點之可用區域的程式碼 (例如 US-east-1a) 或 AZ 識別碼 (例如,use1-az1)。
-
選擇模式
您可以透過指定選取模式來限定已識別資源的範圍。 AWS FIS支援下列選取模式:
-
ALL
— 在所有目標上執行動作。 -
COUNT(n)
— 對指定數目的目標執行動作,從識別的目標隨機選擇。例如,COUNT(1) 選取其中一個已識別的目標。 -
PERCENT(n)
— 對指定百分比的目標執行動作,從識別的目標隨機選擇。例如,PERCENT(25) 會選取已識別目標的 25%。
如果您有奇數數量的資源並指定 50%, AWS FIS向下四捨五入。例如,如果您新增五EC2個 Amazon 執行個體做為目標,並將範圍新增為 50%, AWS FIS向下捨入至兩個例證。您無法指定少於一個資源的百分比。例如,如果您新增四個 Amazon EC2 執行個體,並將範圍新增至 5%, AWS FIS無法選取執行個體。
如果您使用相同的目標資源類型定義多個目標, AWS FIS可以多次選取相同的資源。
無論您使用哪種選取模式,如果您指定的範圍未識別資源,則實驗都會失敗。
範例目標
以下是範例目標。
範例:具有指定標籤的指定中VPC的執行個體
此範例可能的目標是 Amazon EC2 執行個體位於指定VPC的標籤 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執行個體
當您為支援 aw:ec2: 執行個體資源類型的動作指定篩選器時, AWS FIS使用 Amazon EC2 describe-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",
...
},
...
{
...
}
],
"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" ] } ],
範例:Amazon RDS 叢集 (資料庫叢集)
當您為支援 aw: RDS: 叢集資源類型的動作指定篩選器時, AWS FIS執行 Amazon RDS describe-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",
...
}
]
若要套用僅傳回使用特定資料庫引擎之資料庫叢集的資源篩選器,請將屬性路徑指定aurora-postgresql
為Engine
和值,如下列範例所示。
"filters": [ { "path": "Engine", "values": [ "aurora-postgresql" ] } ],
若要套用僅傳回特定可用區域中資料庫叢集的資源篩選器,請指定屬性路徑和值,如下列範例所示。
"filters": [ { "path": "AvailabilityZones", "values": [ "us-east-2a" ] } ],