AZ: Application Slowdown - AWS Fault Injection 서비스

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

AZ: Application Slowdown

AZ: Application Slowdown 시나리오를 사용하여 단일 가용 영역(AZ) 내의 리소스 간에 추가 지연 시간을 도입할 수 있습니다. 이 지연 시간으로 인해 애플리케이션 속도가 느려지는 많은 증상, 즉 부분 중단이 발생하며, 회색 장애라고도 합니다. 대상 리소스 간의 네트워크 흐름에 지연 시간을 추가합니다. 네트워크 흐름은 요청, 응답 및 서버, 컨테이너 및 서비스 간의 기타 통신을 전달하는 데이터 패킷인 컴퓨팅 리소스 간의 트래픽을 나타냅니다. 시나리오는 관찰성 설정을 검증하고, 경보 임계값을 조정하고, 속도 저하에 대한 애플리케이션 민감도를 검색하고, AZ 대피와 같은 중요한 운영 결정을 연습하는 데 도움이 될 수 있습니다.

기본적으로 시나리오는 선택한 AZ 내의 대상 리소스 간 네트워크 흐름의 100%에 30분 동안 200ms의 지연 시간을 추가합니다. AWS FIS 콘솔에서 공유 파라미터 편집 대화 상자를 사용하여 시나리오 수준에서 다음 파라미터를 조정한 다음 기본 작업에 적용할 수 있습니다.

  • 가용 영역 - 시나리오에서 손상시킬 AZ를 선택할 수 있습니다.

  • 밀리초(ms) 지연 시간 - 애플리케이션의 민감도와 요구 사항에 따라 이를 조정합니다. 예를 들어 더 민감한 애플리케이션의 경우 지연 시간을 더 낮게 설정하거나 제한 시간 처리를 테스트하도록 더 높게 설정할 수 있습니다. 현재 애플리케이션 지연 시간의 배수를 기준으로 사용하는 것이 좋습니다.

  • 흐름 백분율 - 트래픽의 하위 집합을 손상하도록 줄입니다. 예를 들어 네트워크 흐름의 25%에 영향을 미치는 200ms 지연 시간을 추가하여 훨씬 더 미세한 테스트를 수행할 수 있습니다.

  • 기간 - 실험이 실행되는 기간을 설정합니다. 더 빠른 테스트를 위해 단축하거나 더 오래 지속되는 테스트를 실행할 수 있습니다. 예를 들어 손상된 조건에서 복구 메커니즘을 테스트하려면 기간을 2시간으로 설정합니다.

  • 리소스 대상 지정 - 태그(EC2 인스턴스 또는 EC2 또는 Fargate의 ECS 작업의 경우) 또는 레이블(ECEC2의 EKS 포드의 경우)을 사용하여 전체 시나리오에 대한 대상 리소스를 정의할 수 있습니다. 자체 태그와 레이블을 지정하거나 시나리오에 제공된 기본값을 사용할 수 있습니다. 태그 또는 레이블을 사용하지 않으려면 다른 파라미터를 지정하여 대상 리소스에 대한 작업을 편집할 수 있습니다.

  • 사용자 지정 - EC2 또는 ECS 리소스를 대상으로 지정하지 않으려면 작업을 기본 태그와 함께 그대로 둘 수 있습니다. 실험에서 대상으로 지정할 리소스를 찾지 못하고 작업을 건너뜁니다. 그러나 EKS 리소스를 대상으로 지정하지 않으려면 EKS 클러스터 식별자를 제공해야 하므로 시나리오에서 EKS 작업 및 대상을 완전히 제거해야 합니다. 보다 세분화된 사용자 지정을 위해 실험 템플릿에서 개별 작업을 직접 수정할 수 있습니다.

작업

다음 작업을 함께 수행하면 네트워크 흐름에 추가 지연 시간을 도입하여 단일 AZ에서 애플리케이션 속도 저하의 많은 증상을 생성한 다음 애플리케이션을 통해 전파할 수 있습니다. 이러한 작업은 병렬로 실행되며, 각 작업은 기본적으로 30분 동안 200ms의 지연 시간을 추가합니다. 이 기간이 지나면 지연 시간이 정상 수준으로 돌아갑니다. 시나리오를 실행하려면 EC2 인스턴스, ECS 작업 또는 EKS 포드 중 하나 이상의 리소스 유형이 필요합니다.

ECS 네트워크 지연 시간

AZ: Application Slowdown에는 ECS 작업에 지연 시간을 도입하기 위한 aws:ecs:task-network-latency가 포함되어 있습니다. 작업은 선택한 AZ의 작업을 대상으로 합니다. 기본적으로 태그 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html 이름이 이고 값이 인 태스크AZApplicationSlowdown를 대상으로 합니다LatencyForECS. 기본 태그를 자체 태그로 바꾸거나 태스크에 시나리오 태그를 추가할 수 있습니다. 유효한 작업을 찾을 수 없는 경우이 작업은 건너뜁니다. ECS에서 실험을 실행하기 전에 ECS 작업 작업에 대한 설정 단계를 따라야 합니다.

EKS 네트워크 지연 시간

AZ: Application Slowdown에는 EKS 포드의 지연 시간을 도입하기 위한 aws:eks:eks:pod-network-latency가 포함되어 있습니다. 작업은 선택한 AZ의 포드를 대상으로 합니다. 기본적으로 key=value 형식의 레이블이 있는 클러스터 내의 포드를 대상으로 합니다. 제공된 기본 레이블은 입니다AZApplicationSlowdown=LatencyForEKS. 기본 레이블을 자체 레이블로 바꾸거나 포드에이 레이블을 추가할 수 있습니다. 유효한 포드를 찾을 수 없는 경우이 작업은 건너뜁니다. EKS에서 실험을 실행하기 전에 EKS 포드 작업에 대한 설정 단계를 따라야 합니다.

EC2 네트워크 지연 시간

AZ: Application Slowdown은 aws:ssm:send-command 작업을 사용하여 AWSFIS-Run-Network-Latency-Sources 문서를 실행하여 EC2 인스턴스에 지연 시간을 도입합니다. 작업은 선택한 AZ의 인스턴스를 대상으로 합니다. 기본적으로 값이 인 태그AZApplicationSlowdown가 있는 인스턴스를 대상으로 합니다LatencyForEC2. 기본 태그를 자체 태그로 바꾸거나이 태그를 인스턴스에 추가할 수 있습니다. 유효한 인스턴스를 찾을 수 없는 경우이 작업은 건너뜁니다. SSM을 사용하여 EC2에서 실험을 실행하기 전에 AWS Systems Manager 에이전트를 구성해야 합니다.

제한 사항

  • 이 시나리오에는 중지 조건이 포함되어 있지 않습니다. 애플리케이션에 맞는 올바른 중지 조건을 실험 템플릿에 추가해야 합니다.

요구 사항

  • AWS FIS 실험 역할에 필요한 권한을 추가합니다.

  • 선택한 AZ 내에서 EC2 인스턴스, ECS 작업 또는 EKS 포드의 3가지 유형 중 하나 이상의 리소스를 대상으로 지정해야 합니다.

  • 시나리오의 모든 대상은 동일한 VPC에 있어야 합니다.

권한

이 시나리오를 실행하려면 FIS가 실험에서 대상으로 하는 리소스 유형에 대한 역할 및 관리형 정책을 수임하도록 허용하는 신뢰 정책이 있는 IAM 역할이 필요합니다. EC2, ECS 및 EKS. AZ: Application Slowdown 시나리오에서 실험 템플릿을 생성하면 FIS는 신뢰 정책 및 다음 AWS 관리형 정책을 사용하여 역할을 생성합니다.

기존 IAM 역할을 사용하여 AZ: Application Slowdown 시나리오를 실행하는 경우 다음 정책을 연결하여 AWS FIS에 필요한 권한을 부여할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DescribeTasks", "Effect": "Allow", "Action": "ecs:DescribeTasks", "Resource": "*" }, { "Sid": "DescribeContainerInstances", "Effect": "Allow", "Action": "ecs:DescribeContainerInstances", "Resource": "arn:aws:ecs:*:*:container-instance/*/*" }, { "Sid": "DescribeInstances", "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Sid": "DescribeSubnets", "Effect": "Allow", "Action": "ec2:DescribeSubnets", "Resource": "*" }, { "Sid": "DescribeCluster", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:*:*:cluster/*" }, { "Sid": "TargetResolutionByTags", "Effect": "Allow", "Action": "tag:GetResources", "Resource": "*" }, { "Sid": "SendCommand", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ssm:*:*:managed-instance/*", "arn:aws:ssm:*:*:document/*" ] }, { "Sid": "ListCommands", "Effect": "Allow", "Action": [ "ssm:ListCommands" ], "Resource": "*" }, { "Sid": "CancelCommand", "Effect": "Allow", "Action": [ "ssm:CancelCommand" ], "Resource": "*" } ] }

시나리오 콘텐츠

다음 콘텐츠는 시나리오를 정의합니다. 이 JSON을 저장하여 AWS Command Line Interface(AWS CLI)에서 create-experiment-template 명령을 사용하여 실험 템플릿을 만드는 데 사용할 수 있습니다. 시나리오의 최신 버전을 보려면 FIS 콘솔에서 시나리오 라이브러리를 방문하여 콘텐츠 탭으로 이동합니다.

{ "tags": { "Name": "AZ: Application Slowdown" }, "description": "Add latency between resources within a single AZ.", "actions": { "LatencyForEKS": { "actionId": "aws:eks:pod-network-latency", "parameters": { "delayMilliseconds": "200", "duration": "PT30M", "flowsPercent": "100", "interface": "DEFAULT", "kubernetesServiceAccount": "fis-service-account", "sources": "us-east-1a" }, "targets": { "Pods": "TargetsForEKS" } }, "LatencyForEC2": { "actionId": "aws:ssm:send-command", "parameters": { "duration": "PT30M", "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-Network-Latency-Sources", "documentParameters": "{\"DelayMilliseconds\":\"200\",\"Sources\":\"us-east-1a\",\"Interface\":\"DEFAULT\",\"TrafficType\":\"egress\",\"DurationSeconds\":\"1800\",\"FlowsPercent\":\"100\",\"InstallDependencies\":\"True\"}" }, "targets": { "Instances": "TargetsForEC2" } }, "LatencyForECS": { "actionId": "aws:ecs:task-network-latency", "parameters": { "delayMilliseconds": "200", "duration": "PT30M", "flowsPercent": "100", "installDependencies": "true", "sources": "us-east-1a", "useEcsFaultInjectionEndpoints": "true" }, "targets": { "Tasks": "TargetsForECS" }, "startAfter": [] } }, "targets": { "TargetsForEKS": { "parameters": { "availabilityZoneIdentifier": "us-east-1a", "clusterIdentifier": "", "namespace": "default", "selectorType": "labelSelector", "selectorValue": "AZApplicationSlowdown=LatencyForEKS" }, "resourceType": "aws:eks:pod", "selectionMode": "ALL" }, "TargetsForEC2": { "filters": [ { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "AZApplicationSlowdown": "LatencyForEC2" }, "resourceType": "aws:ec2:instance", "selectionMode": "ALL" }, "TargetsForECS": { "filters": [ { "path": "AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "AZApplicationSlowdown": "LatencyForECS" }, "resourceType": "aws:ecs:task", "selectionMode": "ALL" } }, "experimentOptions": { "accountTargeting": "single-account", "emptyTargetResolutionMode": "skip" }, "stopConditions": [ { "source": "none" } ] }