대상 AWS FIS - AWS 오류 주입 서비스

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

대상 AWS FIS

대상은 실험 중에 AWS Fault Injection Service(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" } } }

대상을 정의할 때 다음을 제공합니다.

target_name

대상의 이름입니다.

resourceType

리소스 유형.

resourceArns

특정 리소스의 Amazon 리소스 이름(ARN)입니다.

resourceTags

특정 리소스에 적용된 태그.

parameters

특정 속성을 사용하여 대상을 식별하는 파라미터.

filters

리소스 필터는 특정 속성을 사용하여 식별된 대상 리소스의 범위를 지정합니다.

selectionMode

식별된 리소스의 선택 모드.

예시는 예시 대상 섹션을 참조하세요.

리소스 유형

각 AWS FIS 작업은 특정 AWS 리소스 유형에서 수행됩니다. 대상을 정의할 때 리소스 유형을 하나만 지정해야 합니다. 작업의 대상을 지정하는 경우, 대상은 작업에서 지원하는 리소스 유형이어야 합니다.

다음 리소스 유형은 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 있습니다.

대상 리소스를 식별하기 위해 다음을 지정할 수 있습니다.

  • 리소스 IDs - 특정 리소스IDs의 AWS 리소스입니다. 모든 리소스는 동일한 유형의 리소스를 나타내IDs야 합니다.

  • 리소스 태그 - 특정 AWS 리소스에 적용되는 태그입니다.

  • 리소스 필터 - 특정 속성을 가진 리소스를 나타내는 경로와 값입니다. 자세한 내용은 리소스 필터 단원을 참조하십시오.

  • 리소스 파라미터 - 특정 기준을 충족하는 리소스를 나타내는 파라미터입니다. 자세한 내용은 리소스 파라미터 단원을 참조하십시오.

고려 사항
  • 동일한 대상에 리소스 ID와 리소스 태그를 모두 지정할 수는 없습니다.

  • 동일한 대상에 리소스 ID와 리소스 태그를 모두 지정할 수는 없습니다.

  • 빈 태그 값으로 리소스 태그를 지정하는 경우 와일드카드와 동일하지 않습니다. 지정된 태그 키와 빈 태그 값이 있는 태그가 있는 리소스를 매칭합니다.

  • 둘 이상의 태그를 지정하는 경우, 지정된 모든 태그가 대상 리소스에 있어야 태그를 선택할 수 있습니다(AND).

리소스 필터

리소스 필터는 특정 속성에 따라 대상 리소스를 식별하는 쿼리입니다. AWS FIS는 지정한 리소스 유형에 따라 AWS 리소스의 정식 설명이 포함된 API 작업의 출력에 쿼리를 적용합니다. 쿼리와 일치하는 속성을 가진 리소스는 대상 정의에 포함됩니다.

각 필터는 속성 경로 및 가능한 값으로 표현됩니다. 경로는 마침표로 구분된 일련의 요소로, 리소스에 대한 설명 작업 출력의 속성에 도달하기 위한 경로를 설명합니다. 각 기간은 요소의 확장을 나타냅니다. 리소스에 대한 Describe 작업의 출력이 카멜 표기법인 경우에도 각 요소는 파스칼 표기법으로 표현해야 합니다. 예를 들어, availablityZone이 아니라 AvailabilityZone을 속성 요소로 사용해야 합니다.

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

다음 로직은 모든 리소스 필터에 적용됩니다.

  • 경로가 동일한 필터를 포함하여 여러 필터가 제공되는 경우 리소스를 선택하려면 모든 필터를 매칭해야 합니다. AND

  • 단일 필터에 대해 여러 값이 제공되는 경우 리소스를 선택하려면 하나의 값과 일치해야 합니다. OR

  • 설명 API 호출의 경로 위치에서 여러 값이 발견되면 하나의 값이 일치해야 리소스를 선택할 수 있습니다. 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과 $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)은 식별된 대상 중 하나를 선택합니다.

  • PERCENT(n) - 식별된 대상에서 무작위로 선택한 지정된 비율의 대상에 대해 작업을 실행합니다. 예를 들어 PERCENT(25)는 식별된 대상의 25%를 선택합니다.

리소스 수가 홀수이고 50% AWS FIS를 지정하면 반올림됩니다. 예를 들어, 5개의 Amazon EC2 인스턴스를 대상으로 추가하고 범위를 50% AWS FIS로 설정하면 인스턴스가 2개로 반올림됩니다. 리소스 1개보다 작은 비율을 지정할 수 없습니다. 예를 들어 Amazon EC2 인스턴스 4개와 범위를 5% AWS FIS로 추가하면는 인스턴스를 선택할 수 없습니다.

동일한 대상 리소스 유형을 사용하여 여러 대상을 정의하는 경우 AWS FIS는 동일한 리소스를 여러 번 선택할 수 있습니다.

어떤 선택 모드를 사용하든, 지정한 범위에 리소스가 없는 것으로 확인되면 실험은 실패합니다.

예시 대상

예를 들면 다음과 같습니다.

예: 지정된 태그VPC로 지정된의 인스턴스

이 예제의 가능한 대상은 태그VPC로 지정된의 Amazon EC2 인스턴스입니다.env=prod. 선택 모드는가 이러한 대상 중 하나를 임의로 선택하도록 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 인스턴스

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 및 여러 보안 그룹에 대한 속성 경로가 있는 단일 필터를 지정합니다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" ] } ],