AWS 金融機構的目標 - AWS 故障注入服務

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

AWS 金融機構的目標

目標是在實驗期間由 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" } } }

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

目標名稱

目標的名稱。

resourceType

源類型

resourceArns

特定資源的 Amazon 資源名稱(ARN)。

resourceTags

套用至特定資源的標籤。

parameters

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

filters

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

selectionMode

已識別資源的選取模式

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

資源類型

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

AWS FIS 支援下列資源類型:

  • aws: 動態:全域表 — Amazon DynamoDB 全域

  • aw: ec2: 自動擴展組 — 一個 Amazon EC2 自 Auto Scaling 組

  • 想法:ec2: EBS-體積 — 一個 Amazon EBS 體積

  • 問:ec2:實例-一個 Amazon EC2 實例

  • aw:ec2: 現場實例 — 一個 Amazon EC2 現貨實例

  • aw: ec2: 子網 — Amazon VPC 子網

  • aw: ec2: 傳輸網關 — 一個傳輸網關

  • 出:EC:集群-Amazon ECS 集群

  • 出:EC:任務-Amazon ECS 任務

  • aws: EK: 集群 — 一個 Amazon EKS 集群

  • aws: EK: 節點組 — Amazon EKS 節點組

  • aws: EK: POD — 一個庫伯尼特斯吊艙

  • AW: 彈性:重新複製組 — Redis 的複製組 ElastiCache

  • aw:iam: 角色 — IAM 角色

  • aws: RDS: 叢集 — Amazon Aurora 資料庫叢集

  • awds: 資料庫 — 一個 Amazon RDS 資料庫執行個體

  • aws:S3:桶-一個 Amazon S3 存儲桶

識別目標資源

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

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

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

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

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

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

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

  • 您無法同時為相同目標指定資源 ID 和資源篩選器。

  • 如果您指定具有空白標籤值的資源標籤,則該標籤不等同於萬用字元。它匹配具有指定標籤鍵和空標籤值的標籤的資源。

資源篩選

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

每個篩選器都以屬性路徑和可能的值表示。路徑是一系列元素,以句點分隔,描述在資源的「述」動作輸出中達到屬性的路徑。每個元素必須在帕斯卡的情況下表示,即使描述動作的資源的輸出是駱駝情況下。例如,您應該使用AvailabilityZone,而不是availablityZone作為屬性元素。

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

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

資源類型 API 動作 AWS CLI 命令
aws:ec2:autoscaling-group DescribeAutoScalingGroups 描述自動縮放群組
aws:ec2:ebs-volume DescribeVolumes 描述卷
aws:ec2:instance DescribeInstances 描述實例
aws:ec2:subnet DescribeSubnets describe-subnets
aws:ec2:transit-gateway DescribeTransit閘道器 描述傳輸閘道
aws:ecs:cluster DescribeClusters describe-clusters
aws:ecs:task DescribeTasks 描述任務
aws:eks:cluster DescribeClusters describe-clusters
aws:eks:nodegroup DescribeNodegroup 描述節點群組
aws:elasticache:redis-replicationgroup DescribeReplication群組 描述複製群組
aws:iam:role ListRoles 列表角色
aws:rds:cluster DescribeDBClusters describe-db-clusters
aws:rds:db DescribeDBInstances 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 - 必要。選擇器類型。可能的值為 labelSelectordeploymentNamepodName

  • 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)— 對指定百分比的目標執行動作,從識別的目標隨機選擇。例如,百分比 (25) 會選取已識別目標的 25%。

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

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

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

範例目標

以下是範例目標。

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

此範例的可能目標是指定 VPC 中具有標籤env=prod的 Amazon EC2 執行個體。選取模式會指定 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。以下是部分輸出,其中包含標有斜體的欄位。我們將提供使用這些欄位從 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和下列其中一個狀態名稱作為值:pendingrunningshutting-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 輸出。以下是部分輸出,其中包含標有斜體的欄位。我們將提供使用這些欄位從 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-postgresqlEngine和值,如下列範例所示。

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

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

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