AWS FIS のターゲット - AWSFault Injection Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS FIS のターゲット

ターゲットとは、実験中に AWS Fault Injection Service (AWS FIS) によってアクションが実行される 1 つ以上の AWS リソースです。ターゲットは実験と同じ AWS アカウントに存在することができ、またマルチアカウント実験を使用する別のアカウントに存在することもできます。別のアカウントのリソースをターゲットにする方法の詳細については、「AWS FIS のマルチアカウント実験」を参照してください。

ターゲットは、実験テンプレートの作成を行う場合に定義します。実験テンプレートの複数のアクションに対して同じターゲットを使用できます。

AWS FIS はアクションセット内のアクションを開始する前に、実験の開始時にすべてのターゲットを識別します。AWSFIS は、実験全体に選択したターゲットリソースを使用します。ターゲットが見つからない場合、実験は失敗します。

ターゲット構文

次に、 ターゲットの構文を示します。

{ "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 リソースネーム (ARN)。

resourceTags

特定のリソースに適用するタグ。

parameters

特定の属性でターゲットを識別するパラメータ

filters

リソースフィルターは、特定の属性で識別されるターゲットリソースの範囲を設定します。

selectionMode

識別されたリソースの選択モード

例については、「ターゲットの例」を参照してください。

リソースタイプ

各 AWS FIS アクションは、特定の AWS リソースタイプで実行されます。ターゲットを定義する場合は、厳密に 1 つのリソースタイプを指定する必要があります。アクションのターゲットを指定する場合、ターゲットはアクションでサポートされているリソースタイプである必要があります。

AWS FIS では以下のリソースタイプをサポートしています。

  • aws:dynamodb:encrypted-global-table – カスタマーマネージドキーで暗号化された グローバルテーブル

  • aws:ec2:autoscaling-group – An Amazon EC2 Auto Scaling グループ

  • aws:ec2:ebs-volume - Amazon EBS ボリューム

  • aws:ec2:instance - Amazon EC2 インスタンス

  • aws:ec2:spot-instance - Amazon EC2 スポットインスタンス

  • 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 ポッド

  • aws:elasticache:redis-replicationgroup – Redis ElastiCache レプリケーショングループ

  • aws:iam:role — IAM ロール

  • aws:rds:cluster — Amazon Aurora DB クラスター

  • aws:rds:db — Amazon RDS DB インスタンス

  • aws:s3:bucket – Amazon S3 バケット

ターゲットリソースを識別する

AWS FIS コンソールでターゲットを定義すると、ターゲットにする特定の AWS リソース (特定のリソースタイプの) を選択できます。または、指定した基準に基づいて、AWS FIS でリソースのグループを識別します。

ターゲットリソースを識別するには、次の項目を指定できます。

  • リソース ID — 特定の AWS リソースのリソースID。すべてのリソース ID は、同じタイプのリソースを表す必要があります。

  • リソースタグ — 特定の AWS リソースに適用されるタグ。

  • リソースフィルター — 特定の属性を持つリソースを表すパスと値。詳細については、「リソースフィルター」を参照してください。

  • リソースパラメータ - 特定の基準を満たすリソースを表すパラメータ。詳細については、「リソースパラメータ」を参照してください。

考慮事項
  • 同一ターゲットのリソース ID とリソースタグの両方を指定することはできません。

  • 同一ターゲットのリソース ID とリソースフィルターの両方を指定することはできません。

  • タグ値が空のリソースタグを指定しても、ワイルドカードを指定することにはなりません。その場合、指定したタグキーと空のタグ値を持つタグがあるリソースが一対象になります。

リソースフィルター

リソースフィルターは、特定の属性に基づいてターゲットリソースを識別するクエリです。 AWSFIS は、指定したリソースタイプに従って、クエリを AWS リソースの正規記述がある API アクションの出力に適用します。クエリに一致する属性を持つリソースは、ターゲット定義に含まれます。

各フィルターは、属性パスと指定可能な値として表されます。パスは、ピリオドで区切られた一連の要素です。リソースの記述アクションの出力における属性までのパスを記述します。

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

次の表に示したのは、各リソースタイプの正規記述の取得に使用できる API アクションと AWS CLI コマンドです。AWSFIS はユーザーに代わってこれらのアクションを実行し、指定したフィルターを適用します。対応するドキュメントでは、デフォルトで結果に含まれるリソースについて説明します。例えば、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:rds:cluster DescribeDBClusters describe-db-clusters
aws:rds:db DescribeDBInstances describe-db-instances
aws:s3:bucket ListBuckets list-buckets

次のロジックは、すべてのリソースフィルターに適用されます。

  • フィルター内の値 — OR

  • フィルター間の値 — AND

例については、「フィルターの例」を参照してください。

リソースパラメータ

リソースパラメータは、特定の基準に従ってターゲットリソースを識別します。

以下のリソースタイプはパラメータをサポートします。

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 - オプション。ターゲットポッドがあるアベイラビリティーゾーン。例えば、us-east-1d です。ポッドのアベイラビリティーゾーンは、hostIP とクラスターサブネットの CIDR を比較して決定します。

  • clusterIdentifier – 必須。ターゲットの EKS クラスターの名前または ARN。

  • namespace – 必須。ターゲットポッドの Kubernetes 名前空間。

  • selectorType – 必須。セレクタータイプ。指定できる値は、labelSelectordeploymentName および podName です。

  • selectorValue – 必須。セレクター値。この値は、selectorType の値によって異なります。

  • targetContainerName - オプション。ポッド仕様で定義されたターゲットコンテナの名前。デフォルトは、各ターゲットポッド仕様で定義されている最初のコンテナです。

aws:rds:cluster
  • writerAvailabilityZoneIdentifiers - オプション。DB クラスターのライターのアベイラビリティーゾーン。使用できる値: アベイラビリティーゾーンの識別子のカンマ区切りリスト、all

aws:rds:db
  • availabilityZoneIdentifiers - オプション。影響を受ける DB インスタンスのアベイラビリティーゾーン。使用できる値: アベイラビリティーゾーンの識別子のカンマ区切りリスト、all

aws:elasticache:redis-replicationgroup
  • availabilityZoneIdentifier – 必須。ターゲットノードを含むアベイラビリティーゾーンのコード (us-east-1a など) または AZ ID (use1-az1 など)。

選択モード

識別されたリソースの範囲は、選択モードを指定して設定します。AWSFIS は、以下の選択モードをサポートします。

  • ALL - すべてのターゲットに対してアクションを実行します。

  • COUNT(n) — 識別されたターゲットからランダムに選択された、指定された数のターゲットに対してアクションを実行します。例えば、COUNT (1) は、識別されたターゲットの 1 つを選択します。

  • PERCENT(n) — 識別されたターゲットからランダムに選択された、指定された割合のターゲットに対してアクションを実行します。例えば、PERCENT (25) では、識別されたターゲットの 25% が選択されます。

リソース数が奇数で 50% と指定すると、AWS FIS は切り下げをします。例えば、5 つの Amazon EC2 インスタンスをターゲットとして追加して、スコープを 50% にすると、AWS は 2 つのインスタンスに切り下げます。1 リソース未満のパーセンテージは指定できません。例えば、4 つの Amazon EC2 インスタンスを追加し、スコープを 5% にすると、AWS FIS はインスタンスを選択できません。

同じターゲットリソースタイプで複数のターゲットを定義すると、AWS FIS は同じリソースを複数回選択できます。

使用する選択モードにかかわらず、指定したスコープでリソースが識別されない場合、実験は失敗します。

ターゲットの例

以下はターゲットの例です。

例: 指定した VPC 内の指定されたタグのインスタンス

この例で想定されるターゲットは、タグ env=prod の指定した VPC 内の Amazon EC2 インスタンスです。選択モードでは、AWS FIS がこの基準を満たすターゲットの 1 つをランダムに選択することを指定します。

{ "targets": { "randomInstance": { "resourceType": "aws:ec2:instance", "resourceTags": { "env": "prod" }, "filters": [ { "path": "VpcId", "values": [ "vpc-aabbcc11223344556" ] } ], "selectionMode": "COUNT(1)" } } }
例: 指定されたパラメータのあるタスク

この例で想定されるターゲットは、指定されたクラスターとサービスがある Amazon ECS タスクです。選択モードでは、AWS FIS は、これらのターゲットの 1 つをランダムに選択します。

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

フィルターの例

以下はフィルターの例です。

例: EC2インスタンス

aws:ec2:instance リソースタイプをサポートするアクションのフィルターを指定する場合、AWS FIS は Amazon EC2 の describe-instances コマンドを使用し、フィルターを適用してターゲットを識別します。

describe-instances コマンドは、各インスタンスが Instances の構造体である JSON 出力を返します。以下に示したのは、斜体でマークされたフィールドの出力の一部です。これらのフィールドで、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 クラスター (DB クラスター)

aws:rds:clusterリソースタイプをサポートするアクションのフィルターを指定すると、AWSFIS は Amazon RDS describe-db-clusters コマンドを実行し、フィルターを適用してターゲットを識別します。

describe-db-clusters コマンドは各 DB クラスターに対して次のような 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", ... } ]

特定の DB エンジンを使用する DB クラスターのみを返すリソースフィルターを適用するには、次の例に示すように Engine として属性パス aurora-postgresql として値を指定します。

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

特定のアベイラビリティーゾーン内の DB クラスターのみを返すリソースフィルターを適用するには、次の例に示すように、属性のパスと値を指定します。

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