Class ExperimentTemplate


  • public class ExperimentTemplate
    extends com.pulumi.resources.CustomResource
    Provides an FIS Experiment Template, which can be used to run an experiment. An experiment template contains one or more actions to run on specified targets during an experiment. It also contains the stop conditions that prevent the experiment from going out of bounds. See [Amazon Fault Injection Simulator](https://docs.aws.amazon.com/fis/index.html) for more information. ## Example Usage
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.fis.ExperimentTemplate;
     import com.pulumi.aws.fis.ExperimentTemplateArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateActionArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateActionTargetArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateStopConditionArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateTargetArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateTargetResourceTagArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             var example = new ExperimentTemplate("example", ExperimentTemplateArgs.builder()
                 .actions(ExperimentTemplateActionArgs.builder()
                     .target(ExperimentTemplateActionTargetArgs.builder()
                         .key("Instances")
                         .value("example-target")
                         .build())
                     .name("example-action")
                     .actionId("aws:ec2:terminate-instances")
                     .build())
                 .stopConditions(ExperimentTemplateStopConditionArgs.builder()
                     .source("none")
                     .build())
                 .targets(ExperimentTemplateTargetArgs.builder()
                     .resourceTags(ExperimentTemplateTargetResourceTagArgs.builder()
                         .key("env")
                         .value("example")
                         .build())
                     .name("example-target")
                     .resourceType("aws:ec2:instance")
                     .selectionMode("COUNT(1)")
                     .build())
                 .description("example")
                 .roleArn(exampleAwsIamRole.arn())
                 .build());
     
         }
     }
     
     
    ### Example Usage with Report Configuration
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.AwsFunctions;
     import com.pulumi.aws.inputs.GetPartitionArgs;
     import com.pulumi.aws.iam.Role;
     import com.pulumi.aws.iam.RoleArgs;
     import com.pulumi.aws.iam.IamFunctions;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementArgs;
     import com.pulumi.aws.iam.Policy;
     import com.pulumi.aws.iam.PolicyArgs;
     import com.pulumi.aws.iam.RolePolicyAttachment;
     import com.pulumi.aws.iam.RolePolicyAttachmentArgs;
     import com.pulumi.aws.fis.ExperimentTemplate;
     import com.pulumi.aws.fis.ExperimentTemplateArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateExperimentReportConfigurationArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateExperimentReportConfigurationDataSourcesArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateExperimentReportConfigurationDataSourcesCloudwatchDashboardArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateExperimentReportConfigurationOutputsArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateExperimentReportConfigurationOutputsS3ConfigurationArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateActionArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateActionTargetArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateStopConditionArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateTargetArgs;
     import com.pulumi.aws.fis.inputs.ExperimentTemplateTargetResourceTagArgs;
     import static com.pulumi.codegen.internal.Serialization.*;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             final var current = AwsFunctions.getPartition(GetPartitionArgs.builder()
                 .build());
     
             var example = new Role("example", RoleArgs.builder()
                 .name("example")
                 .assumeRolePolicy(serializeJson(
                     jsonObject(
                         jsonProperty("Statement", jsonArray(jsonObject(
                             jsonProperty("Action", "sts:AssumeRole"),
                             jsonProperty("Effect", "Allow"),
                             jsonProperty("Principal", jsonObject(
                                 jsonProperty("Service", jsonArray(String.format("fis.%s", current.dnsSuffix())))
                             ))
                         ))),
                         jsonProperty("Version", "2012-10-17")
                     )))
                 .build());
     
             final var reportAccess = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
                 .statements(            
                     GetPolicyDocumentStatementArgs.builder()
                         .sid("logsDelivery")
                         .effect("Allow")
                         .actions("logs:CreateLogDelivery")
                         .resources("*")
                         .build(),
                     GetPolicyDocumentStatementArgs.builder()
                         .sid("ReportsBucket")
                         .effect("Allow")
                         .actions(                    
                             "s3:PutObject",
                             "s3:GetObject")
                         .resources("*")
                         .build(),
                     GetPolicyDocumentStatementArgs.builder()
                         .sid("GetDashboard")
                         .effect("Allow")
                         .actions("cloudwatch:GetDashboard")
                         .resources("*")
                         .build(),
                     GetPolicyDocumentStatementArgs.builder()
                         .sid("GetDashboardData")
                         .effect("Allow")
                         .actions("cloudwatch:getMetricWidgetImage")
                         .resources("*")
                         .build())
                 .version("2012-10-17")
                 .build());
     
             var reportAccessPolicy = new Policy("reportAccessPolicy", PolicyArgs.builder()
                 .name("report_access")
                 .policy(reportAccess.json())
                 .build());
     
             var reportAccessRolePolicyAttachment = new RolePolicyAttachment("reportAccessRolePolicyAttachment", RolePolicyAttachmentArgs.builder()
                 .role(test.name())
                 .policyArn(reportAccessPolicy.arn())
                 .build());
     
             var exampleExperimentTemplate = new ExperimentTemplate("exampleExperimentTemplate", ExperimentTemplateArgs.builder()
                 .experimentReportConfiguration(ExperimentTemplateExperimentReportConfigurationArgs.builder()
                     .dataSources(ExperimentTemplateExperimentReportConfigurationDataSourcesArgs.builder()
                         .cloudwatchDashboards(ExperimentTemplateExperimentReportConfigurationDataSourcesCloudwatchDashboardArgs.builder()
                             .dashboardArn(exampleAwsCloudwatchDashboard.dashboardArn())
                             .build())
                         .build())
                     .outputs(ExperimentTemplateExperimentReportConfigurationOutputsArgs.builder()
                         .s3Configuration(ExperimentTemplateExperimentReportConfigurationOutputsS3ConfigurationArgs.builder()
                             .bucketName(exampleAwsS3Bucket.bucket())
                             .prefix("fis-example-reports")
                             .build())
                         .build())
                     .postExperimentDuration("PT10M")
                     .preExperimentDuration("PT10M")
                     .build())
                 .actions(ExperimentTemplateActionArgs.builder()
                     .target(ExperimentTemplateActionTargetArgs.builder()
                         .key("Instances")
                         .value("example-target")
                         .build())
                     .name("example-action")
                     .actionId("aws:ec2:terminate-instances")
                     .build())
                 .stopConditions(ExperimentTemplateStopConditionArgs.builder()
                     .source("none")
                     .build())
                 .targets(ExperimentTemplateTargetArgs.builder()
                     .resourceTags(ExperimentTemplateTargetResourceTagArgs.builder()
                         .key("env")
                         .value("example")
                         .build())
                     .name("example-target")
                     .resourceType("aws:ec2:instance")
                     .selectionMode("COUNT(1)")
                     .build())
                 .description("example")
                 .roleArn(example.arn())
                 .tags(Map.of("Name", "example"))
                 .build());
     
         }
     }
     
     
    ## Import Using `pulumi import`, import FIS Experiment Templates using the `id`. For example: ```sh $ pulumi import aws:fis/experimentTemplate:ExperimentTemplate template EXT123AbCdEfGhIjK ```
    • Nested Class Summary

      • Nested classes/interfaces inherited from class com.pulumi.resources.CustomResource

        com.pulumi.resources.CustomResource.CustomResourceInternal
      • Nested classes/interfaces inherited from class com.pulumi.resources.Resource

        com.pulumi.resources.Resource.LazyField<T extends java.lang.Object>, com.pulumi.resources.Resource.LazyFields, com.pulumi.resources.Resource.ResourceInternal
    • Field Summary

      • Fields inherited from class com.pulumi.resources.Resource

        childResources, remote
    • Constructor Detail

      • ExperimentTemplate

        public ExperimentTemplate​(java.lang.String name)
        Parameters:
        name - The _unique_ name of the resulting resource.
      • ExperimentTemplate

        public ExperimentTemplate​(java.lang.String name,
                                  ExperimentTemplateArgs args)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
      • ExperimentTemplate

        public ExperimentTemplate​(java.lang.String name,
                                  ExperimentTemplateArgs args,
                                  @Nullable
                                  com.pulumi.resources.CustomResourceOptions options)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
        options - A bag of options that control this resource's behavior.
    • Method Detail

      • actions

        public com.pulumi.core.Output<java.util.List<ExperimentTemplateAction>> actions()
        Returns:
        Action to be performed during an experiment. See below.
      • description

        public com.pulumi.core.Output<java.lang.String> description()
        Returns:
        Description for the experiment template.
      • experimentOptions

        public com.pulumi.core.Output<ExperimentTemplateExperimentOptions> experimentOptions()
        Returns:
        Experiment options for the experiment template. See experimentOptions below for more details!
      • experimentReportConfiguration

        public com.pulumi.core.Output<java.util.Optional<ExperimentTemplateExperimentReportConfiguration>> experimentReportConfiguration()
        Returns:
        Configuration for [experiment reporting](https://docs.aws.amazon.com/fis/latest/userguide/experiment-report-configuration.html). See below.
      • logConfiguration

        public com.pulumi.core.Output<java.util.Optional<ExperimentTemplateLogConfiguration>> logConfiguration()
        Returns:
        Configuration for experiment logging. See below.
      • region

        public com.pulumi.core.Output<java.lang.String> region()
        Returns:
        Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
      • roleArn

        public com.pulumi.core.Output<java.lang.String> roleArn()
        Returns:
        ARN of an IAM role that grants the AWS FIS service permission to perform service actions on your behalf.
      • stopConditions

        public com.pulumi.core.Output<java.util.List<ExperimentTemplateStopCondition>> stopConditions()
        Returns:
        When an ongoing experiment should be stopped. See below. The following arguments are optional:
      • tags

        public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> tags()
        Returns:
        Key-value mapping of tags. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
      • tagsAll

        public com.pulumi.core.Output<java.util.Map<java.lang.String,​java.lang.String>> tagsAll()
      • targets

        public com.pulumi.core.Output<java.util.Optional<java.util.List<ExperimentTemplateTarget>>> targets()
        Returns:
        Target of an action. See below.
      • get

        public static ExperimentTemplate get​(java.lang.String name,
                                             com.pulumi.core.Output<java.lang.String> id,
                                             @Nullable
                                             ExperimentTemplateState state,
                                             @Nullable
                                             com.pulumi.resources.CustomResourceOptions options)
        Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.
        Parameters:
        name - The _unique_ name of the resulting resource.
        id - The _unique_ provider ID of the resource to lookup.
        state -
        options - Optional settings to control the behavior of the CustomResource.