A Pulumi package for creating and managing Amazon Web Services (AWS) cloud resources with infrastructure-as-code.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Amazon OpenSearch Service (successor to Elasticsearch Service) is a managed service for search and analytics.
import * as aws from "@pulumi/aws";
import * as opensearch from "@pulumi/aws/opensearch";OpenSearch cluster.
const domain = new aws.opensearch.Domain("search", {
domainName: "my-search-domain",
engineVersion: "OpenSearch_2.11",
clusterConfig: {
instanceType: "t3.small.search",
instanceCount: 2,
zoneAwarenessEnabled: true,
zoneAwarenessConfig: {
availabilityZoneCount: 2,
},
},
ebsOptions: {
ebsEnabled: true,
volumeSize: 20,
volumeType: "gp3",
},
encryptAtRest: {
enabled: true,
kmsKeyId: kmsKey.id,
},
nodeToNodeEncryption: {
enabled: true,
},
domainEndpointOptions: {
enforceHttps: true,
tlsSecurityPolicy: "Policy-Min-TLS-1-2-2019-07",
},
advancedSecurityOptions: {
enabled: true,
internalUserDatabaseEnabled: true,
masterUserOptions: {
masterUserName: "admin",
masterUserPassword: adminPassword,
},
},
tags: {
Environment: "production",
},
});Access policy for the domain.
const domainPolicy = new aws.opensearch.DomainPolicy("policy", {
domainName: domain.domainName,
accessPolicies: pulumi.all([domain.arn]).apply(([arn]) =>
JSON.stringify({
Version: "2012-10-17",
Statement: [{
Effect: "Allow",
Principal: {
AWS: `arn:aws:iam::${accountId}:root`,
},
Action: "es:*",
Resource: `${arn}/*`,
}],
})
),
});const vpcDomain = new aws.opensearch.Domain("vpc-search", {
domainName: "vpc-search-domain",
engineVersion: "OpenSearch_2.11",
clusterConfig: {
instanceType: "r6g.large.search",
instanceCount: 3,
},
vpcOptions: {
subnetIds: subnetIds,
securityGroupIds: [securityGroup.id],
},
});const prodDomain = new aws.opensearch.Domain("production", {
domainName: "prod-search",
engineVersion: "OpenSearch_2.11",
clusterConfig: {
instanceType: "r6g.2xlarge.search",
instanceCount: 6,
dedicatedMasterEnabled: true,
dedicatedMasterType: "r6g.large.search",
dedicatedMasterCount: 3,
zoneAwarenessEnabled: true,
zoneAwarenessConfig: {
availabilityZoneCount: 3,
},
},
ebsOptions: {
ebsEnabled: true,
volumeSize: 100,
volumeType: "gp3",
iops: 3000,
throughput: 125,
},
});Install with Tessl CLI
npx tessl i tessl/npm-pulumi--aws@7.16.0