翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
のターゲット AWS FIS
ターゲットは、実験中に 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 – 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 – An 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
– 必須。ARN ターゲットEKSクラスターの名前または 。namespace
– 必須。ターゲットポッドの Kubernetes 名前空間。selectorType
– 必須。セレクタータイプ。指定できる値は、labelSelector
、deploymentName
およびpodName
です。selectorValue
– 必須。セレクター値。この値は、selectorType
の値によって異なります。targetContainerName
- オプション。ポッド仕様で定義されたターゲットコンテナの名前。デフォルトは、各ターゲットポッド仕様で定義されている最初のコンテナです。
- aws:lambda:function
-
-
functionQualifier
- オプション。ターゲットにする関数のバージョンまたはエイリアス。修飾子が指定されていない場合、すべての呼び出しがターゲットとして考慮されます。複数のバージョンのエイリアスが指定されている場合、エイリアスを含む を使用して呼び出される限り、ARNエイリアスに含まれるすべてのバージョンがターゲットとして考慮されます。特別なエイリアス$LATEST
が使用されている場合、基本関数への呼び出しARNと、$LATEST
の を含む呼び出しARNは、障害挿入の対象となります。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を持つ指定された 内のインスタンス
この例で指定できるターゲットは、 タグVPCで指定された の Amazon EC2インスタンスです。env=prod。 選択モードでは、 が 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 コマンドは、各インスタンスが の構造である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",
...
"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
の属性パスと複数のセキュリティグループ を持つ 1 つのフィルターを指定しますIDs。以下に例を示します。
"filters": [ { "path": "NetworkInterfaces.Groups.GroupId", "values": [ "sg-a0011223344556677", "sg-f1100110011001100" ] } ],
多数のセキュリティグループがすべてアタッチされているインスタンスを選択するには、 の属性パスGroupId
と、各フィルターの単一のセキュリティグループ 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出力を返します。以下は、 でマークされたフィールドを含む部分的な出力です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",
...
}
]
特定の DB エンジンを使用する DB クラスターのみを返すリソースフィルターを適用するには、次の例に示すように Engine
として属性パス aurora-postgresql
として値を指定します。
"filters": [ { "path": "Engine", "values": [ "aurora-postgresql" ] } ],
特定のアベイラビリティーゾーン内の DB クラスターのみを返すリソースフィルターを適用するには、次の例に示すように、属性のパスと値を指定します。
"filters": [ { "path": "AvailabilityZones", "values": [ "us-east-2a" ] } ],