domain resource¶
Source: internal/service/opensearch/domain_types.go:3
Example usage:
imports: {
aws-opensearch: 'github.com/cloudboss/unobin-library-aws//service/opensearch'
}
resources: {
example: aws-opensearch.domain {
# Set input fields here.
}
}
Inputs¶
domain-name
string
access-policies
optional(string)
advanced-options
optional(map(string))
advanced-security-options
optional(object)
optional(
object({
anonymous-auth-enabled: optional(boolean)
enabled: boolean
iam-federation-options: optional(
object({
enabled: optional(boolean)
roles-key: optional(string)
subject-key: optional(string)
})
)
internal-user-database-enabled: boolean
jwt-options: optional(
object({
enabled: optional(boolean)
jwks-url: optional(string)
public-key: optional(string)
roles-key: optional(string)
subject-key: optional(string)
})
)
master-user-options: optional(
object({
master-user-arn: optional(string)
master-user-name: optional(string)
master-user-password: optional(string)
})
)
saml-options: optional(
object({
enabled: boolean
idp: optional(
object({
entity-id: string
metadata-content: string
})
)
master-backend-role: optional(string)
master-user-name: optional(string)
roles-key: optional(string)
session-timeout-minutes: integer
subject-key: optional(string)
})
)
})
)
aiml-options
optional(object)
optional(
object({
natural-language-query-generation-options: optional(
object({
desired-state: string
})
)
s3-vectors-engine: optional(
object({
enabled: optional(boolean)
})
)
serverless-vector-acceleration: optional(
object({
enabled: optional(boolean)
})
)
})
)
auto-tune-options
optional(object)
optional(
object({
desired-state: string
maintenance-schedule: optional(
list(
object({
cron-expression-for-recurrence: string
duration: object({
unit: string
value: integer
})
start-at: string
})
)
)
rollback-on-disable: optional(string)
use-off-peak-window: boolean
})
)
automated-snapshot-pause-options
optional(object)
optional(
object({
enabled: boolean
start-time: optional(string)
end-time: optional(string)
})
)
cluster-config
optional(object)
optional(
object({
cold-storage-options: optional(
object({
enabled: optional(boolean)
})
)
dedicated-master-count: optional(integer)
dedicated-master-enabled: boolean
dedicated-master-type: optional(string)
instance-count: integer
instance-type: string
multi-az-with-standby-enabled: optional(boolean)
node-options: optional(
list(
object({
node-config: optional(
object({
count: optional(integer)
enabled: optional(boolean)
type: optional(string)
})
)
node-type: string
})
)
)
warm-count: integer
warm-enabled: optional(boolean)
warm-type: optional(string)
zone-awareness-config: optional(
object({
availability-zone-count: integer
})
)
zone-awareness-enabled: optional(boolean)
})
)
cognito-options
optional(object)
optional(
object({
enabled: boolean
identity-pool-id: string
role-arn: string
user-pool-id: string
})
)
deployment-strategy-options
optional(object)
optional(
object({
deployment-strategy: string
})
)
domain-endpoint-options
optional(object)
optional(
object({
custom-endpoint: optional(string)
custom-endpoint-certificate-arn: optional(string)
custom-endpoint-enabled: boolean
enforce-https: boolean
tls-security-policy: optional(string)
})
)
ebs-options
optional(object)
optional(
object({
ebs-enabled: boolean
iops: optional(integer)
throughput: optional(integer)
volume-size: optional(integer)
volume-type: optional(string)
})
)
encrypt-at-rest
optional(object)
optional(
object({
enabled: boolean
kms-key-id: optional(string)
})
)
engine-version
optional(string)
identity-center-options
optional(object)
optional(
object({
enabled-api-access: optional(boolean)
identity-center-instance-arn: optional(string)
roles-key: optional(string)
subject-key: optional(string)
})
)
ip-address-type
optional(string)
log-publishing-options
optional(list(object))
optional(
list(
object({
cloudwatch-log-group-arn: string
enabled: optional(boolean)
log-type: string
})
)
)
node-to-node-encryption
optional(object)
optional(
object({
enabled: boolean
})
)
off-peak-window-options
optional(object)
optional(
object({
enabled: optional(boolean)
off-peak-window: optional(
object({
window-start-time: optional(
object({
hours: integer
minutes: integer
})
)
})
)
})
)
snapshot-options
optional(object)
optional(
object({
automated-snapshot-start-hour: integer
})
)
software-update-options
optional(object)
optional(
object({
auto-software-update-enabled: boolean
})
)
tags
optional(map(string))
vpc-options
optional(object)
optional(
object({
egress-enabled: optional(boolean)
security-group-ids: optional(list(string))
subnet-ids: optional(list(string))
})
)
Input Constraints¶
Ip address type rules
ip-address-type must be ipv4 or dualstack.
Rule logic
- When
input.ip-address-type != null- Require
input.ip-address-type == 'ipv4'
|| input.ip-address-type == 'dualstack'
Deployment strategy options rules
deployment-strategy must be Default or CapacityOptimized.
Rule logic
- When
input.deployment-strategy-options != null- Require
input.deployment-strategy-options.deployment-strategy == 'Default'
|| input.deployment-strategy-options.deployment-strategy == 'CapacityOptimized'
Domain endpoint options rules
tls-security-policy must be a supported OpenSearch policy.
Rule logic
- When
input.domain-endpoint-options.tls-security-policy != null- Require
input.domain-endpoint-options.tls-security-policy == 'Policy-Min-TLS-1-0-2019-07'
|| input.domain-endpoint-options.tls-security-policy == 'Policy-Min-TLS-1-2-2019-07'
|| input.domain-endpoint-options.tls-security-policy == 'Policy-Min-TLS-1-2-PFS-2023-10'
|| input.domain-endpoint-options.tls-security-policy == 'Policy-Min-TLS-1-2-RFC9151-FIPS-2024-08'
Snapshot options rules
automated-snapshot-start-hour must be between 0 and 23.
Rule logic
- When
input.snapshot-options != null- Require
(input.snapshot-options.automated-snapshot-start-hour == null || input.snapshot-options.automated-snapshot-start-hour >= 0)
&& (input.snapshot-options.automated-snapshot-start-hour == null || input.snapshot-options.automated-snapshot-start-hour <= 23)
Advanced security options rules
session-timeout-minutes must be between 1 and 1440.
Rule logic
- When
input.advanced-security-options.saml-options != null- Require
(input.advanced-security-options.saml-options.session-timeout-minutes == null || input.advanced-security-options.saml-options.session-timeout-minutes >= 1)
&& (input.advanced-security-options.saml-options.session-timeout-minutes == null || input.advanced-security-options.saml-options.session-timeout-minutes <= 1440)
enabled JWT requires jwks-url or public-key.
Rule logic
- When
input.advanced-security-options.jwt-options.enabled == true- Require
input.advanced-security-options.jwt-options.jwks-url != null
|| input.advanced-security-options.jwt-options.public-key != null
enabled SAML requires idp.
Rule logic
- When
input.advanced-security-options.saml-options.enabled == true- Require
input.advanced-security-options.saml-options.idp != null
Auto tune options rules
auto-tune desired-state must be ENABLED or DISABLED.
Rule logic
- When
input.auto-tune-options != null- Require
input.auto-tune-options.desired-state == 'ENABLED'
|| input.auto-tune-options.desired-state == 'DISABLED'
rollback-on-disable must be NO_ROLLBACK or DEFAULT_ROLLBACK.
Rule logic
- When
input.auto-tune-options.rollback-on-disable != null- Require
input.auto-tune-options.rollback-on-disable == 'NO_ROLLBACK'
|| input.auto-tune-options.rollback-on-disable == 'DEFAULT_ROLLBACK'
use-off-peak-window conflicts with maintenance-schedule.
Rule logic
- When
input.auto-tune-options.use-off-peak-window == true- Require
input.auto-tune-options.maintenance-schedule == null
auto-tune duration unit must be HOURS.
Rule logic
- For each
input.auto-tune-options.maintenance-schedule ?? []- Require
@each.value.duration.unit == 'HOURS'
auto-tune duration value must be greater than zero.
Rule logic
- For each
input.auto-tune-options.maintenance-schedule ?? []- Require
@each.value.duration.value > 0
Cluster config rules
dedicated-master-count must be at least 1.
Rule logic
- When
input.cluster-config.dedicated-master-count != null- Require
input.cluster-config.dedicated-master-count >= 1
instance-count must be at least 1.
Rule logic
- When
input.cluster-config != null- Require
input.cluster-config.instance-count == null
|| input.cluster-config.instance-count >= 1
warm-count must be between 2 and 150.
Rule logic
- When
input.cluster-config.warm-enabled != null- Require
(input.cluster-config.warm-count == null || input.cluster-config.warm-count >= 2)
&& (input.cluster-config.warm-count == null || input.cluster-config.warm-count <= 150)
warm-type must be a supported UltraWarm instance type.
Rule logic
- When
input.cluster-config.warm-type != null- Require
input.cluster-config.warm-type == 'ultrawarm1.medium.search'
|| input.cluster-config.warm-type == 'ultrawarm1.large.search'
|| input.cluster-config.warm-type == 'ultrawarm1.xlarge.search'
availability-zone-count must be 2 or 3.
Rule logic
- When
input.cluster-config.zone-awareness-config != null- Require
input.cluster-config.zone-awareness-config.availability-zone-count == 2
|| input.cluster-config.zone-awareness-config.availability-zone-count == 3
node-type must be coordinator.
Rule logic
- For each
input.cluster-config.node-options ?? []- Require
@each.value.node-type == 'coordinator'
node count must be at least 1.
Rule logic
- For each
input.cluster-config.node-options ?? []- When
@each.value.node-config.count != null- Require
@each.value.node-config.count >= 1
Ebs options rules
volume-type must be standard, gp2, io1, or gp3.
Rule logic
- When
input.ebs-options.volume-type != null- Require
input.ebs-options.volume-type == 'standard'
|| input.ebs-options.volume-type == 'gp2'
|| input.ebs-options.volume-type == 'io1'
|| input.ebs-options.volume-type == 'gp3'
iops requires volume-type io1 or gp3.
Rule logic
- When
input.ebs-options.iops != null- Require
input.ebs-options.volume-type == 'io1'
|| input.ebs-options.volume-type == 'gp3'
throughput requires gp3 and must be at least 125.
Rule logic
- When
input.ebs-options.throughput != null- Require
input.ebs-options.volume-type == 'gp3'
&& input.ebs-options.throughput >= 125
volume-size must be at least 1.
Rule logic
- When
input.ebs-options.volume-size != null- Require
input.ebs-options.volume-size >= 1
Log publishing options rules
log-type must be a supported OpenSearch log type.
Rule logic
- For each
input.log-publishing-options ?? []- Require
@each.value.log-type == 'INDEX_SLOW_LOGS'
|| @each.value.log-type == 'SEARCH_SLOW_LOGS'
|| @each.value.log-type == 'ES_APPLICATION_LOGS'
|| @each.value.log-type == 'AUDIT_LOGS'
Outputs¶
domain-name
string
domain-id
string
arn
string
engine-version
string
ip-address-type
string
endpoint
optional(string)
endpoint-v2
optional(string)
endpoints
optional(map(string))
dashboard-endpoint
optional(string)
dashboard-endpoint-v2
optional(string)
domain-endpoint-v2-hosted-zone-id
optional(string)
created
boolean
deleted
boolean
processing
boolean
upgrade-processing
boolean
vpc-options
optional(object)
optional(
object({
availability-zones: list(string)
egress-enabled: optional(boolean)
security-group-ids: list(string)
subnet-ids: list(string)
vpc-id: string
})
)
service-software-options
optional(object)
optional(
object({
automated-update-date: optional(string)
cancellable: boolean
current-version: optional(string)
description: optional(string)
new-version: optional(string)
optional-deployment: boolean
update-available: boolean
update-status: string
})
)
anonymous-auth-disable-date
optional(string)
identity-center-application-arn
optional(string)
identity-store-id
optional(string)
automated-snapshot-pause-options
optional(object)
optional(
object({
enabled: boolean
state: string
start-time: optional(string)
end-time: optional(string)
})
)