翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS FIS のターゲット
ターゲットは、実験中に AWS Fault Injection Service (AWS FIS) によってアクションが実行される 1 つ以上の 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 リソースネーム (ARN)。
- resourceTags
-
特定のリソースに適用するタグ。
- parameters
-
特定の属性でターゲットを識別するパラメータ。
- filters
-
リソースフィルターは、特定の属性で識別されるターゲットリソースの範囲を設定します。
- selectionMode
-
識別されたリソースの選択モード。
例については、「ターゲットの例」を参照してください。
リソースタイプ
各 AWS FIS アクションは、特定の AWS リソースタイプで実行されます。ターゲットを定義する場合は、厳密に 1 つのリソースタイプを指定する必要があります。アクションのターゲットを指定する場合、ターゲットはアクションでサポートされているリソースタイプである必要があります。
AWS FIS では、次のリソースタイプがサポートされています。
-
aws:dynamodb:global-table – Amazon DynamoDB グローバルテーブル
-
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 とリソースタグの両方を指定することはできません。
-
同一ターゲットのリソース ID とリソースフィルターの両方を指定することはできません。
-
タグ値が空のリソースタグを指定しても、ワイルドカードを指定することにはなりません。その場合、指定したタグキーと空のタグ値を持つタグがあるリソースが一対象になります。
リソースフィルター
リソースフィルターは、特定の属性に従ってターゲットリソースを識別するクエリです。 AWS FIS は、指定した AWS リソースタイプに従って、リソースの正規説明を含む API アクションの出力にクエリを適用します。クエリに一致する属性を持つリソースは、ターゲット定義に含まれます。
各フィルターは、属性パスと指定可能な値として表されます。パスは、ピリオドで区切られた一連の要素です。リソースの記述アクションの出力における属性までのパスを記述します。リソースの Describe アクションの出力がキャメルケースでも、各要素はパスカルケースで表現する必要があります。例えば、availablityZone
ではなく、AvailabilityZone
を属性要素として使用する必要があります。
"filters": [ { "path": "
component
.component
.component
", "values": [ "string
" ] } ],
次の表には、各リソースタイプの正規説明を取得するために使用できる 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 | DescribeTransitゲートウェイ | 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 | DescribeReplicationグループ | 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
– 必須。セレクタータイプ。指定できる値は、labelSelector
、deploymentName
および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 など)。
-
選択モード
選択モードを指定して、識別されたリソースの範囲を指定します。 AWS FIS は次の選択モードをサポートしています。
-
ALL
- すべてのターゲットに対してアクションを実行します。 -
COUNT(n)
— 識別されたターゲットからランダムに選択された、指定された数のターゲットに対してアクションを実行します。例えば、COUNT (1) は、識別されたターゲットの 1 つを選択します。 -
PERCENT(n)
— 識別されたターゲットからランダムに選択された、指定された割合のターゲットに対してアクションを実行します。例えば、PERCENT (25) では、識別されたターゲットの 25% が選択されます。
リソース数が奇数で、50% を指定した場合、 AWS FIS は切り下げます。例えば、5 つの Amazon EC2 インスタンスをターゲットとして追加し、スコープを 50% にすると、 AWS FIS は 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 がこれらのターゲットのいずれかをランダムに選択することを指定します。
{ "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 リソースタイプをサポートするアクションのフィルターを指定すると、 AWS FIS は 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" ] } ],