AWS FIS 대상 - AWS 장애 주입 서비스

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

AWS FIS 대상

대상은 실험 중에AWS FIS ( 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 리소스 유형에서 수행됩니다. 대상을 정의할 때 리소스 유형을 하나만 지정해야 합니다. 작업의 대상을 지정하는 경우, 대상은 작업에서 지원하는 리소스 유형이어야 합니다.

AWS FIS는 다음과 같은 리소스 유형을 지원합니다.

  • aws:dynamodb:글로벌 테이블 — 아마존 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 레디 스 복제 그룹

  • 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와 리소스 태그를 모두 지정할 수는 없습니다.

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

리소스 필터

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

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

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

다음 표에는 각 리소스 유형에 대한 표준 설명을 가져오는 데 사용할 수 있는 API 작업 및 AWS CLI 명령이 포함되어 있습니다. AWS FIS는 사용자를 대신하여 이러한 작업을 실행하여 지정된 필터를 적용합니다. 해당 설명서에는 기본적으로 결과에 포함되는 리소스가 설명되어 있습니다. 예를 들어 DescribeInstances 설명서에는 최근에 종료된 인스턴스가 결과에 표시될 수 있다고 나와 있습니다.

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

  • 필터 내 값 - 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입니다. 포드의 호스트 IP와 클러스터 서브넷의 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)은 식별된 대상 중 하나를 선택합니다.

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

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

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

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

예시 대상

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

예: 지정된 태그가 있는 지정된 VPC의 인스턴스

이 예제의 가능한 대상은 env=prod 태그가 있는 지정된 VPC의 Amazon EC2 인스턴스입니다. 선택 모드에서는 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 명령은 각 인스턴스가 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 리소스 유형을 지원하는 작업에 대한 필터를 지정하면 FIS는 Amazon RDS describe-db-clusters 명령을 AWS 실행하고 필터를 적용하여 대상을 식별합니다.

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" ] } ],