翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ターゲットは、実験中に Fault Injection Service (AWS FIS) によってアクションが実行される 1 AWS つ以上の 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] − ElastiCache (Redis OSS) レプリケーショングループ
-
aws:iam:role — IAM ロール
-
aws:lambda:function – AWS Lambda 関数
-
aws:rds:cluster — Amazon Aurora DB クラスター
-
aws:rds:db — Amazon RDS DB インスタンス
-
aws:s3:bucket – Amazon S3 バケット
ターゲットリソースを識別する
AWS FIS コンソールでターゲットを定義する場合、ターゲットとする特定の AWS リソース (特定のリソースタイプのリソース) を選択できます。または、指定した条件に基づいてリソースのグループを AWS FIS に識別させることができます。
ターゲットリソースを識別するには、次の項目を指定できます。
考慮事項
-
同一ターゲットのリソース ID とリソースタグの両方を指定することはできません。
-
同一ターゲットのリソース ID とリソースフィルターの両方を指定することはできません。
-
タグ値が空のリソースタグを指定しても、ワイルドカードを指定することにはなりません。その場合、指定したタグキーと空のタグ値を持つタグがあるリソースが一対象になります。
-
複数のタグを指定する場合は、ターゲットリソースに指定されたすべてのタグが存在する必要があります (
AND
)。
リソースフィルター
リソースフィルターは、特定の属性に従ってターゲットリソースを識別するクエリです。 AWS FIS は、指定したリソースタイプに従って、 AWS リソースの正規説明を含む API アクションの出力にクエリを適用します。クエリに一致する属性を持つリソースは、ターゲット定義に含まれます。
各フィルターは、属性パスと指定可能な値として表されます。パスは、ピリオドで区切られた一連の要素です。リソースの記述アクションの出力における属性までのパスを記述します。各期間は、要素の拡張を表します。リソースの Describe アクションの出力がキャメルケースでも、各要素はパスカルケースで表現する必要があります。例えば、availablityZone
ではなく、AvailabilityZone
を属性要素として使用する必要があります。
"filters": [
{
"path": "Component
.Component
.Component
",
"values": [
"string
"
]
}
],
次のロジックは、すべてのリソースフィルターに適用されます。
同じパスを持つフィルターを含む複数のフィルターが指定されている場合、リソースを選択するにはすべてのフィルターを一致させる必要があります。
AND
1 つのフィルターに複数の値を指定する場合、リソースを選択するには 1 つの値を一致させる必要があります。
OR
describe API コールのパスの場所で複数の値が見つかった場合、リソースを選択するには 1 つの値と一致する必要があります。
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
- オプション。ターゲットポッドがあるアベイラビリティーゾーン。例えば、us-east-1d
と指定します。ポッドのアベイラビリティーゾーンは、hostIP とクラスターサブネットの CIDR を比較して決定します。clusterIdentifier
– 必須。ターゲットの EKS クラスターの名前または ARN。namespace
– 必須。ターゲットポッドの Kubernetes 名前空間。selectorType
– 必須。セレクタータイプ。指定できる値は、labelSelector
、deploymentName
およびpodName
です。selectorValue
– 必須。セレクター値。この値は、selectorType
の値によって異なります。targetContainerName
- オプション。ポッド仕様で定義されたターゲットコンテナの名前。デフォルトは、各ターゲットポッド仕様で定義されている最初のコンテナです。
- aws:lambda:function
-
-
functionQualifier
- オプション。ターゲットにする関数のバージョンまたはエイリアス。修飾子が指定されていない場合、すべての呼び出しがターゲットとして考慮されます。複数のバージョンを持つエイリアスが指定されている場合、エイリアスを含む ARN を使用して呼び出される限り、エイリアスに含まれるすべてのバージョンがターゲットとして考慮されます。特別なエイリアス$LATEST
を使用する場合、基本関数 ARN への呼び出しと ARN$LATEST
に含まれる を含む呼び出しは、フォールトインジェクションと見なされます。Lambda バージョンの詳細については、 AWS Lambda ユーザーガイドの「Lambda 関数のバージョンを管理する」を参照してください。
-
- 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 インスタンスです。選択モードでは、FIS AWS がこれらのターゲットのいずれかをランダムに選択することを指定します。
{
"targets": {
"randomInstance
": {
"resourceType": "aws:ec2:instance",
"resourceTags": {
"env
": "prod
"
},
"filters": [
{
"path": "VpcId",
"values": [
"vpc-aabbcc11223344556
"
]
}
],
"selectionMode": "COUNT(1)"
}
}
}
例: 指定されたパラメータのあるタスク
この例で想定されるターゲットは、指定されたクラスターとサービスがある Amazon ECS タスクです。選択モードでは、FIS AWS がこれらのターゲットのいずれかをランダムに選択することを指定します。
{
"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",
...
"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 を持つ 1 つのフィルターを指定します。以下に例を示します。
"filters": [
{
"path": "NetworkInterfaces.Groups.GroupId",
"values": [
"sg-a0011223344556677",
"sg-f1100110011001100"
]
}
],
多数のセキュリティグループがすべてアタッチされたインスタンスを選択するには、 の属性パスGroupId
と、各フィルターに 1 つのセキュリティグループ ID を持つ複数のフィルターを指定します。以下に例を示します。
"filters": [
{
"path": "NetworkInterfaces.Groups.GroupId",
"values": [
"sg-a0011223344556677"
]
},
{
"path": "NetworkInterfaces.Groups.GroupId",
"values": [
"sg-b9988776655443322"
]
}
],
例: 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" ]
}
],