

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

# AWS FIS 실험 템플릿 예제
<a name="experiment-template-example"></a>

 AWS FIS API 또는 명령줄 도구를 사용하여 실험 템플릿을 생성하는 경우 JavaScript Object Notation(JSON)으로 템플릿을 구성할 수 있습니다. 실험 템플릿의 구성 요소에 대한 자세한 내용은 [AWS FIS 실험 템플릿 구성 요소](experiment-templates.md) 단원을 참조하세요.

예제 템플릿 중 하나를 사용하여 실험을 만들려면 JSON 파일(예: `my-template.json`)에 저장하고 *기울임꼴*료 표시된 자리 표시자 값을 원하는 값으로 바꾼 후 다음 [create-experiment-template](https://docs.aws.amazon.com/cli/latest/reference/fis/create-experiment-template.html) 명령어를 실행합니다.

```
aws fis create-experiment-template --cli-input-json file://my-template.json
```

**Topics**
+ [필터를 기반으로 EC2 인스턴스 중지](#stop-instances-filters)
+ [지정된 수의 EC2 인스턴스 중지](#stop-instances-count)
+ [사전 구성된 AWS FIS SSM 문서 실행](#cpu-fault-injection)
+ [사전 정의된 자동화 런북 실행](#run-automation-runbook)
+ [대상 IAM 역할을 사용하여 EC2 인스턴스에서의 API 작업을 제한하세요.](#inject-api-throttle)
+ [Kubernetes 클러스터 내 포드의 CPU 스트레스 테스트](#stress-test)
+ [지정된 수의 Kinesis Data Streams에 대한 프로비저닝된 처리량 예외](#throughput-kinesis)
+ [실험 역할 권한 예제](#permissions-example)

## 필터를 기반으로 EC2 인스턴스 중지
<a name="stop-instances-filters"></a>

다음 예제에서는 지정된 리전의 모든 실행 중인 VPC에서 지정된 태그를 가진 모든 Amazon EC2 인스턴스를 중지합니다. 2분 후에 인스턴스가 다시 시작됩니다.

```
{
    "tags": {
        "Name": "StopEC2InstancesWithFilters"
    },
    "description": "Stop and restart all instances in us-east-1b with the tag env=prod in the specified VPC",
    "targets": {
        "myInstances": {
            "resourceType": "aws:ec2:instance",
            "resourceTags": {
                "env": "prod"
            },
            "filters": [
                {
                    "path": "Placement.AvailabilityZone",
                    "values": ["us-east-1b"]
                },
                {
                    "path": "State.Name",
                    "values": ["running"]
                },
                {
                    "path": "VpcId",
                    "values": [ "vpc-aabbcc11223344556"]
                }
            ],
            "selectionMode": "ALL"
        }
    },
    "actions": {
        "StopInstances": {
            "actionId": "aws:ec2:stop-instances",
            "description": "stop the instances",
            "parameters": {
                "startInstancesAfterDuration": "PT2M"
            },
            "targets": {
                "Instances": "myInstances"
            }
        }
    },
    "stopConditions": [
        {
            "source": "aws:cloudwatch:alarm",
            "value": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name"
        }
    ],
    "roleArn": "arn:aws:iam::111122223333:role/role-name"
}
```

## 지정된 수의 EC2 인스턴스 중지
<a name="stop-instances-count"></a>

다음 예시에서는 지정된 태그가 있는 인스턴스 3개를 중지합니다. AWS FIS는 임의로 중지할 특정 인스턴스를 선택합니다. 2분 후에 이러한 인스턴스를 다시 시작합니다.

```
{
    "tags": {
        "Name": "StopEC2InstancesByCount"
    },
    "description": "Stop and restart three instances with the specified tag",
    "targets": {
        "myInstances": {
            "resourceType": "aws:ec2:instance",
            "resourceTags": {
                "env": "prod"
            },
            "selectionMode": "COUNT(3)"
        }
    },
    "actions": {
        "StopInstances": {
            "actionId": "aws:ec2:stop-instances",
            "description": "stop the instances",
            "parameters": {
                "startInstancesAfterDuration": "PT2M"
            },
            "targets": {
                "Instances": "myInstances"
            }
        }
    },
    "stopConditions": [
        {
            "source": "aws:cloudwatch:alarm",
            "value": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name"
        }
    ],
    "roleArn": "arn:aws:iam::111122223333:role/role-name"
}
```

## 사전 구성된 AWS FIS SSM 문서 실행
<a name="cpu-fault-injection"></a>

다음 예제에서는 미리 구성된 AWS FIS SSM 문서를 사용하여 지정된 EC2 인스턴스에서 60초 동안 CPU 오류 주입을 실행합니다. [AWSFIS-Run-CPU-Stress](actions-ssm-agent.md#awsfis-run-cpu-stress). AWS FIS는 2분 동안 실험을 모니터링합니다.

```
{
    "tags": {
        "Name": "CPUStress"
    },
    "description": "Run a CPU fault injection on the specified instance",
    "targets": {
        "myInstance": {
            "resourceType": "aws:ec2:instance",
            "resourceArns": ["arn:aws:ec2:us-east-1:111122223333:instance/instance-id"],
            "selectionMode": "ALL"
        }
    },
    "actions": {
        "CPUStress": {
            "actionId": "aws:ssm:send-command",
            "description": "run cpu stress using ssm",
            "parameters": {
                "duration": "PT2M",
                "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-CPU-Stress",
                "documentParameters": "{\"DurationSeconds\": \"60\", \"InstallDependencies\": \"True\", \"CPU\": \"0\"}"
            },
            "targets": {
                "Instances": "myInstance"
            }
        }
    },
    "stopConditions": [
        {
            "source": "aws:cloudwatch:alarm",
            "value": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name"
        }
    ],
    "roleArn": "arn:aws:iam::111122223333:role/role-name"
}
```

## 사전 정의된 자동화 런북 실행
<a name="run-automation-runbook"></a>

다음 예제는 Systems Manager에서 제공하는 런북인 [AWS-PublishSNSNotification](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-publishsnsnotification.html)을 사용하여 Amazon SNS에 알림을 게시합니다. 역할에는 지정된 SNS 주제에 알림을 게시할 권한이 있어야 합니다.

```
{
    "description": "Publish event through SNS",
    "stopConditions": [
        {
            "source": "none"
        }
    ],
    "targets": {
    },
    "actions": {
        "sendToSns": {
            "actionId": "aws:ssm:start-automation-execution",
            "description": "Publish message to SNS",
            "parameters": {
                "documentArn": "arn:aws:ssm:us-east-1::document/AWS-PublishSNSNotification",
                "documentParameters": "{\"Message\": \"Hello, world\", \"TopicArn\": \"arn:aws:sns:us-east-1:111122223333:topic-name\"}",
                "maxDuration": "PT1M"
            },
            "targets": {
            }
        }
    },
    "roleArn": "arn:aws:iam::111122223333:role/role-name"
}
```

## 대상 IAM 역할을 사용하여 EC2 인스턴스에서의 API 작업을 제한하세요.
<a name="inject-api-throttle"></a>

다음 예제에서는 대상 정의에 지정된 IAM 역할에 의해 수행된 API 직접 호출에 대해 작업 정의에 지정된 API 호출의 100%를 스로틀링합니다.

**참고**  
Auto Scaling 그룹의 멤버인 EC2 인스턴스를 대상으로 지정하려면 **aws:ec2:asg-insufficient-instance-capacity-error** 작업을 사용하고 Auto Scaling 그룹별로 대상을 지정합니다. 자세한 내용은 [aws:ec2:asg-insufficient-instance-capacity-error](fis-actions-reference.md#asg-ice) 단원을 참조하십시오.

```
{
    "tags": {
        "Name": "ThrottleEC2APIActions"
    },
    "description": "Throttle the specified EC2 API actions on the specified IAM role",
    "targets": {
        "myRole": {
            "resourceType": "aws:iam:role",
            "resourceArns": ["arn:aws:iam::111122223333:role/role-name"],
            "selectionMode": "ALL"
        }
    },
    "actions": {
        "ThrottleAPI": {
            "actionId": "aws:fis:inject-api-throttle-error",
            "description": "Throttle APIs for 5 minutes",
            "parameters": {
                "service": "ec2",
                "operations": "DescribeInstances,DescribeVolumes",
                "percentage": "100",
                "duration": "PT2M"
            },
            "targets": {
                "Roles": "myRole"
            }
        }
    },
    "stopConditions": [
        {
            "source": "aws:cloudwatch:alarm",
            "value": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name"
        }
    ],
    "roleArn": "arn:aws:iam::111122223333:role/role-name"
}
```

## Kubernetes 클러스터 내 포드의 CPU 스트레스 테스트
<a name="stress-test"></a>

다음 예시에서는 Chaos Mesh를 사용하여 Amazon EKS Kubernetes 클러스터의 포드 CPU에 1분 동안 스트레스 테스트를 실시합니다.

```
{
    "description": "ChaosMesh StressChaos example",
    "targets": {
        "Cluster-Target-1": {
            "resourceType": "aws:eks:cluster",
            "resourceArns": [
                "arn:aws:eks:arn:aws::111122223333:cluster/cluster-id"
            ],
            "selectionMode": "ALL"
        }
    },
    "actions": {
        "TestCPUStress": {
            "actionId": "aws:eks:inject-kubernetes-custom-resource",
            "parameters": {
                "maxDuration": "PT2M",
                "kubernetesApiVersion": "chaos-mesh.org/v1alpha1",
                "kubernetesKind": "StressChaos",
                "kubernetesNamespace": "default",
                "kubernetesSpec": "{\"selector\":{\"namespaces\":[\"default\"],\"labelSelectors\":{\"run\":\"nginx\"}},\"mode\":\"all\",\"stressors\": {\"cpu\":{\"workers\":1,\"load\":50}},\"duration\":\"1m\"}"
            },
            "targets": {
                "Cluster": "Cluster-Target-1"
            }
        }
    },
    "stopConditions": [{
        "source": "none"
    }],
    "roleArn": "arn:aws:iam::111122223333:role/role-name",
    "tags": {}
}
```

다음 예시에서는 Litmus를 사용하여 Amazon EKS Kubernetes 클러스터의 포드 CPU에 1분 동안 스트레스 테스트를 실시합니다.

```
{
    "description": "Litmus CPU Hog",
    "targets": {
        "MyCluster": {
            "resourceType": "aws:eks:cluster",
            "resourceArns": [
                "arn:aws:eks:arn:aws::111122223333:cluster/cluster-id"
            ],
            "selectionMode": "ALL"
        }
    },
    "actions": {
        "MyAction": {
            "actionId": "aws:eks:inject-kubernetes-custom-resource",
            "parameters": {
                "maxDuration": "PT2M",
                "kubernetesApiVersion": "litmuschaos.io/v1alpha1",
                "kubernetesKind": "ChaosEngine",
                "kubernetesNamespace": "litmus",
                "kubernetesSpec": "{\"engineState\":\"active\",\"appinfo\":{\"appns\":\"default\",\"applabel\":\"run=nginx\",\"appkind\":\"deployment\"},\"chaosServiceAccount\":\"litmus-admin\",\"experiments\":[{\"name\":\"pod-cpu-hog\",\"spec\":{\"components\":{\"env\":[{\"name\":\"TOTAL_CHAOS_DURATION\",\"value\":\"60\"},{\"name\":\"CPU_CORES\",\"value\":\"1\"},{\"name\":\"PODS_AFFECTED_PERC\",\"value\":\"100\"},{\"name\":\"CONTAINER_RUNTIME\",\"value\":\"docker\"},{\"name\":\"SOCKET_PATH\",\"value\":\"/var/run/docker.sock\"}]},\"probe\":[]}}],\"annotationCheck\":\"false\"}"
            },
            "targets": {
                "Cluster": "MyCluster"
            }
        }
    },
    "stopConditions": [{
        "source": "none"
    }],
    "roleArn": "arn:aws:iam::111122223333:role/role-name",
    "tags": {}
}
```

## 지정된 수의 Kinesis Data Streams에 대한 프로비저닝된 처리량 예외
<a name="throughput-kinesis"></a>

다음 예제에서는 지정된 태그가 있는 최대 5개의 Kinesis Data Streams 요청의 100%에 대해 프로비저닝된 처리량 예외가 발생합니다. AWS FIS는 임의로 영향을 미칠 스트림을 선택합니다. 5분 후 오류가 제거됩니다.

```
{
    "description": "Kinesis stream experiment",
    "targets": {
        "KinesisStreams-Target-1": {
            "resourceType": "aws:kinesis:stream",
            "resourceTags": {
                   "tag-key": "tag-value"
            },
            "selectionMode": "COUNT(5)"
        }
    },
    "actions": {
         "kinesis": {
              "actionId": "aws:kinesis:stream-provisioned-throughput-exception",
              "description": "my-stream",
              "parameters": {
                   "duration": "PT5M",
                   "percentage": "100",
                   "service": "kinesis"
              },
              "targets": {
                    "KinesisStreams": "KinesisStreams-Target-1"
              }
         }
   },
   "stopConditions": [
         {
              "source": "none"
         }
   ],
   "roleArn": "arn:aws:iam::111122223333:role/role-name",
   "tags": {},
   "experimentOptions": {
       "accountTargeting": "single-account",
       "emptyTargetResolutionMode": "fail"
   }    
}
```

## 실험 역할 권한 예제
<a name="permissions-example"></a>

다음 권한을 사용하면 요청의 50%에 영향을 미치는 특정 스트림에서 `aws:kinesis:stream-provisioned-throughput-exception` 및 `aws:kinesis:stream-expired-iterator-exception` 작업을 실행할 수 있습니다.

```
{
    "Version": "2012-10-17",		 	 	 
     "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesis:InjectApiError",
            "Resource": "*"
            "Condition": {
                "ForAllValues:StringEquals": {
                    "kinesis:FisActionId": [
                        "aws:kinesis:stream-provisioned-throughput-exception",
                        "aws:kinesis:stream-expired-iterator-exception" 
                    ],
                    "kinesis:FisTargetArns": [
                        "arn:aws:kinesis:us-east-1:111122223333:stream/stream-name"
                    ],
                },
                "NumericEquals": {
                    "kinesis:FisInjectPercentage": "50"
                }
            }
        },
        {
             "Action": [
                   "kinesis:DescribeStreamSummary",
              ],
             "Resource": "*",
             "Effect": "Allow"
        }
    ]
}
```