

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejemplo AWS Plantillas de experimentos FIS
<a name="experiment-template-example"></a>

Si utilizas la API AWS FIS o una herramienta de línea de comandos para crear una plantilla de experimento, puedes crear la plantilla en notación de JavaScript objetos (JSON). Para obtener más información acerca de los componentes de una plantilla de experimento, consulte [AWS Componentes de la plantilla de experimento FIS](experiment-templates.md).

Para crear un experimento con una de las plantillas de ejemplo, guárdela en un archivo JSON (por ejemplo,`my-template.json`), sustituya los valores de los marcadores de posición por sus propios valores y, a continuación, ejecute el siguiente comando [https://docs.aws.amazon.com/cli/latest/reference/fis/create-experiment-template.html](https://docs.aws.amazon.com/cli/latest/reference/fis/create-experiment-template.html) create-experiment-template. {{italics}}

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

**Topics**
+ [Detención de instancias de EC2 en función de los filtros](#stop-instances-filters)
+ [Detención de número específico de instancias de EC2](#stop-instances-count)
+ [Ejecute un archivo preconfigurado AWS Documento FIS SSM](#cpu-fault-injection)
+ [Ejecución de un manual de procedimientos de Automation](#run-automation-runbook)
+ [Limitación de las acciones de la API en las instancias de EC2 con el rol de IAM de destino](#inject-api-throttle)
+ [Prueba de esfuerzo de la CPU de los pods de un clúster de Kubernetes](#stress-test)
+ [Excepción de rendimiento aprovisionada para un número específico de transmisiones de datos de Kinesis](#throughput-kinesis)
+ [Ejemplo de permisos de roles de experimentos](#permissions-example)

## Detención de instancias de EC2 en función de los filtros
<a name="stop-instances-filters"></a>

En el siguiente ejemplo, se detienen todas las instancias de Amazon EC2 de la región especificada con la etiqueta especificada en la VPC especificada. Las reinicia después de dos minutos.

```
{
    "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}}"
}
```

## Detención de número específico de instancias de EC2
<a name="stop-instances-count"></a>

En el siguiente ejemplo, se detienen tres instancias con la etiqueta especificada. AWS El FIS selecciona las instancias específicas para detenerlas de forma aleatoria. Reinicia estas instancias después de dos minutos.

```
{
    "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}}"
}
```

## Ejecute un archivo preconfigurado AWS Documento FIS SSM
<a name="cpu-fault-injection"></a>

En el siguiente ejemplo, se ejecuta una inyección de errores de CPU durante 60 segundos en la instancia EC2 especificada mediante un documento AWS FIS SSM preconfigurado,. [ AWSFIS-Run-CPU-Stress ](actions-ssm-agent.md#awsfis-run-cpu-stress) AWS El FIS supervisa el experimento durante dos minutos.

```
{
    "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}}"
}
```

## Ejecución de un manual de procedimientos de Automation
<a name="run-automation-runbook"></a>

En el siguiente ejemplo, se publica una notificación en Amazon SNS mediante un manual proporcionado por Systems Manager. [ AWS-PublishSNSNotification ](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-publishsnsnotification.html) El rol debe tener permisos para publicar notificaciones en el tema de SNS especificado.

```
{
    "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}}"
}
```

## Limitación de las acciones de la API en las instancias de EC2 con el rol de IAM de destino
<a name="inject-api-throttle"></a>

El siguiente ejemplo limita el 100 % de las llamadas a la API especificadas en la definición de acción para las llamadas a la API realizadas por los roles de IAM especificados en la definición de destino.

**nota**  
Si desea segmentar instancias de EC2 que sean miembros de un grupo de escalado automático, utilice la acción **aws:ec2:asg-insufficient-instance-capacity-error** y segmente por grupo de escalado automático en su lugar. Para obtener más información, consulte [aws:ec2:un error de capacidad de instancia insuficiente](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}}"
}
```

## Prueba de esfuerzo de la CPU de los pods de un clúster de Kubernetes
<a name="stress-test"></a>

En el siguiente ejemplo, se utiliza Chaos Mesh para realizar una prueba de esfuerzo de la CPU de los pods en un clúster de Kubernetes de Amazon EKS durante un minuto.

```
{
    "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": {}
}
```

En el siguiente ejemplo, se utiliza Litmus para realizar una prueba de esfuerzo de la CPU de los pods en un clúster de Kubernetes de Amazon EKS durante un minuto.

```
{
    "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": {}
}
```

## Excepción de rendimiento aprovisionada para un número específico de transmisiones de datos de Kinesis
<a name="throughput-kinesis"></a>

El siguiente ejemplo muestra una excepción de rendimiento aprovisionado para el 100% de las solicitudes de hasta cinco Kinesis Data Streams con la etiqueta especificada. AWS El FIS selecciona las transmisiones a las que va a afectar de forma aleatoria. El error se elimina después de 5 minutos.

```
{
    "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"
   }    
}
```

## Ejemplo de permisos de roles de experimentos
<a name="permissions-example"></a>

El siguiente permiso le permite ejecutar las `aws:kinesis:stream-expired-iterator-exception` acciones `aws:kinesis:stream-provisioned-throughput-exception` y en una transmisión específica, lo que afecta al 50% de las solicitudes.

```
{
    "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"
        }
    ]
}
```