Class Domain


  • public class Domain
    extends com.pulumi.resources.CustomResource
    Manages an AWS Elasticsearch Domain. ## Example Usage ### Basic Usage
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.elasticsearch.Domain;
     import com.pulumi.aws.elasticsearch.DomainArgs;
     import com.pulumi.aws.elasticsearch.inputs.DomainClusterConfigArgs;
     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 Domain("example", DomainArgs.builder()
                 .clusterConfig(DomainClusterConfigArgs.builder()
                     .instanceType("r4.large.elasticsearch")
                     .build())
                 .domainName("example")
                 .elasticsearchVersion("7.10")
                 .tags(Map.of("Domain", "TestDomain"))
                 .build());
     
         }
     }
     
     
    ### Access Policy > See also: `aws.elasticsearch.DomainPolicy` resource
     
     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.GetRegionArgs;
     import com.pulumi.aws.inputs.GetCallerIdentityArgs;
     import com.pulumi.aws.elasticsearch.Domain;
     import com.pulumi.aws.elasticsearch.DomainArgs;
     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 config = ctx.config();
             final var domain = config.get("domain").orElse("tf-test");
             final var current = AwsFunctions.getRegion(GetRegionArgs.builder()
                 .build());
     
             final var currentGetCallerIdentity = AwsFunctions.getCallerIdentity(GetCallerIdentityArgs.builder()
                 .build());
     
             var example = new Domain("example", DomainArgs.builder()
                 .domainName(domain)
                 .accessPolicies("""
     {
       \"Version\": \"2012-10-17\",
       \"Statement\": [
         {
           \"Action\": \"es:*\",
           \"Principal\": \"*\",
           \"Effect\": \"Allow\",
           \"Resource\": \"arn:aws:es:%s:%s:domain/%s/*\",
           \"Condition\": {
             \"IpAddress\": {\"aws:SourceIp\": [\"66.193.100.22/32\"]}
           }
         }
       ]
     }
     ", current.region(),currentGetCallerIdentity.accountId(),domain))
                 .build());
     
         }
     }
     
     
    ### Log Publishing to CloudWatch Logs
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.cloudwatch.LogGroup;
     import com.pulumi.aws.cloudwatch.LogGroupArgs;
     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.inputs.GetPolicyDocumentStatementPrincipalArgs;
     import com.pulumi.aws.cloudwatch.LogResourcePolicy;
     import com.pulumi.aws.cloudwatch.LogResourcePolicyArgs;
     import com.pulumi.aws.elasticsearch.Domain;
     import com.pulumi.aws.elasticsearch.DomainArgs;
     import com.pulumi.aws.elasticsearch.inputs.DomainLogPublishingOptionArgs;
     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 exampleLogGroup = new LogGroup("exampleLogGroup", LogGroupArgs.builder()
                 .name("example")
                 .build());
     
             final var example = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
                 .statements(GetPolicyDocumentStatementArgs.builder()
                     .principals(GetPolicyDocumentStatementPrincipalArgs.builder()
                         .type("Service")
                         .identifiers("es.amazonaws.com")
                         .build())
                     .effect("Allow")
                     .actions(                
                         "logs:PutLogEvents",
                         "logs:PutLogEventsBatch",
                         "logs:CreateLogStream")
                     .resources("arn:aws:logs:*")
                     .build())
                 .build());
     
             var exampleLogResourcePolicy = new LogResourcePolicy("exampleLogResourcePolicy", LogResourcePolicyArgs.builder()
                 .policyName("example")
                 .policyDocument(example.json())
                 .build());
     
             var exampleDomain = new Domain("exampleDomain", DomainArgs.builder()
                 .logPublishingOptions(DomainLogPublishingOptionArgs.builder()
                     .cloudwatchLogGroupArn(exampleLogGroup.arn())
                     .logType("INDEX_SLOW_LOGS")
                     .build())
                 .build());
     
         }
     }
     
     
    ### VPC based ES
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.ec2.Ec2Functions;
     import com.pulumi.aws.ec2.inputs.GetVpcArgs;
     import com.pulumi.aws.ec2.inputs.GetSubnetsArgs;
     import com.pulumi.aws.ec2.inputs.GetSubnetsFilterArgs;
     import com.pulumi.aws.AwsFunctions;
     import com.pulumi.aws.inputs.GetRegionArgs;
     import com.pulumi.aws.inputs.GetCallerIdentityArgs;
     import com.pulumi.aws.ec2.SecurityGroup;
     import com.pulumi.aws.ec2.SecurityGroupArgs;
     import com.pulumi.aws.ec2.inputs.SecurityGroupIngressArgs;
     import com.pulumi.aws.iam.ServiceLinkedRole;
     import com.pulumi.aws.iam.ServiceLinkedRoleArgs;
     import com.pulumi.aws.elasticsearch.Domain;
     import com.pulumi.aws.elasticsearch.DomainArgs;
     import com.pulumi.aws.elasticsearch.inputs.DomainClusterConfigArgs;
     import com.pulumi.aws.elasticsearch.inputs.DomainVpcOptionsArgs;
     import com.pulumi.resources.CustomResourceOptions;
     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 config = ctx.config();
             final var vpc = config.require("vpc");
             final var domain = config.get("domain").orElse("tf-test");
             final var selected = Ec2Functions.getVpc(GetVpcArgs.builder()
                 .tags(Map.of("Name", vpc))
                 .build());
     
             final var selectedGetSubnets = Ec2Functions.getSubnets(GetSubnetsArgs.builder()
                 .filters(GetSubnetsFilterArgs.builder()
                     .name("vpc-id")
                     .values(selected.id())
                     .build())
                 .tags(Map.of("Tier", "private"))
                 .build());
     
             final var current = AwsFunctions.getRegion(GetRegionArgs.builder()
                 .build());
     
             final var currentGetCallerIdentity = AwsFunctions.getCallerIdentity(GetCallerIdentityArgs.builder()
                 .build());
     
             var es = new SecurityGroup("es", SecurityGroupArgs.builder()
                 .ingress(SecurityGroupIngressArgs.builder()
                     .fromPort(443)
                     .toPort(443)
                     .protocol("tcp")
                     .cidrBlocks(selected.cidrBlock())
                     .build())
                 .name(String.format("%s-elasticsearch-%s", vpc,domain))
                 .description("Managed by Pulumi")
                 .vpcId(selected.id())
                 .build());
     
             var esServiceLinkedRole = new ServiceLinkedRole("esServiceLinkedRole", ServiceLinkedRoleArgs.builder()
                 .awsServiceName("opensearchservice.amazonaws.com")
                 .build());
     
             var esDomain = new Domain("esDomain", DomainArgs.builder()
                 .clusterConfig(DomainClusterConfigArgs.builder()
                     .instanceType("m4.large.elasticsearch")
                     .zoneAwarenessEnabled(true)
                     .build())
                 .vpcOptions(DomainVpcOptionsArgs.builder()
                     .subnetIds(                
                         selectedGetSubnets.ids()[0],
                         selectedGetSubnets.ids()[1])
                     .securityGroupIds(es.id())
                     .build())
                 .domainName(domain)
                 .elasticsearchVersion("6.3")
                 .advancedOptions(Map.of("rest.action.multi.allow_explicit_index", "true"))
                 .accessPolicies("""
     {
     \t\"Version\": \"2012-10-17\",
     \t\"Statement\": [
     \t\t{
     \t\t\t\"Action\": \"es:*\",
     \t\t\t\"Principal\": \"*\",
     \t\t\t\"Effect\": \"Allow\",
     \t\t\t\"Resource\": \"arn:aws:es:%s:%s:domain/%s/*\"
     \t\t}
     \t]
     }
     ", current.region(),currentGetCallerIdentity.accountId(),domain))
                 .tags(Map.of("Domain", "TestDomain"))
                 .build(), CustomResourceOptions.builder()
                     .dependsOn(esServiceLinkedRole)
                     .build());
     
         }
     }
     
     
    ## Import Using `pulumi import`, import Elasticsearch domains using the `domainName`. For example: ```sh $ pulumi import aws:elasticsearch/domain:Domain example domain_name ```
    • 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 Summary

      Constructors 
      Constructor Description
      Domain​(java.lang.String name)  
      Domain​(java.lang.String name, DomainArgs args)  
      Domain​(java.lang.String name, DomainArgs args, com.pulumi.resources.CustomResourceOptions options)  
    • Constructor Detail

      • Domain

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

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

        public Domain​(java.lang.String name,
                      @Nullable
                      DomainArgs 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

      • accessPolicies

        public com.pulumi.core.Output<java.lang.String> accessPolicies()
        Returns:
        IAM policy document specifying the access policies for the domain.
      • advancedOptions

        public com.pulumi.core.Output<java.util.Map<java.lang.String,​java.lang.String>> advancedOptions()
        Returns:
        Key-value string pairs to specify advanced configuration options. Note that the values for these configuration options must be strings (wrapped in quotes) or they may be wrong and cause a perpetual diff, causing the provider to want to recreate your Elasticsearch domain on every apply.
      • advancedSecurityOptions

        public com.pulumi.core.Output<DomainAdvancedSecurityOptions> advancedSecurityOptions()
        Returns:
        Configuration block for [fine-grained access control](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/fgac.html). Detailed below.
      • arn

        public com.pulumi.core.Output<java.lang.String> arn()
        Returns:
        ARN of the domain.
      • autoTuneOptions

        public com.pulumi.core.Output<DomainAutoTuneOptions> autoTuneOptions()
        Returns:
        Configuration block for the Auto-Tune options of the domain. Detailed below.
      • clusterConfig

        public com.pulumi.core.Output<DomainClusterConfig> clusterConfig()
        Returns:
        Configuration block for the cluster of the domain. Detailed below.
      • cognitoOptions

        public com.pulumi.core.Output<java.util.Optional<DomainCognitoOptions>> cognitoOptions()
        Returns:
        Configuration block for authenticating Kibana with Cognito. Detailed below.
      • domainEndpointOptions

        public com.pulumi.core.Output<DomainDomainEndpointOptions> domainEndpointOptions()
        Returns:
        Configuration block for domain endpoint HTTP(S) related options. Detailed below.
      • domainId

        public com.pulumi.core.Output<java.lang.String> domainId()
        Returns:
        Unique identifier for the domain.
      • domainName

        public com.pulumi.core.Output<java.lang.String> domainName()
        Returns:
        Name of the domain. The following arguments are optional:
      • ebsOptions

        public com.pulumi.core.Output<DomainEbsOptions> ebsOptions()
        Returns:
        Configuration block for EBS related options, may be required based on chosen [instance size](https://aws.amazon.com/elasticsearch-service/pricing/). Detailed below.
      • elasticsearchVersion

        public com.pulumi.core.Output<java.util.Optional<java.lang.String>> elasticsearchVersion()
        Returns:
        Version of Elasticsearch to deploy. Defaults to `1.5`.
      • encryptAtRest

        public com.pulumi.core.Output<DomainEncryptAtRest> encryptAtRest()
        Returns:
        Configuration block for encrypt at rest options. Only available for [certain instance types](http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/aes-supported-instance-types.html). Detailed below.
      • endpoint

        public com.pulumi.core.Output<java.lang.String> endpoint()
        Returns:
        Domain-specific endpoint used to submit index, search, and data upload requests.
      • kibanaEndpoint

        public com.pulumi.core.Output<java.lang.String> kibanaEndpoint()
        Returns:
        Domain-specific endpoint for kibana without HTTPS scheme.
      • logPublishingOptions

        public com.pulumi.core.Output<java.util.Optional<java.util.List<DomainLogPublishingOption>>> logPublishingOptions()
        Returns:
        Configuration block for publishing slow and application logs to CloudWatch Logs. This block can be declared multiple times, for each log_type, within the same resource. Detailed below.
      • nodeToNodeEncryption

        public com.pulumi.core.Output<DomainNodeToNodeEncryption> nodeToNodeEncryption()
        Returns:
        Configuration block for node-to-node encryption options. Detailed 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.
      • snapshotOptions

        public com.pulumi.core.Output<java.util.Optional<DomainSnapshotOptions>> snapshotOptions()
        Returns:
        Configuration block for snapshot related options. Detailed below. DEPRECATED. For domains running Elasticsearch 5.3 and later, Amazon ES takes hourly automated snapshots, making this setting irrelevant. For domains running earlier versions of Elasticsearch, Amazon ES takes daily automated snapshots.
      • tags

        public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> tags()
        Returns:
        Map of tags to assign to the resource. 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()
        Returns:
        Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
      • vpcOptions

        public com.pulumi.core.Output<java.util.Optional<DomainVpcOptions>> vpcOptions()
        Returns:
        Configuration block for VPC related options. Adding or removing this configuration forces a new resource ([documentation](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html#es-vpc-limitations)). Detailed below.
      • get

        public static Domain get​(java.lang.String name,
                                 com.pulumi.core.Output<java.lang.String> id,
                                 @Nullable
                                 DomainState 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.