1711 lines
1.6 MiB
1711 lines
1.6 MiB
{
|
||
"sessionId": "5d2bcd3d-0724-4829-a079-f5e881543ab6",
|
||
"projectHash": "2315fccd1067c9601c4fd99b0ba64823b930e19a77654e5dd14adc8de804f888",
|
||
"startTime": "2026-01-22T17:45:51.211Z",
|
||
"lastUpdated": "2026-01-22T18:01:00.745Z",
|
||
"messages": [
|
||
{
|
||
"id": "f08c749f-43a4-4a3b-823e-a0fc8bbfbe3e",
|
||
"timestamp": "2026-01-22T17:45:51.211Z",
|
||
"type": "user",
|
||
"content": "I have a change in the dxw-11 branch that i would like to port to the master branch."
|
||
},
|
||
{
|
||
"id": "52f6052f-13f7-4e29-afb9-7e4c8befee8d",
|
||
"timestamp": "2026-01-22T17:45:56.214Z",
|
||
"type": "gemini",
|
||
"content": "I will start by checking the current branch and comparing the differences between the `dxw-11` and `master` branches to identify the changes that need to be ported.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Assessing Branch Differences",
|
||
"description": "I'm starting by comparing the `dxw-11` branch with `master`, to get a grip on the changes. The goal is a clear understanding of what needs to be ported. Currently, I'm focusing on the nature of these differences before proceeding.",
|
||
"timestamp": "2026-01-22T17:45:56.002Z"
|
||
},
|
||
{
|
||
"subject": "Defining the Porting Scope",
|
||
"description": "I've begun outlining the scope of the porting task. Initial steps involve identifying and categorizing the modifications in `dxw-11`. The aim is to create a prioritized checklist for transfer to the `master` branch. I'm focusing on classifying the types of changes to streamline the process.",
|
||
"timestamp": "2026-01-22T17:45:56.003Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 12164,
|
||
"output": 78,
|
||
"cached": 0,
|
||
"thoughts": 74,
|
||
"tool": 0,
|
||
"total": 12316
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769103956212-a99b2b5684f698",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Check current branch and list files changed between master and dxw-11.",
|
||
"command": "git branch && git diff master..dxw-11 --stat"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769103956212-a99b2b5684f698",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git branch && git diff master..dxw-11 --stat\nDirectory: (root)\nOutput: dxw-11\n* master\n LICENSE.TXT | 2 +-\n Makefile | 28 -\n NOTICE.TXT | 1109 -----------\n README.md | 36 +-\n lambda/managedeni.py | 2 +-\n lambda/nodemanager.py | 117 +-\n lambda/package/custom_resource_base.zip | Bin 1972547 -> 4394054 bytes\n lambda/package/managedeni_pkg.sh | 1 -\n lambda/package/nodemanager_pkg.sh | 2 -\n lambda/utils.py | 2 +-\n marklogic-mlcmd.spec | 32 -\n mlcluster-vpc.template | 783 +++-----\n mlcluster.template | 1312 +++++---------\n mlcmd/bin/mlcmd | 83 -\n mlcmd/bin/startec2.sh | 64 -\n mlcmd/conf/cluster-item.xml | 29 -\n mlcmd/conf/cluster-item.xsd | 60 -\n mlcmd/conf/ebs-devices.xml | 240 ---\n mlcmd/conf/log4j.properties | 17 -\n mlcmd/conf/log4j2.xml | 22 -\n mlcmd/conf/sdbsample.xml | 47 -\n ...aws-java-sdk-autoscaling-1.12.530.jar | Bin 925619 -> 0 bytes\n ...-java-sdk-cloudformation-1.12.530.jar | Bin 1056907 -> 0 bytes\n .../aws-java-sdk-cloudwatch-1.12.530.jar | Bin 534111 -> 0 bytes\n .../aws/aws-java-sdk-core-1.12.530.jar | Bin 1054840 -> 0 bytes\n .../aws-java-sdk-dynamodb-1.12.530.jar | Bin 2079035 -> 0 bytes\n .../aws/aws-java-sdk-ec2-1.12.530.jar | Bin 8726273 -> 0 bytes\n ...sdk-elasticloadbalancing-1.12.530.jar | Bin 397286 -> 0 bytes\n .../aws-java-sdk-glacier-1.12.530.jar | Bin 521303 -> 0 bytes\n .../aws/aws-java-sdk-kms-1.12.530.jar | Bin 717069 -> 0 bytes\n .../ext/aws/aws-java-sdk-s3-1.12.530.jar | Bin 1267078 -> 0 bytes\n .../aws-java-sdk-simpledb-1.12.530.jar | Bin 151234 -> 0 bytes\n .../aws/aws-java-sdk-sns-1.12.530.jar | Bin 480588 -> 0 bytes\n .../aws/aws-java-sdk-sqs-1.12.530.jar | Bin 355344 -> 0 bytes\n mlcmd/ext/aws/aws_ext.jar | Bin 262188 -> 0 bytes\n mlcmd/ext/aws/ion-java-1.10.5.jar | Bin 809830 -> 0 bytes\n .../aws/jackson-annotations-2.19.0.jar | Bin 78580 -> 0 bytes\n mlcmd/ext/aws/jackson-core-2.19.0.jar | Bin 599926 -> 0 bytes\n .../ext/aws/jackson-databind-2.19.0.jar | Bin 1678748 -> 0 bytes\n .../jackson-dataformat-cbor-2.19.0.jar | Bin 71626 -> 0 bytes\n mlcmd/ext/aws/jmespath-java-1.12.530.jar | Bin 27589 -> 0 bytes\n mlcmd/ext/aws/joda-time-2.8.1.jar | Bin 621931 -> 0 bytes\n mlcmd/ext/aws/module.xml | 11 -\n mlcmd/lib/commons-codec-1.18.0.jar | Bin 373045 -> 0 bytes\n mlcmd/lib/commons-io-2.19.0.jar | Bin 556073 -> 0 bytes\n mlcmd/lib/commons-lang-2.6.jar | Bin 284220 -> 0 bytes\n mlcmd/lib/commons-logging-1.2.jar | Bin 61829 -> 0 bytes\n mlcmd/lib/httpclient-4.5.13.jar | Bin 780321 -> 0 bytes\n mlcmd/lib/httpcore-4.4.13.jar | Bin 328593 -> 0 bytes\n mlcmd/lib/json-path-0.9.0.jar | Bin 94022 -> 0 bytes\n mlcmd/lib/json-smart-1.2.jar | Bin 54203 -> 0 bytes\n mlcmd/lib/log4j-1.2-api-2.17.1.jar | Bin 208005 -> 0 bytes\n mlcmd/lib/log4j-api-2.17.1.jar | Bin 301873 -> 0 bytes\n mlcmd/lib/log4j-core-2.17.1.jar | Bin 1790452 -> 0 bytes\n mlcmd/lib/resolver.jar | Bin 84091 -> 0 bytes\n mlcmd/lib/saxon9he.jar | Bin 4172325 -> 0 bytes\n mlcmd/lib/slf4j-api-1.7.5.jar | Bin 26084 -> 0 bytes\n mlcmd/lib/slf4j-log4j12-1.7.7.jar | Bin 8870 -> 0 bytes\n mlcmd/lib/stax-utils.jar | Bin 128561 -> 0 bytes\n mlcmd/lib/stax2-api-3.1.1.jar | Bin 182505 -> 0 bytes\n mlcmd/lib/woodstox-core-7.1.1.jar | Bin 1612256 -> 0 bytes\n mlcmd/lib/xercesImpl.jar | Bin 1446149 -> 0 bytes\n mlcmd/lib/xmlsh-1.3.jar | Bin 754281 -> 0 bytes\n mlcmd/lib/xom-1.2.6.jar | Bin 310345 -> 0 bytes\n mlcmd/mlcmd.sh | 4 -\n mlcmd/scripts/ddb-functions.xsh | 661 -------\n mlcmd/scripts/ec2-attach-volume.xsh | 5 -\n mlcmd/scripts/ec2-get-meta.xsh | 8 -\n mlcmd/scripts/ec2-get-region.xsh | 5 -\n mlcmd/scripts/ec2-get-userdata.xsh | 13 -\n mlcmd/scripts/ec2-startup.xsh | 60 -\n .../ec2-wait-for-ebs-attachments.xsh | 22 -\n mlcmd/scripts/functions.xsh | 687 -------\n mlcmd/scripts/get-active-hosts.xsh | 19 -\n mlcmd/scripts/get-hostid.xsh | 19 -\n mlcmd/scripts/init-autocreate.xsh | 59 -\n mlcmd/scripts/init-config.xsh | 368 ----\n mlcmd/scripts/init-license-key.xsh | 75 -\n mlcmd/scripts/init-security.xsh | 42 -\n mlcmd/scripts/init-volume.xsh | 172 --\n mlcmd/scripts/init-volumes-from-mdb.xsh | 37 -\n .../scripts/init-volumes-from-system.xsh | 56 -\n mlcmd/scripts/init.xsh | 22 -\n mlcmd/scripts/initialize-node.xsh | 173 --\n mlcmd/scripts/is-initialized.xsh | 30 -\n mlcmd/scripts/join-cluster.xsh | 69 -\n mlcmd/scripts/join-master.xsh | 43 -\n mlcmd/scripts/leave-cluster.xsh | 44 -\n mlcmd/scripts/mdb-functions.xsh | 267 ---\n mlcmd/scripts/mdb-init-node.xsh | 22 -\n mlcmd/scripts/mount-volume.xsh | 71 -\n mlcmd/scripts/rename-host.xsh | 56 -\n mlcmd/scripts/rest-request.xsh | 36 -\n mlcmd/scripts/rest-uri.xsh | 30 -\n mlcmd/scripts/sdb-functions.xsh | 302 ---\n mlcmd/scripts/sync-volumes-from-mdb.xsh | 10 -\n mlcmd/scripts/sync-volumes-to-mdb.xsh | 37 -\n mlcmd/scripts/update-hosts.xsh | 14 -\n mlcmd/scripts/wait-for-startup.xsh | 40 -\n templates/ml-endpoint.template | 2 +-\n templates/ml-managedeni.template | 8 +-\n templates/ml-nodemanager.template | 9 +-\n templates/ml-vpc.template | 2 +-\n 103 files changed, 751 insertions(+), 6847 deletions(-)\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35270"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:46:05.043Z",
|
||
"resultDisplay": " dxw-11\n* master\n LICENSE.TXT | 2 +-\n Makefile | 28 -\n NOTICE.TXT | 1109 -----------\n README.md | 36 +-\n lambda/managedeni.py | 2 +-\n lambda/nodemanager.py | 117 +-\n lambda/package/custom_resource_base.zip | Bin 1972547 -> 4394054 bytes\n lambda/package/managedeni_pkg.sh | 1 -\n lambda/package/nodemanager_pkg.sh | 2 -\n lambda/utils.py | 2 +-\n marklogic-mlcmd.spec | 32 -\n mlcluster-vpc.template | 783 +++-----\n mlcluster.template | 1312 +++++---------\n mlcmd/bin/mlcmd | 83 -\n mlcmd/bin/startec2.sh | 64 -\n mlcmd/conf/cluster-item.xml | 29 -\n mlcmd/conf/cluster-item.xsd | 60 -\n mlcmd/conf/ebs-devices.xml | 240 ---\n mlcmd/conf/log4j.properties | 17 -\n mlcmd/conf/log4j2.xml | 22 -\n mlcmd/conf/sdbsample.xml | 47 -\n ...aws-java-sdk-autoscaling-1.12.530.jar | Bin 925619 -> 0 bytes\n ...-java-sdk-cloudformation-1.12.530.jar | Bin 1056907 -> 0 bytes\n .../aws-java-sdk-cloudwatch-1.12.530.jar | Bin 534111 -> 0 bytes\n .../aws/aws-java-sdk-core-1.12.530.jar | Bin 1054840 -> 0 bytes\n .../aws-java-sdk-dynamodb-1.12.530.jar | Bin 2079035 -> 0 bytes\n .../aws/aws-java-sdk-ec2-1.12.530.jar | Bin 8726273 -> 0 bytes\n ...sdk-elasticloadbalancing-1.12.530.jar | Bin 397286 -> 0 bytes\n .../aws-java-sdk-glacier-1.12.530.jar | Bin 521303 -> 0 bytes\n .../aws/aws-java-sdk-kms-1.12.530.jar | Bin 717069 -> 0 bytes\n .../ext/aws/aws-java-sdk-s3-1.12.530.jar | Bin 1267078 -> 0 bytes\n .../aws-java-sdk-simpledb-1.12.530.jar | Bin 151234 -> 0 bytes\n .../aws/aws-java-sdk-sns-1.12.530.jar | Bin 480588 -> 0 bytes\n .../aws/aws-java-sdk-sqs-1.12.530.jar | Bin 355344 -> 0 bytes\n mlcmd/ext/aws/aws_ext.jar | Bin 262188 -> 0 bytes\n mlcmd/ext/aws/ion-java-1.10.5.jar | Bin 809830 -> 0 bytes\n .../aws/jackson-annotations-2.19.0.jar | Bin 78580 -> 0 bytes\n mlcmd/ext/aws/jackson-core-2.19.0.jar | Bin 599926 -> 0 bytes\n .../ext/aws/jackson-databind-2.19.0.jar | Bin 1678748 -> 0 bytes\n .../jackson-dataformat-cbor-2.19.0.jar | Bin 71626 -> 0 bytes\n mlcmd/ext/aws/jmespath-java-1.12.530.jar | Bin 27589 -> 0 bytes\n mlcmd/ext/aws/joda-time-2.8.1.jar | Bin 621931 -> 0 bytes\n mlcmd/ext/aws/module.xml | 11 -\n mlcmd/lib/commons-codec-1.18.0.jar | Bin 373045 -> 0 bytes\n mlcmd/lib/commons-io-2.19.0.jar | Bin 556073 -> 0 bytes\n mlcmd/lib/commons-lang-2.6.jar | Bin 284220 -> 0 bytes\n mlcmd/lib/commons-logging-1.2.jar | Bin 61829 -> 0 bytes\n mlcmd/lib/httpclient-4.5.13.jar | Bin 780321 -> 0 bytes\n mlcmd/lib/httpcore-4.4.13.jar | Bin 328593 -> 0 bytes\n mlcmd/lib/json-path-0.9.0.jar | Bin 94022 -> 0 bytes\n mlcmd/lib/json-smart-1.2.jar | Bin 54203 -> 0 bytes\n mlcmd/lib/log4j-1.2-api-2.17.1.jar | Bin 208005 -> 0 bytes\n mlcmd/lib/log4j-api-2.17.1.jar | Bin 301873 -> 0 bytes\n mlcmd/lib/log4j-core-2.17.1.jar | Bin 1790452 -> 0 bytes\n mlcmd/lib/resolver.jar | Bin 84091 -> 0 bytes\n mlcmd/lib/saxon9he.jar | Bin 4172325 -> 0 bytes\n mlcmd/lib/slf4j-api-1.7.5.jar | Bin 26084 -> 0 bytes\n mlcmd/lib/slf4j-log4j12-1.7.7.jar | Bin 8870 -> 0 bytes\n mlcmd/lib/stax-utils.jar | Bin 128561 -> 0 bytes\n mlcmd/lib/stax2-api-3.1.1.jar | Bin 182505 -> 0 bytes\n mlcmd/lib/woodstox-core-7.1.1.jar | Bin 1612256 -> 0 bytes\n mlcmd/lib/xercesImpl.jar | Bin 1446149 -> 0 bytes\n mlcmd/lib/xmlsh-1.3.jar | Bin 754281 -> 0 bytes\n mlcmd/lib/xom-1.2.6.jar | Bin 310345 -> 0 bytes\n mlcmd/mlcmd.sh | 4 -\n mlcmd/scripts/ddb-functions.xsh | 661 -------\n mlcmd/scripts/ec2-attach-volume.xsh | 5 -\n mlcmd/scripts/ec2-get-meta.xsh | 8 -\n mlcmd/scripts/ec2-get-region.xsh | 5 -\n mlcmd/scripts/ec2-get-userdata.xsh | 13 -\n mlcmd/scripts/ec2-startup.xsh | 60 -\n .../ec2-wait-for-ebs-attachments.xsh | 22 -\n mlcmd/scripts/functions.xsh | 687 -------\n mlcmd/scripts/get-active-hosts.xsh | 19 -\n mlcmd/scripts/get-hostid.xsh | 19 -\n mlcmd/scripts/init-autocreate.xsh | 59 -\n mlcmd/scripts/init-config.xsh | 368 ----\n mlcmd/scripts/init-license-key.xsh | 75 -\n mlcmd/scripts/init-security.xsh | 42 -\n mlcmd/scripts/init-volume.xsh | 172 --\n mlcmd/scripts/init-volumes-from-mdb.xsh | 37 -\n .../scripts/init-volumes-from-system.xsh | 56 -\n mlcmd/scripts/init.xsh | 22 -\n mlcmd/scripts/initialize-node.xsh | 173 --\n mlcmd/scripts/is-initialized.xsh | 30 -\n mlcmd/scripts/join-cluster.xsh | 69 -\n mlcmd/scripts/join-master.xsh | 43 -\n mlcmd/scripts/leave-cluster.xsh | 44 -\n mlcmd/scripts/mdb-functions.xsh | 267 ---\n mlcmd/scripts/mdb-init-node.xsh | 22 -\n mlcmd/scripts/mount-volume.xsh | 71 -\n mlcmd/scripts/rename-host.xsh | 56 -\n mlcmd/scripts/rest-request.xsh | 36 -\n mlcmd/scripts/rest-uri.xsh | 30 -\n mlcmd/scripts/sdb-functions.xsh | 302 ---\n mlcmd/scripts/sync-volumes-from-mdb.xsh | 10 -\n mlcmd/scripts/sync-volumes-to-mdb.xsh | 37 -\n mlcmd/scripts/update-hosts.xsh | 14 -\n mlcmd/scripts/wait-for-startup.xsh | 40 -\n templates/ml-endpoint.template | 2 +-\n templates/ml-managedeni.template | 8 +-\n templates/ml-nodemanager.template | 9 +-\n templates/ml-vpc.template | 2 +-\n 103 files changed, 751 insertions(+), 6847 deletions(-)",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "81adf96a-06ca-4a70-9e19-5769216b3120",
|
||
"timestamp": "2026-01-22T17:46:10.225Z",
|
||
"type": "gemini",
|
||
"content": "I will examine the `README.md` and some template files to understand the nature of the changes, as it appears `dxw-11` has significantly less code than `master`.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Investigating Changes in Code",
|
||
"description": "I'm analyzing the `git diff` output, and it's clear there are significant deletions, mainly in `mlcmd/` and the `Makefile`. It seems like branch `dxw-11` saw the removal of older components and template updates. A further check with `git diff master..dxw-11` is now underway to clarify.",
|
||
"timestamp": "2026-01-22T17:46:09.246Z"
|
||
},
|
||
{
|
||
"subject": "Reviewing the Branch's Changes",
|
||
"description": "I've examined the `git diff master dxw-11` output now, which clarifies the extent of the changes. The `dxw-11` branch has *fewer* files and much less code overall. It appears that `dxw-11` saw a major reduction in code. Currently, I'm checking the `README.md` and some template files to understand these reductions.",
|
||
"timestamp": "2026-01-22T17:46:10.007Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 14821,
|
||
"output": 87,
|
||
"cached": 9648,
|
||
"thoughts": 172,
|
||
"tool": 0,
|
||
"total": 15080
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769103970224-2eb57c39f7dff8",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"command": "git diff master dxw-11 README.md mlcluster.template mlcluster-vpc.template",
|
||
"description": "Compare README and key template files between master and dxw-11."
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769103970224-2eb57c39f7dff8",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git diff master dxw-11 README.md mlcluster.template mlcluster-vpc.template\nDirectory: (root)\nOutput: diff --git a/README.md b/README.md\nindex efd6c3e..8a4d8db 100644\n--- a/README.md\n+++ b/README.md\n@@ -10,8 +10,8 @@ For deploying MarkLogic on Azure, please visit [cloud-enablement-azure](https://\n \n | Template Type | Launch in US West 2 (Oregon) |\n | -- | -- |\n-| MarkLogic in New VPC | [](https://console.aws.amazon.com/cloudformation/home#/stacks/new?region=us-west-2&stackName=mlClusterStack&templateURL=https://marklogic-db-template-releases.s3-us-west-2.amazonaws.com/12.0-latest/mlcluster-vpc.template) |\n-| MarkLogic in Existing VPC | [](https://console.aws.amazon.com/cloudformation/home#/stacks/new?region=us-west-2&stackName=mlClusterStack&templateURL=https://marklogic-db-template-releases.s3-us-west-2.amazonaws.com/12.0-latest/mlcluster.template) |\n+| MarkLogic in New VPC | [](https://console.aws.amazon.com/cloudformation/home#/stacks/new?region=us-west-2&stackName=mlClusterStack&templateURL=https://marklogic-db-template-releases.s3-us-west-2.amazonaws.com/11.0-latest/mlcluster-vpc.template) |\n+| MarkLogic in Existing VPC | [](https://console.aws.amazon.com/cloudformation/home#/stacks/new?region=us-west-2&stackName=mlClusterStack&templateURL=https://marklogic-db-template-releases.s3-us-west-2.amazonaws.com/11.0-latest/mlcluster.template) |\n \n - To deploy from MarkLogic Website, go to [MarkLogic and Amazon Web Service](https://developer.marklogic.com/products/cloud/aws).\n - To deploy from this GitHub repository, click on `Launch Stack` button above.\n@@ -24,7 +24,7 @@ The CloudFormation templates provide options to launch clusters with different s\n | Option | Allowed Values |\n | -- | -- |\n | VPC | New or Existing |\n-| License | PAYG, BYOL |\n+| License | Developer, BYOL, Essential Enterprise |\n | Availablity Zone | 1 or 3 |\n | Nodes per Zone | 1 to many |\n \n@@ -40,40 +40,14 @@ This directory contains master templates, sub-templates and other resources that\n - [MarkLogic on AWS](https://developer.marklogic.com/products/cloud/aws) \n \n ## Additional Notes\n-### AmazonLinux2023 support in the MarkLogic CloudFormation Templates:\n-\n-Starting with MarkLogic 11.3.1 (combined), the MarkLogic CloudFormation Template supports both Amazon Linux 2023 and Amazon Linux 2. Select the \"AmazonLinux2023\" value from \"OSType\" parameter to create MarkLogic cluster using the AL2023 AMI. The default value for the \"OSType\" parameter is \"AmazonLinux2023\".\n-\n-MarkLogic on AL2023 does not support GPU devices. Any use of the embedded ONNX libraries will be executed using the host’s CPU. Support for GPUs on AL2023 is being investigated for a future release of MarkLogic Server.\n-\n ### AWS Classic Load Balancer Removed from Single Zone Deployments:\n \n Since AWS is retiring the Classic Load Balancer (CLB) as of August 15, 2022, the CLB has been removed for single-zone deployments in the MarkLogic CloudFormation templates. The URL in the outputs of the CloudFormation stack is now replaced with a private DNS name, which can be used to access the MarkLogic cluster.\n \n ### Python Upgrade for Lambda Functions in the MarkLogic CloudFormation Templates:\n \n-The lambda functions in MarkLogic CloudFormation templates used on AWS are now configured to use Python 3.13. AWS has scheduled the end of support for Python 3.9 by December 2025.\n-\n-### Launch Templates and IMDSv2 support in the MarkLogic CloudFormation Templates:\n-\n-Starting with MarkLogic 11.1.0, the MarkLogic CloudFormation Templates replaces the use of Launch Configurations with Launch Templates. This ensures that MarkLogic CFT users can make use of all of the Amazon EC2 Auto Scaling features now available in Launch Templates.\n-\n-Additionally, MarkLogic 11.1.0 adds support for IMDSv2. The IMDSv2 option is set to \"required\" by default in the 11.1.0 and later CFTs. In order to use MarkLogic Server AMIs before 11.1.0 with the new templates, the templates need to be modified to set IMDSv2 to \"optional\" as IMDSv2 is not supported in earlier versions of the MarkLogic AMI.\n-\n-### Build MLCMD RPM for Custom AMIs\n-\n-Starting with MarkLogic 12.0.0, MLCMD is part of MarkLogic CloudFormation Templates repository. MLCMD is only supported when packaged and used in the MarkLogic AMIs published by Progress on the AWS Marketplace. If using MLCMD in a custom AMI, Progress Software provides no warranties or support for the custom AMI or the MLCMD packaged and used in the custom AMI. The steps outlined below are provided for information only. We make no representations that the custom AMI will work. In order to build MLCMD rpm for custom AMIs follow the below steps:\n-\n-Checkout the cloud-enablement-aws repo and run the below make command and RPM will be located under (`build/rpmbuild/RPMS/noarch`):\n-```\n-$ make package\n-```\n-\n-To clean the build run the below command:\n-```\n-$ make clean\n-```\n+The lambda functions in MarkLogic CloudFormation templates used on AWS are now configured to use Python 3.9. AWS has scheduled the end of support for Python 3.6 by July 2022.\n \n ## Support\n \n-The cloud-enablement-aws repository is maintained by MarkLogic Engineering and distributed under the [Apache 2.0 license](https://github.com/marklogic/cloud-enablement-aws/blob/master/LICENSE.TXT). Everyone is encouraged to file bug reports, feature requests, and pull requests through [GitHub](https://github.com/marklogic/cloud-enablement-aws/issues/new). Your input is important and will be carefully considered. However, we can’t promise a specific resolution or timeframe for any request. In addition, MarkLogic provides technical support for [releases](https://github.com/marklogic/cloud-enablement-aws/releases) of cloud-enablement-aws to licensed customers under the terms outlined in the [Support Handbook](http://www.marklogic.com/files/Mark_Logic_Support_Handbook.pdf). For more information or to sign up for support, visit [help.marklogic.com](http://help.marklogic.com).\n+The cloud-enablement-azre repository is maintained by MarkLogic Engineering and distributed under the [Apache 2.0 license](https://github.com/marklogic/cloud-enablement-aws/blob/master/LICENSE.TXT). Everyone is encouraged to file bug reports, feature requests, and pull requests through [GitHub](https://github.com/marklogic/cloud-enablement-aws/issues/new). Your input is important and will be carefully considered. However, we can’t promise a specific resolution or timeframe for any request. In addition, MarkLogic provides technical support for [releases](https://github.com/marklogic/cloud-enablement-aws/releases) of cloud-enablement-aws to licensed customers under the terms outlined in the [Support Handbook](http://www.marklogic.com/files/Mark_Logic_Support_Handbook.pdf). For more information or to sign up for support, visit [help.marklogic.com](http://help.marklogic.com).\ndiff --git a/mlcluster-vpc.template b/mlcluster-vpc.template\nindex cc6ba5d..4b25578 100644\n--- a/mlcluster-vpc.template\n+++ b/mlcluster-vpc.template\n@@ -1,8 +1,8 @@\n AWSTemplateFormatVersion: 2010-09-09\n Description: Deploy a MarkLogic Cluster on AWS with a new VPC\n Metadata:\n- version: 12.0.1\n- binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n+ version: 11.0.2\n+ binary: MarkLogic-11.0.2-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n@@ -137,7 +137,7 @@ Parameters:\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n- - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n+ - ---- Essential Enterprise and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n@@ -204,45 +204,7 @@ Parameters:\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n- - c7i.xlarge\n- - c7i.2xlarge\n- - c7i.4xlarge\n- - c7i.8xlarge\n- - c7i.12xlarge\n- - c7i.16xlarge\n- - c7i.24xlarge\n- - c7i.48xlarge\n- - c7i-flex.xlarge\n- - c7i-flex.2xlarge\n- - c7i-flex.4xlarge\n- - c7i-flex.8xlarge\n- - c7i-flex.12xlarge\n- - c7i-flex.16xlarge\n- - c7a.xlarge\n- - c7a.2xlarge\n- - c7a.4xlarge\n- - c7a.8xlarge\n- - c7a.12xlarge\n- - c7a.16xlarge\n- - c7a.24xlarge\n- - c7a.32xlarge\n- - c7a.48xlarge\n- - c8i.xlarge\n- - c8i.2xlarge\n- - c8i.4xlarge\n- - c8i.8xlarge\n- - c8i.12xlarge\n- - c8i.16xlarge\n- - c8i.24xlarge\n- - c8i.32xlarge\n- - c8i.48xlarge\n- - c8i.96xlarge\n- - c8i-flex.xlarge\n- - c8i-flex.2xlarge\n- - c8i-flex.4xlarge\n- - c8i-flex.8xlarge\n- - c8i-flex.12xlarge\n- - c8i-flex.16xlarge\n+ - cc2.8xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n@@ -262,18 +224,8 @@ Parameters:\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n- - i4i.12xlarge\n - i4i.16xlarge\n- - i4i.24xlarge\n - i4i.32xlarge\n- - i7ie.xlarge\n- - i7ie.2xlarge\n- - i7ie.3xlarge\n- - i7ie.6xlarge\n- - i7ie.12xlarge\n- - i7ie.18xlarge\n- - i7ie.24xlarge\n- - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n@@ -353,53 +305,14 @@ Parameters:\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n- - m7i.xlarge\n- - m7i.2xlarge\n- - m7i.4xlarge\n- - m7i.8xlarge\n- - m7i.12xlarge\n- - m7i.16xlarge\n- - m7i.24xlarge\n- - m7i.48xlarge\n- - m7i-flex.xlarge\n- - m7i-flex.2xlarge\n- - m7i-flex.4xlarge\n- - m7i-flex.8xlarge\n- - m7i-flex.12xlarge\n- - m7i-flex.16xlarge\n- - m7a.xlarge\n- - m7a.2xlarge\n- - m7a.4xlarge\n- - m7a.8xlarge\n- - m7a.12xlarge\n- - m7a.16xlarge\n- - m7a.24xlarge\n- - m7a.32xlarge\n- - m7a.48xlarge\n- - m8a.xlarge\n- - m8a.2xlarge\n- - m8a.4xlarge\n- - m8a.8xlarge\n- - m8a.12xlarge\n- - m8a.16xlarge\n- - m8a.24xlarge\n- - m8a.48xlarge\n- - m8i.xlarge\n- - m8i.2xlarge\n- - m8i.4xlarge\n- - m8i.8xlarge\n- - m8i.12xlarge\n- - m8i.16xlarge\n- - m8i.24xlarge\n- - m8i.32xlarge\n- - m8i.48xlarge\n- - m8i.96xlarge\n- - m8i-flex.xlarge\n- - m8i-flex.2xlarge\n- - m8i-flex.4xlarge\n- - m8i-flex.8xlarge\n- - m8i-flex.12xlarge\n- - m8i-flex.16xlarge\n+ - p2.xlarge\n+ - p2.8xlarge\n+ - p2.16xlarge\n+ - p3.2xlarge\n+ - p3.8xlarge\n+ - p3.16xlarge\n+ - p3dn.24xlarge\n+ - p4d.24xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n@@ -483,54 +396,6 @@ Parameters:\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n- - r7i.xlarge\n- - r7i.2xlarge\n- - r7i.4xlarge\n- - r7i.8xlarge\n- - r7i.12xlarge\n- - r7i.16xlarge\n- - r7i.24xlarge\n- - r7i.48xlarge\n- - r7iz.xlarge\n- - r7iz.2xlarge\n- - r7iz.4xlarge\n- - r7iz.8xlarge\n- - r7iz.12xlarge\n- - r7iz.16xlarge\n- - r7iz.32xlarge\n- - r7a.xlarge\n- - r7a.2xlarge\n- - r7a.4xlarge\n- - r7a.8xlarge\n- - r7a.12xlarge\n- - r7a.16xlarge\n- - r7a.24xlarge\n- - r7a.32xlarge\n- - r7a.48xlarge\n- - r8a.xlarge\n- - r8a.2xlarge\n- - r8a.4xlarge\n- - r8a.8xlarge\n- - r8a.12xlarge\n- - r8a.16xlarge\n- - r8a.24xlarge\n- - r8a.48xlarge\n- - r8i.xlarge\n- - r8i.2xlarge\n- - r8i.4xlarge\n- - r8i.8xlarge\n- - r8i.12xlarge\n- - r8i.16xlarge\n- - r8i.24xlarge\n- - r8i.32xlarge\n- - r8i.48xlarge\n- - r8i.96xlarge\n- - r8i-flex.xlarge\n- - r8i-flex.2xlarge\n- - r8i-flex.4xlarge\n- - r8i-flex.8xlarge\n- - r8i-flex.12xlarge\n- - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n@@ -569,6 +434,34 @@ Parameters:\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n+ - f1.2xlarge\n+ - f1.4xlarge\n+ - f1.16xlarge\n+ - g2.2xlarge\n+ - g2.8xlarge\n+ - g3.4xlarge\n+ - g3.8xlarge\n+ - g3.16xlarge\n+ - g3s.xlarge\n+ - g4ad.xlarge\n+ - g4ad.2xlarge\n+ - g4ad.4xlarge\n+ - g4ad.8xlarge\n+ - g4ad.16xlarge\n+ - g4dn.xlarge\n+ - g4dn.2xlarge\n+ - g4dn.4xlarge\n+ - g4dn.8xlarge\n+ - g4dn.12xlarge\n+ - g4dn.16xlarge\n+ - g5.xlarge\n+ - g5.2xlarge\n+ - g5.4xlarge\n+ - g5.8xlarge\n+ - g5.12xlarge\n+ - g5.16xlarge\n+ - g5.24xlarge\n+ - g5.48xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n@@ -610,26 +503,12 @@ Parameters:\n - c6i.metal\n - c6id.large\n - c6id.metal\n- - c7i.large\n- - c7i.metal-24xl\n- - c7i.metal-48xl\n- - c7i-flex.large\n- - c7a.medium\n- - c7a.large\n- - c7a.metal-48xl\n- - c8i.large\n- - c8i.metal-48xl\n- - c8i.metal-96xl\n- - c8i-flex.large\n+ - g4dn.metal\n - i3.large\n- - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n- - i7ie.large\n- - i7ie.metal-24xl\n- - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n@@ -651,21 +530,6 @@ Parameters:\n - m6i.metal\n - m6id.large\n - m6id.metal\n- - m7i.large\n- - m7i.metal-24xl\n- - m7i.metal-48xl\n- - m7i-flex.large\n- - m7a.medium\n- - m7a.large\n- - m7a.metal-48xl\n- - m8a.medium\n- - m8a.large\n- - m8a.metal-24xl\n- - m8a.metal-48xl\n- - m8i.large\n- - m8i.metal-48xl\n- - m8i.metal-96xl\n- - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n@@ -686,23 +550,6 @@ Parameters:\n - r6i.metal\n - r6id.large\n - r6id.metal\n- - r7i.large\n- - r7i.metal-24xl\n- - r7i.metal-48xl\n- - r7iz.large\n- - r7iz.metal-16xl\n- - r7iz.metal-32xl\n- - r7a.medium\n- - r7a.large\n- - r7a.metal-48xl\n- - r8a.medium\n- - r8a.large\n- - r8a.metal-24xl\n- - r8a.metal-48xl\n- - r8i.large\n- - r8i.metal-48xl\n- - r8i.metal-96xl\n- - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n@@ -739,7 +586,7 @@ Parameters:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance.\n Type: String\n NumberOfZones:\n- Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n+ Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer. \n Type: Number\n AllowedValues:\n - 1\n@@ -820,11 +667,11 @@ Parameters:\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n- Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n- Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n Conditions:\n@@ -836,7 +683,7 @@ Conditions:\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone: !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n- PAYG: !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n+ EssentialEnterprise: !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\n@@ -847,53 +694,53 @@ Mappings:\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n- base: '12.0.1'\n+ base: '11.0.2'\n LicenseRegion2AMI:\n us-east-1:\n- PAYGAl2023: ami-0198b8931e9597271\n- BYOLAl2023: ami-0a8536507241f95b0\n+ Enterprise: ami-0bf7e657fab67e971\n+ BYOL: ami-07d160aaa381d98d3\n us-east-2:\n- PAYGAl2023: ami-0877b64dae8264415\n- BYOLAl2023: ami-082cc98b2c01e486a\n+ Enterprise: ami-0b364b6c340494cde\n+ BYOL: ami-02fc4c59b1e0f84fc\n us-west-1:\n- PAYGAl2023: ami-07890fc78f4ddfa20\n- BYOLAl2023: ami-05c9a962410c2821b\n+ Enterprise: ami-0427f5f4c4ec4fb1a\n+ BYOL: ami-0db1c9ca54f60c93a\n us-west-2:\n- PAYGAl2023: ami-0577eb149c9e0f53f\n- BYOLAl2023: ami-0262dd8d014bf71ba\n+ Enterprise: ami-0f4226d039f3538a4\n+ BYOL: ami-036d6f6629eeae6ae\n eu-central-1:\n- PAYGAl2023: ami-06348556399c8ab69\n- BYOLAl2023: ami-00cb5a3527e7c0d11\n+ Enterprise: ami-0adde7fcee8e0abac\n+ BYOL: ami-0175f20a0ff9b2b41\n eu-west-1:\n- PAYGAl2023: ami-0fa7bc44cd9ab1f85\n- BYOLAl2023: ami-0bc2b4d46367806b0\n+ Enterprise: ami-0adad0df164f5d3d2\n+ BYOL: ami-0162fd6fe0c778804\n ap-south-1:\n- PAYGAl2023: ami-0f481ba0a6819ced6\n- BYOLAl2023: ami-00b59374107e5efb6\n+ Enterprise: ami-05cb78bc62095559e\n+ BYOL: ami-0b6472e5b25075c3a\n ap-southeast-1:\n- PAYGAl2023: ami-0c373c6c8a2316c80\n- BYOLAl2023: ami-0b9bd265ef165a07b\n+ Enterprise: ami-0ace4c492256d582b\n+ BYOL: ami-0337694124652af4a\n ap-southeast-2:\n- PAYGAl2023: ami-0c65a907408226a3e\n- BYOLAl2023: ami-02bad1ef2c6d4a91a\n+ Enterprise: ami-09b42852706d80f61\n+ BYOL: ami-03d830bd349cddcbc\n ap-northeast-1:\n- PAYGAl2023: ami-0254bc4adaf13e3b9\n- BYOLAl2023: ami-07e8b312b1016bf67\n+ Enterprise: ami-0860fd2cf7c494dfc\n+ BYOL: ami-0f810574accbd33b2\n ap-northeast-2:\n- PAYGAl2023: ami-05995b5f5807873d7\n- BYOLAl2023: ami-0afd77ba0d7a0c129\n+ Enterprise: ami-09e07ba03b2662e4b\n+ BYOL: ami-04f97692a8557b493\n sa-east-1:\n- PAYGAl2023: ami-05ec8fee12de236a5\n- BYOLAl2023: ami-09d883ea308449555\n+ Enterprise: ami-0b94055f72e2d3a30\n+ BYOL: ami-00aadd4fc8a06eeff\n eu-west-2:\n- PAYGAl2023: ami-0f5cff9d243f31521\n- BYOLAl2023: ami-0588d104a52fbc326\n+ Enterprise: ami-01da8900f033938cb\n+ BYOL: ami-016eaaa73edae05a9\n ca-central-1:\n- PAYGAl2023: ami-0f34d118b23b51bf5\n- BYOLAl2023: ami-0c78eccd03e957005\n+ Enterprise: ami-0229c2f9c0da8bfb4\n+ BYOL: ami-083a7db6e6afd6067\n eu-west-3:\n- PAYGAl2023: ami-01fa9155eb17992c5\n- BYOLAl2023: ami-0637199acc5327534\n+ Enterprise: ami-0ac4d1b01ef025708\n+ BYOL: ami-0b44d169075494c13\n Resources:\n VpcStack:\n Type: AWS::CloudFormation::Stack\n@@ -1034,9 +881,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet1Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1089,9 +934,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet1Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1154,9 +997,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet2Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp2\n- Version: !GetAtt LaunchTemp2.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig2\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1219,9 +1060,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet3Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp3\n- Version: !GetAtt LaunchTemp3.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig3\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1324,290 +1163,272 @@ Resources:\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n- LaunchTemp1:\n- Type: 'AWS::EC2::LaunchTemplate'\n+ LaunchConfig1:\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume1\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeA#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume1\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeA#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=1\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=1\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n- LaunchTemp2:\n+ LaunchConfig2:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume2\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeB#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume2\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeB#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n- LaunchTemp3:\n+ LaunchConfig3:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume3\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeC#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume3\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeC#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\ndiff --git a/mlcluster.template b/mlcluster.template\nindex 198ad14..3ea5f5c 100644\n--- a/mlcluster.template\n+++ b/mlcluster.template\n@@ -1,8 +1,8 @@\n AWSTemplateFormatVersion: 2010-09-09\n Description: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\n Metadata:\n- version: 12.0.1\n- binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n+ version: 11.0.2\n+ binary: MarkLogic-11.0.2-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n@@ -32,6 +32,8 @@ Metadata:\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n+ - ExternalAccessCidrIP\n+ - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n@@ -90,6 +92,10 @@ Metadata:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n+ ExternalAccessCidrIP:\n+ default: External IP address range for access to admin site\n+ ECSSecurityGroup:\n+ default: the security group the ecs cluster is in\n Parameters:\n # resource configuration\n IAMRole:\n@@ -100,7 +106,7 @@ Parameters:\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n- Default: '10'\n+ Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n@@ -108,7 +114,7 @@ Parameters:\n - standard\n - gp2\n - gp3\n- Default: gp2\n+ Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n@@ -135,581 +141,8 @@ Parameters:\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n- Default: r5.4xlarge\n+ Default: t3.small\n AllowedValues:\n- - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n- - c3.xlarge\n- - c3.2xlarge\n- - c3.4xlarge\n- - c3.8xlarge\n- - c4.xlarge\n- - c4.2xlarge\n- - c4.4xlarge\n- - c4.8xlarge\n- - c5.xlarge\n- - c5.2xlarge\n- - c5.4xlarge\n- - c5.9xlarge\n- - c5.12xlarge\n- - c5.18xlarge\n- - c5.24xlarge\n- - c5a.xlarge\n- - c5a.2xlarge\n- - c5a.4xlarge\n- - c5a.8xlarge\n- - c5a.12xlarge\n- - c5a.16xlarge\n- - c5a.24xlarge\n- - c5ad.xlarge\n- - c5ad.2xlarge\n- - c5ad.4xlarge\n- - c5ad.8xlarge\n- - c5ad.12xlarge\n- - c5ad.16xlarge\n- - c5ad.24xlarge\n- - c5d.xlarge\n- - c5d.2xlarge\n- - c5d.4xlarge\n- - c5d.9xlarge\n- - c5d.12xlarge\n- - c5d.18xlarge\n- - c5d.24xlarge\n- - c5n.xlarge\n- - c5n.2xlarge\n- - c5n.4xlarge\n- - c5n.9xlarge\n- - c5n.18xlarge\n- - c6a.xlarge\n- - c6a.2xlarge\n- - c6a.4xlarge\n- - c6a.8xlarge\n- - c6a.12xlarge\n- - c6a.16xlarge\n- - c6a.24xlarge\n- - c6a.32xlarge\n- - c6a.48xlarge\n- - c6i.xlarge\n- - c6i.2xlarge\n- - c6i.4xlarge\n- - c6i.8xlarge\n- - c6i.12xlarge\n- - c6i.16xlarge\n- - c6i.24xlarge\n- - c6i.32xlarge\n- - c6id.xlarge\n- - c6id.2xlarge\n- - c6id.4xlarge\n- - c6id.8xlarge\n- - c6id.12xlarge\n- - c6id.16xlarge\n- - c6id.24xlarge\n- - c6id.32xlarge\n- - c7i.xlarge\n- - c7i.2xlarge\n- - c7i.4xlarge\n- - c7i.8xlarge\n- - c7i.12xlarge\n- - c7i.16xlarge\n- - c7i.24xlarge\n- - c7i.48xlarge\n- - c7i-flex.xlarge\n- - c7i-flex.2xlarge\n- - c7i-flex.4xlarge\n- - c7i-flex.8xlarge\n- - c7i-flex.12xlarge\n- - c7i-flex.16xlarge\n- - c7a.xlarge\n- - c7a.2xlarge\n- - c7a.4xlarge\n- - c7a.8xlarge\n- - c7a.12xlarge\n- - c7a.16xlarge\n- - c7a.24xlarge\n- - c7a.32xlarge\n- - c7a.48xlarge\n- - c8i.xlarge\n- - c8i.2xlarge\n- - c8i.4xlarge\n- - c8i.8xlarge\n- - c8i.12xlarge\n- - c8i.16xlarge\n- - c8i.24xlarge\n- - c8i.32xlarge\n- - c8i.48xlarge\n- - c8i.96xlarge\n- - c8i-flex.xlarge\n- - c8i-flex.2xlarge\n- - c8i-flex.4xlarge\n- - c8i-flex.8xlarge\n- - c8i-flex.12xlarge\n- - c8i-flex.16xlarge\n- - i2.2xlarge\n- - i2.4xlarge\n- - i2.8xlarge\n- - i2.xlarge\n- - i3.xlarge\n- - i3.2xlarge\n- - i3.4xlarge\n- - i3.8xlarge\n- - i3.16xlarge\n- - i3en.xlarge\n- - i3en.2xlarge\n- - i3en.3xlarge\n- - i3en.6xlarge\n- - i3en.12xlarge\n- - i3en.24xlarge\n- - i4i.xlarge\n- - i4i.2xlarge\n- - i4i.4xlarge\n- - i4i.8xlarge\n- - i4i.12xlarge\n- - i4i.16xlarge\n- - i4i.24xlarge\n- - i4i.32xlarge\n- - i7ie.xlarge\n- - i7ie.2xlarge\n- - i7ie.3xlarge\n- - i7ie.6xlarge\n- - i7ie.12xlarge\n- - i7ie.18xlarge\n- - i7ie.24xlarge\n- - i7ie.48xlarge\n- - m3.xlarge\n- - m3.2xlarge\n- - m4.xlarge\n- - m4.2xlarge\n- - m4.4xlarge\n- - m4.10xlarge\n- - m4.16xlarge\n- - m5.xlarge\n- - m5.2xlarge\n- - m5.4xlarge\n- - m5.8xlarge\n- - m5.12xlarge\n- - m5.16xlarge\n- - m5.24xlarge\n- - m5a.xlarge\n- - m5a.2xlarge\n- - m5a.4xlarge\n- - m5a.8xlarge\n- - m5a.12xlarge\n- - m5a.16xlarge\n- - m5a.24xlarge\n- - m5d.xlarge\n- - m5d.2xlarge\n- - m5d.4xlarge\n- - m5d.8xlarge\n- - m5d.16xlarge\n- - m5d.12xlarge\n- - m5d.24xlarge\n- - m5ad.xlarge\n- - m5ad.2xlarge\n- - m5ad.4xlarge\n- - m5ad.8xlarge\n- - m5ad.12xlarge\n- - m5ad.16xlarge\n- - m5ad.24xlarge\n- - m5zn.xlarge\n- - m5zn.2xlarge\n- - m5zn.3xlarge\n- - m5zn.6xlarge\n- - m5zn.12xlarge\n- - m5n.xlarge\n- - m5n.2xlarge\n- - m5n.4xlarge\n- - m5n.8xlarge\n- - m5n.12xlarge\n- - m5n.16xlarge\n- - m5n.24xlarge\n- - m5dn.xlarge\n- - m5dn.2xlarge\n- - m5dn.4xlarge\n- - m5dn.8xlarge\n- - m5dn.12xlarge\n- - m5dn.16xlarge\n- - m5dn.24xlarge\n- - m6a.xlarge\n- - m6a.2xlarge\n- - m6a.4xlarge\n- - m6a.8xlarge\n- - m6a.12xlarge\n- - m6a.16xlarge\n- - m6a.24xlarge\n- - m6a.32xlarge\n- - m6a.48xlarge\n- - m6i.xlarge\n- - m6i.2xlarge\n- - m6i.4xlarge\n- - m6i.8xlarge\n- - m6i.12xlarge\n- - m6i.16xlarge\n- - m6i.24xlarge\n- - m6i.32xlarge\n- - m6id.xlarge\n- - m6id.2xlarge\n- - m6id.4xlarge\n- - m6id.8xlarge\n- - m6id.12xlarge\n- - m6id.16xlarge\n- - m6id.24xlarge\n- - m6id.32xlarge\n- - m7i.xlarge\n- - m7i.2xlarge\n- - m7i.4xlarge\n- - m7i.8xlarge\n- - m7i.12xlarge\n- - m7i.16xlarge\n- - m7i.24xlarge\n- - m7i.48xlarge\n- - m7i-flex.xlarge\n- - m7i-flex.2xlarge\n- - m7i-flex.4xlarge\n- - m7i-flex.8xlarge\n- - m7i-flex.12xlarge\n- - m7i-flex.16xlarge\n- - m7a.xlarge\n- - m7a.2xlarge\n- - m7a.4xlarge\n- - m7a.8xlarge\n- - m7a.12xlarge\n- - m7a.16xlarge\n- - m7a.24xlarge\n- - m7a.32xlarge\n- - m7a.48xlarge\n- - m8a.xlarge\n- - m8a.2xlarge\n- - m8a.4xlarge\n- - m8a.8xlarge\n- - m8a.12xlarge\n- - m8a.16xlarge\n- - m8a.24xlarge\n- - m8a.48xlarge\n- - m8i.xlarge\n- - m8i.2xlarge\n- - m8i.4xlarge\n- - m8i.8xlarge\n- - m8i.12xlarge\n- - m8i.16xlarge\n- - m8i.24xlarge\n- - m8i.32xlarge\n- - m8i.48xlarge\n- - m8i.96xlarge\n- - m8i-flex.xlarge\n- - m8i-flex.2xlarge\n- - m8i-flex.4xlarge\n- - m8i-flex.8xlarge\n- - m8i-flex.12xlarge\n- - m8i-flex.16xlarge\n- - r3.xlarge\n- - r3.2xlarge\n- - r3.4xlarge\n- - r3.8xlarge\n- - r4.xlarge\n- - r4.2xlarge\n- - r4.4xlarge\n- - r4.8xlarge\n- - r4.16xlarge\n- - r5.xlarge\n- - r5.2xlarge\n- - r5.4xlarge\n- - r5.8xlarge\n- - r5.12xlarge\n- - r5.16xlarge\n- - r5.24xlarge\n- - r5a.xlarge\n- - r5a.2xlarge\n- - r5a.4xlarge\n- - r5a.8xlarge\n- - r5a.12xlarge\n- - r5a.16xlarge\n- - r5a.24xlarge\n- - r5ad.xlarge\n- - r5ad.2xlarge\n- - r5ad.4xlarge\n- - r5ad.8xlarge\n- - r5ad.12xlarge\n- - r5ad.16xlarge\n- - r5ad.24xlarge\n- - r5b.xlarge\n- - r5b.2xlarge\n- - r5b.4xlarge\n- - r5b.8xlarge\n- - r5b.12xlarge\n- - r5b.16xlarge\n- - r5b.24xlarge\n- - r5d.xlarge\n- - r5d.2xlarge\n- - r5d.4xlarge\n- - r5d.8xlarge\n- - r5d.12xlarge\n- - r5d.16xlarge\n- - r5d.24xlarge\n- - r5dn.xlarge\n- - r5dn.2xlarge\n- - r5dn.4xlarge\n- - r5dn.8xlarge\n- - r5dn.12xlarge\n- - r5dn.16xlarge\n- - r5dn.24xlarge\n- - r5n.xlarge\n- - r5n.2xlarge\n- - r5n.4xlarge\n- - r5n.8xlarge\n- - r5n.12xlarge\n- - r5n.16xlarge\n- - r5n.24xlarge\n- - r6a.xlarge\n- - r6a.2xlarge\n- - r6a.4xlarge\n- - r6a.8xlarge\n- - r6a.12xlarge\n- - r6a.16xlarge\n- - r6a.24xlarge\n- - r6a.32xlarge\n- - r6a.48xlarge\n- - r6i.xlarge\n- - r6i.2xlarge\n- - r6i.4xlarge\n- - r6i.8xlarge\n- - r6i.12xlarge\n- - r6i.16xlarge\n- - r6i.24xlarge\n- - r6i.32xlarge\n- - r6id.xlarge\n- - r6id.2xlarge\n- - r6id.4xlarge\n- - r6id.8xlarge\n- - r6id.12xlarge\n- - r6id.16xlarge\n- - r6id.24xlarge\n- - r6id.32xlarge\n- - r7i.xlarge\n- - r7i.2xlarge\n- - r7i.4xlarge\n- - r7i.8xlarge\n- - r7i.12xlarge\n- - r7i.16xlarge\n- - r7i.24xlarge\n- - r7i.48xlarge\n- - r7iz.xlarge\n- - r7iz.2xlarge\n- - r7iz.4xlarge\n- - r7iz.8xlarge\n- - r7iz.12xlarge\n- - r7iz.16xlarge\n- - r7iz.32xlarge\n- - r7a.xlarge\n- - r7a.2xlarge\n- - r7a.4xlarge\n- - r7a.8xlarge\n- - r7a.12xlarge\n- - r7a.16xlarge\n- - r7a.24xlarge\n- - r7a.32xlarge\n- - r7a.48xlarge\n- - r8a.xlarge\n- - r8a.2xlarge\n- - r8a.4xlarge\n- - r8a.8xlarge\n- - r8a.12xlarge\n- - r8a.16xlarge\n- - r8a.24xlarge\n- - r8a.48xlarge\n- - r8i.xlarge\n- - r8i.2xlarge\n- - r8i.4xlarge\n- - r8i.8xlarge\n- - r8i.12xlarge\n- - r8i.16xlarge\n- - r8i.24xlarge\n- - r8i.32xlarge\n- - r8i.48xlarge\n- - r8i.96xlarge\n- - r8i-flex.xlarge\n- - r8i-flex.2xlarge\n- - r8i-flex.4xlarge\n- - r8i-flex.8xlarge\n- - r8i-flex.12xlarge\n- - r8i-flex.16xlarge\n- - x1.16xlarge\n- - x1.32xlarge\n- - x1e.xlarge\n- - x1e.2xlarge\n- - x1e.4xlarge\n- - x1e.8xlarge\n- - x1e.16xlarge\n- - x1e.32xlarge\n- - x2idn.16xlarge\n- - x2idn.24xlarge\n- - x2idn.32xlarge\n- - x2iedn.xlarge\n- - x2iedn.2xlarge\n- - x2iedn.4xlarge\n- - x2iedn.8xlarge\n- - x2iedn.16xlarge\n- - x2iedn.24xlarge\n- - x2iedn.32xlarge\n- - x2iezn.2xlarge\n- - x2iezn.4xlarge\n- - x2iezn.6xlarge\n- - x2iezn.8xlarge\n- - x2iezn.12xlarge\n- - d2.xlarge\n- - d2.2xlarge\n- - d2.4xlarge\n- - d2.8xlarge\n- - d3.xlarge\n- - d3.2xlarge\n- - d3.4xlarge\n- - d3.8xlarge\n- - d3en.xlarge\n- - d3en.2xlarge\n- - d3en.4xlarge\n- - d3en.6xlarge\n- - d3en.8xlarge\n- - d3en.12xlarge\n- - dl1.24xlarge\n- - h1.2xlarge\n- - h1.4xlarge\n- - h1.8xlarge\n- - h1.16xlarge\n- - inf1.xlarge\n- - inf1.2xlarge\n- - inf1.6xlarge\n- - inf1.24xlarge\n- - trn1.2xlarge\n- - trn1.32xlarge\n- - u-3tb1.56xlarge\n- - u-6tb1.56xlarge\n- - u-6tb1.112xlarge\n- - u-9tb1.112xlarge\n- - u-12tb1.112xlarge\n- - u-18tb1.112xlarge\n- - vt1.3xlarge\n- - vt1.6xlarge\n- - vt1.24xlarge\n- - z1d.xlarge\n- - z1d.2xlarge\n- - z1d.3xlarge\n- - z1d.6xlarge\n- - z1d.12xlarge\n- - -------------- Bring-Your-Own-License Only --------------\n- - c3.large\n- - c4.large\n- - c5.metal\n- - c5.large\n- - c5a.large\n- - c5ad.large\n- - c5d.metal\n- - c5d.large\n- - c5n.large\n- - c5n.metal\n- - c6a.large\n- - c6a.metal\n- - c6i.large\n- - c6i.metal\n- - c6id.large\n- - c6id.metal\n- - c7i.large\n- - c7i.metal-24xl\n- - c7i.metal-48xl\n- - c7i-flex.large\n- - c7a.medium\n- - c7a.large\n- - c7a.metal-48xl\n- - c8i.large\n- - c8i.metal-48xl\n- - c8i.metal-96xl\n- - c8i-flex.large\n- - i3.large\n- - i3.metal\n- - i3en.large\n- - i3en.metal\n- - i4i.large\n- - i4i.metal\n- - i7ie.large\n- - i7ie.metal-24xl\n- - i7ie.metal-48xl\n- - m3.large\n- - m3.medium\n- - m4.large\n- - m5.metal\n- - m5.large\n- - m5a.large\n- - m5ad.large\n- - m5d.metal\n- - m5d.large\n- - m5zn.large\n- - m5zn.metal\n- - m5n.large\n- - m5n.metal\n- - m5dn.large\n- - m5dn.metal\n- - m6a.large\n- - m6a.metal\n- - m6i.large\n- - m6i.metal\n- - m6id.large\n- - m6id.metal\n- - m7i.large\n- - m7i.metal-24xl\n- - m7i.metal-48xl\n- - m7i-flex.large\n- - m7a.medium\n- - m7a.large\n- - m7a.metal-48xl\n- - m8a.medium\n- - m8a.large\n- - m8a.metal-24xl\n- - m8a.metal-48xl\n- - m8i.large\n- - m8i.metal-48xl\n- - m8i.metal-96xl\n- - m8i-flex.large\n- - r3.large\n- - r4.large\n- - r5.metal\n- - r5.large\n- - r5a.large\n- - r5d.metal\n- - r5ad.large\n- - r5d.large\n- - r5dn.large\n- - r5dn.metal\n- - r5b.large\n- - r5b.metal\n- - r5n.large\n- - r5n.metal\n- - r6a.large\n- - r6a.metal\n- - r6i.large\n- - r6i.metal\n- - r6id.large\n- - r6id.metal\n- - r7i.large\n- - r7i.metal-24xl\n- - r7i.metal-48xl\n- - r7iz.large\n- - r7iz.metal-16xl\n- - r7iz.metal-32xl\n- - r7a.medium\n- - r7a.large\n- - r7a.metal-48xl\n- - r8a.medium\n- - r8a.large\n- - r8a.metal-24xl\n- - r8a.metal-48xl\n- - r8i.large\n- - r8i.metal-48xl\n- - r8i.metal-96xl\n- - r8i-flex.large\n- - t2.2xlarge\n- - t2.large\n- - t2.medium\n- - t2.micro\n- - t2.nano\n- - t2.small\n- - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n@@ -717,18 +150,6 @@ Parameters:\n - t3.nano\n - t3.small\n - t3.xlarge\n- - t3a.2xlarge\n- - t3a.large\n- - t3a.medium\n- - t3a.micro\n- - t3a.nano\n- - t3a.small\n- - t3a.xlarge\n- - x2idn.metal\n- - x2iedn.metal\n- - x2iezn.metal\n- - z1d.metal\n- - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n@@ -739,7 +160,7 @@ Parameters:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n- Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n+ Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer.\n Type: Number\n AllowedValues:\n - 1\n@@ -780,6 +201,14 @@ Parameters:\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n+ ExternalAccessCidrIP:\n+ Description: A CIDR IP range to allow external access from\n+ Type: String\n+ Default: 54.76.254.148/32\n+ ECSSecurityGroup:\n+ Description: the security group the ECS cluster is in\n+ Type: 'AWS::EC2::SecurityGroup::Id'\n+\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n@@ -792,11 +221,11 @@ Parameters:\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n- Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n- Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n Conditions:\n@@ -809,7 +238,7 @@ Conditions:\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n- PAYG:\n+ EssentialEnterprise:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n@@ -821,53 +250,53 @@ Mappings:\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n- base: '12.0.1'\n+ base: '11.0.2'\n LicenseRegion2AMI:\n us-east-1:\n- PAYGAl2023: ami-0198b8931e9597271\n- BYOLAl2023: ami-0a8536507241f95b0\n+ Enterprise: ami-0bf7e657fab67e971\n+ BYOL: ami-07d160aaa381d98d3\n us-east-2:\n- PAYGAl2023: ami-0877b64dae8264415\n- BYOLAl2023: ami-082cc98b2c01e486a\n+ Enterprise: ami-0b364b6c340494cde\n+ BYOL: ami-02fc4c59b1e0f84fc\n us-west-1:\n- PAYGAl2023: ami-07890fc78f4ddfa20\n- BYOLAl2023: ami-05c9a962410c2821b\n+ Enterprise: ami-0427f5f4c4ec4fb1a\n+ BYOL: ami-0db1c9ca54f60c93a\n us-west-2:\n- PAYGAl2023: ami-0577eb149c9e0f53f\n- BYOLAl2023: ami-0262dd8d014bf71ba\n+ Enterprise: ami-0f4226d039f3538a4\n+ BYOL: ami-036d6f6629eeae6ae\n eu-central-1:\n- PAYGAl2023: ami-06348556399c8ab69\n- BYOLAl2023: ami-00cb5a3527e7c0d11\n+ Enterprise: ami-0adde7fcee8e0abac\n+ BYOL: ami-0175f20a0ff9b2b41\n eu-west-1:\n- PAYGAl2023: ami-0fa7bc44cd9ab1f85\n- BYOLAl2023: ami-0bc2b4d46367806b0\n+ Enterprise: ami-0adad0df164f5d3d2\n+ BYOL: ami-0162fd6fe0c778804\n ap-south-1:\n- PAYGAl2023: ami-0f481ba0a6819ced6\n- BYOLAl2023: ami-00b59374107e5efb6\n+ Enterprise: ami-05cb78bc62095559e\n+ BYOL: ami-0b6472e5b25075c3a\n ap-southeast-1:\n- PAYGAl2023: ami-0c373c6c8a2316c80\n- BYOLAl2023: ami-0b9bd265ef165a07b\n+ Enterprise: ami-0ace4c492256d582b\n+ BYOL: ami-0337694124652af4a\n ap-southeast-2:\n- PAYGAl2023: ami-0c65a907408226a3e\n- BYOLAl2023: ami-02bad1ef2c6d4a91a\n+ Enterprise: ami-09b42852706d80f61\n+ BYOL: ami-03d830bd349cddcbc\n ap-northeast-1:\n- PAYGAl2023: ami-0254bc4adaf13e3b9\n- BYOLAl2023: ami-07e8b312b1016bf67\n+ Enterprise: ami-0860fd2cf7c494dfc\n+ BYOL: ami-0f810574accbd33b2\n ap-northeast-2:\n- PAYGAl2023: ami-05995b5f5807873d7\n- BYOLAl2023: ami-0afd77ba0d7a0c129\n+ Enterprise: ami-09e07ba03b2662e4b\n+ BYOL: ami-04f97692a8557b493\n sa-east-1:\n- PAYGAl2023: ami-05ec8fee12de236a5\n- BYOLAl2023: ami-09d883ea308449555\n+ Enterprise: ami-0b94055f72e2d3a30\n+ BYOL: ami-00aadd4fc8a06eeff\n eu-west-2:\n- PAYGAl2023: ami-0f5cff9d243f31521\n- BYOLAl2023: ami-0588d104a52fbc326\n+ Enterprise: ami-01da8900f033938cb\n+ BYOL: ami-016eaaa73edae05a9\n ca-central-1:\n- PAYGAl2023: ami-0f34d118b23b51bf5\n- BYOLAl2023: ami-0c78eccd03e957005\n+ Enterprise: ami-0229c2f9c0da8bfb4\n+ BYOL: ami-083a7db6e6afd6067\n eu-west-3:\n- PAYGAl2023: ami-01fa9155eb17992c5\n- BYOLAl2023: ami-0637199acc5327534\n+ Enterprise: ami-0ac4d1b01ef025708\n+ BYOL: ami-0b44d169075494c13\n Resources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n@@ -979,9 +408,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1030,12 +457,12 @@ Resources:\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1074,6 +501,8 @@ Resources:\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n@@ -1094,12 +523,12 @@ Resources:\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp2\n- Version: !GetAtt LaunchTemp2.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig2\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1138,6 +567,8 @@ Resources:\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n@@ -1158,12 +589,12 @@ Resources:\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp3\n- Version: !GetAtt LaunchTemp3.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig3\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1202,6 +633,8 @@ Resources:\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n@@ -1212,25 +645,37 @@ Resources:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n- FromPort: '22'\n- ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7999'\n+ ToPort: '7999'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n@@ -1250,303 +695,303 @@ Resources:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ - IpProtocol: tcp\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ InternalElbSecurityGroup:\n+ Type: 'AWS::EC2::SecurityGroup'\n+ Properties:\n+ GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n+ VpcId: !Ref VPC\n+ SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n- LaunchTemp1:\n- Type: 'AWS::EC2::LaunchTemplate'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n+ LaunchConfig1:\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume1\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeA#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume1\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeA#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=1\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=1\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n- LaunchTemp2:\n+ LaunchConfig2:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume2\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeB#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume2\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeB#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n- LaunchTemp3:\n+ LaunchConfig3:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume3\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeC#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume3\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeC#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n@@ -1757,6 +1202,27 @@ Resources:\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n+ MarklogicExternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n@@ -1875,6 +1341,72 @@ Resources:\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n+ MarklogicExternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - Alb\n+ - MarklogicExternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicExternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref Alb\n+ Port: 8011\n+ Protocol: HTTP\n+ #Application Load Balancer description for MultiZone deployments (3 zones).\n+ InternalAlb:\n+ Condition: MultiZone\n+ Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n+ DependsOn:\n+ - InternalElbSecurityGroup\n+ Properties: \n+ Scheme: internal\n+ SecurityGroups: \n+ - !Ref InternalElbSecurityGroup\n+ Subnets:\n+ - !Ref PrivateSubnet1\n+ - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n+ - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n+ Metadata:\n+ 'AWS::CloudFormation::Designer':\n+ id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n+ #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n+ #Health checks are performed on each TargetGroup.\n+ MarklogicInternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n+ MarklogicInternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - InternalAlb\n+ - MarklogicInternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicInternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref InternalAlb\n+ Port: 8011\n+ Protocol: HTTP\n Outputs:\n URL:\n Description: The URL of the MarkLogic Cluster\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35282"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:46:11.959Z",
|
||
"resultDisplay": "diff --git a/README.md b/README.md\nindex efd6c3e..8a4d8db 100644\n--- a/README.md\n+++ b/README.md\n@@ -10,8 +10,8 @@ For deploying MarkLogic on Azure, please visit [cloud-enablement-azure](https://\n \n | Template Type | Launch in US West 2 (Oregon) |\n | -- | -- |\n-| MarkLogic in New VPC | [](https://console.aws.amazon.com/cloudformation/home#/stacks/new?region=us-west-2&stackName=mlClusterStack&templateURL=https://marklogic-db-template-releases.s3-us-west-2.amazonaws.com/12.0-latest/mlcluster-vpc.template) |\n-| MarkLogic in Existing VPC | [](https://console.aws.amazon.com/cloudformation/home#/stacks/new?region=us-west-2&stackName=mlClusterStack&templateURL=https://marklogic-db-template-releases.s3-us-west-2.amazonaws.com/12.0-latest/mlcluster.template) |\n+| MarkLogic in New VPC | [](https://console.aws.amazon.com/cloudformation/home#/stacks/new?region=us-west-2&stackName=mlClusterStack&templateURL=https://marklogic-db-template-releases.s3-us-west-2.amazonaws.com/11.0-latest/mlcluster-vpc.template) |\n+| MarkLogic in Existing VPC | [](https://console.aws.amazon.com/cloudformation/home#/stacks/new?region=us-west-2&stackName=mlClusterStack&templateURL=https://marklogic-db-template-releases.s3-us-west-2.amazonaws.com/11.0-latest/mlcluster.template) |\n \n - To deploy from MarkLogic Website, go to [MarkLogic and Amazon Web Service](https://developer.marklogic.com/products/cloud/aws).\n - To deploy from this GitHub repository, click on `Launch Stack` button above.\n@@ -24,7 +24,7 @@ The CloudFormation templates provide options to launch clusters with different s\n | Option | Allowed Values |\n | -- | -- |\n | VPC | New or Existing |\n-| License | PAYG, BYOL |\n+| License | Developer, BYOL, Essential Enterprise |\n | Availablity Zone | 1 or 3 |\n | Nodes per Zone | 1 to many |\n \n@@ -40,40 +40,14 @@ This directory contains master templates, sub-templates and other resources that\n - [MarkLogic on AWS](https://developer.marklogic.com/products/cloud/aws) \n \n ## Additional Notes\n-### AmazonLinux2023 support in the MarkLogic CloudFormation Templates:\n-\n-Starting with MarkLogic 11.3.1 (combined), the MarkLogic CloudFormation Template supports both Amazon Linux 2023 and Amazon Linux 2. Select the \"AmazonLinux2023\" value from \"OSType\" parameter to create MarkLogic cluster using the AL2023 AMI. The default value for the \"OSType\" parameter is \"AmazonLinux2023\".\n-\n-MarkLogic on AL2023 does not support GPU devices. Any use of the embedded ONNX libraries will be executed using the host’s CPU. Support for GPUs on AL2023 is being investigated for a future release of MarkLogic Server.\n-\n ### AWS Classic Load Balancer Removed from Single Zone Deployments:\n \n Since AWS is retiring the Classic Load Balancer (CLB) as of August 15, 2022, the CLB has been removed for single-zone deployments in the MarkLogic CloudFormation templates. The URL in the outputs of the CloudFormation stack is now replaced with a private DNS name, which can be used to access the MarkLogic cluster.\n \n ### Python Upgrade for Lambda Functions in the MarkLogic CloudFormation Templates:\n \n-The lambda functions in MarkLogic CloudFormation templates used on AWS are now configured to use Python 3.13. AWS has scheduled the end of support for Python 3.9 by December 2025.\n-\n-### Launch Templates and IMDSv2 support in the MarkLogic CloudFormation Templates:\n-\n-Starting with MarkLogic 11.1.0, the MarkLogic CloudFormation Templates replaces the use of Launch Configurations with Launch Templates. This ensures that MarkLogic CFT users can make use of all of the Amazon EC2 Auto Scaling features now available in Launch Templates.\n-\n-Additionally, MarkLogic 11.1.0 adds support for IMDSv2. The IMDSv2 option is set to \"required\" by default in the 11.1.0 and later CFTs. In order to use MarkLogic Server AMIs before 11.1.0 with the new templates, the templates need to be modified to set IMDSv2 to \"optional\" as IMDSv2 is not supported in earlier versions of the MarkLogic AMI.\n-\n-### Build MLCMD RPM for Custom AMIs\n-\n-Starting with MarkLogic 12.0.0, MLCMD is part of MarkLogic CloudFormation Templates repository. MLCMD is only supported when packaged and used in the MarkLogic AMIs published by Progress on the AWS Marketplace. If using MLCMD in a custom AMI, Progress Software provides no warranties or support for the custom AMI or the MLCMD packaged and used in the custom AMI. The steps outlined below are provided for information only. We make no representations that the custom AMI will work. In order to build MLCMD rpm for custom AMIs follow the below steps:\n-\n-Checkout the cloud-enablement-aws repo and run the below make command and RPM will be located under (`build/rpmbuild/RPMS/noarch`):\n-```\n-$ make package\n-```\n-\n-To clean the build run the below command:\n-```\n-$ make clean\n-```\n+The lambda functions in MarkLogic CloudFormation templates used on AWS are now configured to use Python 3.9. AWS has scheduled the end of support for Python 3.6 by July 2022.\n \n ## Support\n \n-The cloud-enablement-aws repository is maintained by MarkLogic Engineering and distributed under the [Apache 2.0 license](https://github.com/marklogic/cloud-enablement-aws/blob/master/LICENSE.TXT). Everyone is encouraged to file bug reports, feature requests, and pull requests through [GitHub](https://github.com/marklogic/cloud-enablement-aws/issues/new). Your input is important and will be carefully considered. However, we can’t promise a specific resolution or timeframe for any request. In addition, MarkLogic provides technical support for [releases](https://github.com/marklogic/cloud-enablement-aws/releases) of cloud-enablement-aws to licensed customers under the terms outlined in the [Support Handbook](http://www.marklogic.com/files/Mark_Logic_Support_Handbook.pdf). For more information or to sign up for support, visit [help.marklogic.com](http://help.marklogic.com).\n+The cloud-enablement-azre repository is maintained by MarkLogic Engineering and distributed under the [Apache 2.0 license](https://github.com/marklogic/cloud-enablement-aws/blob/master/LICENSE.TXT). Everyone is encouraged to file bug reports, feature requests, and pull requests through [GitHub](https://github.com/marklogic/cloud-enablement-aws/issues/new). Your input is important and will be carefully considered. However, we can’t promise a specific resolution or timeframe for any request. In addition, MarkLogic provides technical support for [releases](https://github.com/marklogic/cloud-enablement-aws/releases) of cloud-enablement-aws to licensed customers under the terms outlined in the [Support Handbook](http://www.marklogic.com/files/Mark_Logic_Support_Handbook.pdf). For more information or to sign up for support, visit [help.marklogic.com](http://help.marklogic.com).\ndiff --git a/mlcluster-vpc.template b/mlcluster-vpc.template\nindex cc6ba5d..4b25578 100644\n--- a/mlcluster-vpc.template\n+++ b/mlcluster-vpc.template\n@@ -1,8 +1,8 @@\n AWSTemplateFormatVersion: 2010-09-09\n Description: Deploy a MarkLogic Cluster on AWS with a new VPC\n Metadata:\n- version: 12.0.1\n- binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n+ version: 11.0.2\n+ binary: MarkLogic-11.0.2-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n@@ -137,7 +137,7 @@ Parameters:\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n- - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n+ - ---- Essential Enterprise and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n@@ -204,45 +204,7 @@ Parameters:\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n- - c7i.xlarge\n- - c7i.2xlarge\n- - c7i.4xlarge\n- - c7i.8xlarge\n- - c7i.12xlarge\n- - c7i.16xlarge\n- - c7i.24xlarge\n- - c7i.48xlarge\n- - c7i-flex.xlarge\n- - c7i-flex.2xlarge\n- - c7i-flex.4xlarge\n- - c7i-flex.8xlarge\n- - c7i-flex.12xlarge\n- - c7i-flex.16xlarge\n- - c7a.xlarge\n- - c7a.2xlarge\n- - c7a.4xlarge\n- - c7a.8xlarge\n- - c7a.12xlarge\n- - c7a.16xlarge\n- - c7a.24xlarge\n- - c7a.32xlarge\n- - c7a.48xlarge\n- - c8i.xlarge\n- - c8i.2xlarge\n- - c8i.4xlarge\n- - c8i.8xlarge\n- - c8i.12xlarge\n- - c8i.16xlarge\n- - c8i.24xlarge\n- - c8i.32xlarge\n- - c8i.48xlarge\n- - c8i.96xlarge\n- - c8i-flex.xlarge\n- - c8i-flex.2xlarge\n- - c8i-flex.4xlarge\n- - c8i-flex.8xlarge\n- - c8i-flex.12xlarge\n- - c8i-flex.16xlarge\n+ - cc2.8xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n@@ -262,18 +224,8 @@ Parameters:\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n- - i4i.12xlarge\n - i4i.16xlarge\n- - i4i.24xlarge\n - i4i.32xlarge\n- - i7ie.xlarge\n- - i7ie.2xlarge\n- - i7ie.3xlarge\n- - i7ie.6xlarge\n- - i7ie.12xlarge\n- - i7ie.18xlarge\n- - i7ie.24xlarge\n- - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n@@ -353,53 +305,14 @@ Parameters:\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n- - m7i.xlarge\n- - m7i.2xlarge\n- - m7i.4xlarge\n- - m7i.8xlarge\n- - m7i.12xlarge\n- - m7i.16xlarge\n- - m7i.24xlarge\n- - m7i.48xlarge\n- - m7i-flex.xlarge\n- - m7i-flex.2xlarge\n- - m7i-flex.4xlarge\n- - m7i-flex.8xlarge\n- - m7i-flex.12xlarge\n- - m7i-flex.16xlarge\n- - m7a.xlarge\n- - m7a.2xlarge\n- - m7a.4xlarge\n- - m7a.8xlarge\n- - m7a.12xlarge\n- - m7a.16xlarge\n- - m7a.24xlarge\n- - m7a.32xlarge\n- - m7a.48xlarge\n- - m8a.xlarge\n- - m8a.2xlarge\n- - m8a.4xlarge\n- - m8a.8xlarge\n- - m8a.12xlarge\n- - m8a.16xlarge\n- - m8a.24xlarge\n- - m8a.48xlarge\n- - m8i.xlarge\n- - m8i.2xlarge\n- - m8i.4xlarge\n- - m8i.8xlarge\n- - m8i.12xlarge\n- - m8i.16xlarge\n- - m8i.24xlarge\n- - m8i.32xlarge\n- - m8i.48xlarge\n- - m8i.96xlarge\n- - m8i-flex.xlarge\n- - m8i-flex.2xlarge\n- - m8i-flex.4xlarge\n- - m8i-flex.8xlarge\n- - m8i-flex.12xlarge\n- - m8i-flex.16xlarge\n+ - p2.xlarge\n+ - p2.8xlarge\n+ - p2.16xlarge\n+ - p3.2xlarge\n+ - p3.8xlarge\n+ - p3.16xlarge\n+ - p3dn.24xlarge\n+ - p4d.24xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n@@ -483,54 +396,6 @@ Parameters:\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n- - r7i.xlarge\n- - r7i.2xlarge\n- - r7i.4xlarge\n- - r7i.8xlarge\n- - r7i.12xlarge\n- - r7i.16xlarge\n- - r7i.24xlarge\n- - r7i.48xlarge\n- - r7iz.xlarge\n- - r7iz.2xlarge\n- - r7iz.4xlarge\n- - r7iz.8xlarge\n- - r7iz.12xlarge\n- - r7iz.16xlarge\n- - r7iz.32xlarge\n- - r7a.xlarge\n- - r7a.2xlarge\n- - r7a.4xlarge\n- - r7a.8xlarge\n- - r7a.12xlarge\n- - r7a.16xlarge\n- - r7a.24xlarge\n- - r7a.32xlarge\n- - r7a.48xlarge\n- - r8a.xlarge\n- - r8a.2xlarge\n- - r8a.4xlarge\n- - r8a.8xlarge\n- - r8a.12xlarge\n- - r8a.16xlarge\n- - r8a.24xlarge\n- - r8a.48xlarge\n- - r8i.xlarge\n- - r8i.2xlarge\n- - r8i.4xlarge\n- - r8i.8xlarge\n- - r8i.12xlarge\n- - r8i.16xlarge\n- - r8i.24xlarge\n- - r8i.32xlarge\n- - r8i.48xlarge\n- - r8i.96xlarge\n- - r8i-flex.xlarge\n- - r8i-flex.2xlarge\n- - r8i-flex.4xlarge\n- - r8i-flex.8xlarge\n- - r8i-flex.12xlarge\n- - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n@@ -569,6 +434,34 @@ Parameters:\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n+ - f1.2xlarge\n+ - f1.4xlarge\n+ - f1.16xlarge\n+ - g2.2xlarge\n+ - g2.8xlarge\n+ - g3.4xlarge\n+ - g3.8xlarge\n+ - g3.16xlarge\n+ - g3s.xlarge\n+ - g4ad.xlarge\n+ - g4ad.2xlarge\n+ - g4ad.4xlarge\n+ - g4ad.8xlarge\n+ - g4ad.16xlarge\n+ - g4dn.xlarge\n+ - g4dn.2xlarge\n+ - g4dn.4xlarge\n+ - g4dn.8xlarge\n+ - g4dn.12xlarge\n+ - g4dn.16xlarge\n+ - g5.xlarge\n+ - g5.2xlarge\n+ - g5.4xlarge\n+ - g5.8xlarge\n+ - g5.12xlarge\n+ - g5.16xlarge\n+ - g5.24xlarge\n+ - g5.48xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n@@ -610,26 +503,12 @@ Parameters:\n - c6i.metal\n - c6id.large\n - c6id.metal\n- - c7i.large\n- - c7i.metal-24xl\n- - c7i.metal-48xl\n- - c7i-flex.large\n- - c7a.medium\n- - c7a.large\n- - c7a.metal-48xl\n- - c8i.large\n- - c8i.metal-48xl\n- - c8i.metal-96xl\n- - c8i-flex.large\n+ - g4dn.metal\n - i3.large\n- - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n- - i7ie.large\n- - i7ie.metal-24xl\n- - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n@@ -651,21 +530,6 @@ Parameters:\n - m6i.metal\n - m6id.large\n - m6id.metal\n- - m7i.large\n- - m7i.metal-24xl\n- - m7i.metal-48xl\n- - m7i-flex.large\n- - m7a.medium\n- - m7a.large\n- - m7a.metal-48xl\n- - m8a.medium\n- - m8a.large\n- - m8a.metal-24xl\n- - m8a.metal-48xl\n- - m8i.large\n- - m8i.metal-48xl\n- - m8i.metal-96xl\n- - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n@@ -686,23 +550,6 @@ Parameters:\n - r6i.metal\n - r6id.large\n - r6id.metal\n- - r7i.large\n- - r7i.metal-24xl\n- - r7i.metal-48xl\n- - r7iz.large\n- - r7iz.metal-16xl\n- - r7iz.metal-32xl\n- - r7a.medium\n- - r7a.large\n- - r7a.metal-48xl\n- - r8a.medium\n- - r8a.large\n- - r8a.metal-24xl\n- - r8a.metal-48xl\n- - r8i.large\n- - r8i.metal-48xl\n- - r8i.metal-96xl\n- - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n@@ -739,7 +586,7 @@ Parameters:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance.\n Type: String\n NumberOfZones:\n- Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n+ Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer. \n Type: Number\n AllowedValues:\n - 1\n@@ -820,11 +667,11 @@ Parameters:\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n- Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n- Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n Conditions:\n@@ -836,7 +683,7 @@ Conditions:\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone: !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n- PAYG: !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n+ EssentialEnterprise: !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\n@@ -847,53 +694,53 @@ Mappings:\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n- base: '12.0.1'\n+ base: '11.0.2'\n LicenseRegion2AMI:\n us-east-1:\n- PAYGAl2023: ami-0198b8931e9597271\n- BYOLAl2023: ami-0a8536507241f95b0\n+ Enterprise: ami-0bf7e657fab67e971\n+ BYOL: ami-07d160aaa381d98d3\n us-east-2:\n- PAYGAl2023: ami-0877b64dae8264415\n- BYOLAl2023: ami-082cc98b2c01e486a\n+ Enterprise: ami-0b364b6c340494cde\n+ BYOL: ami-02fc4c59b1e0f84fc\n us-west-1:\n- PAYGAl2023: ami-07890fc78f4ddfa20\n- BYOLAl2023: ami-05c9a962410c2821b\n+ Enterprise: ami-0427f5f4c4ec4fb1a\n+ BYOL: ami-0db1c9ca54f60c93a\n us-west-2:\n- PAYGAl2023: ami-0577eb149c9e0f53f\n- BYOLAl2023: ami-0262dd8d014bf71ba\n+ Enterprise: ami-0f4226d039f3538a4\n+ BYOL: ami-036d6f6629eeae6ae\n eu-central-1:\n- PAYGAl2023: ami-06348556399c8ab69\n- BYOLAl2023: ami-00cb5a3527e7c0d11\n+ Enterprise: ami-0adde7fcee8e0abac\n+ BYOL: ami-0175f20a0ff9b2b41\n eu-west-1:\n- PAYGAl2023: ami-0fa7bc44cd9ab1f85\n- BYOLAl2023: ami-0bc2b4d46367806b0\n+ Enterprise: ami-0adad0df164f5d3d2\n+ BYOL: ami-0162fd6fe0c778804\n ap-south-1:\n- PAYGAl2023: ami-0f481ba0a6819ced6\n- BYOLAl2023: ami-00b59374107e5efb6\n+ Enterprise: ami-05cb78bc62095559e\n+ BYOL: ami-0b6472e5b25075c3a\n ap-southeast-1:\n- PAYGAl2023: ami-0c373c6c8a2316c80\n- BYOLAl2023: ami-0b9bd265ef165a07b\n+ Enterprise: ami-0ace4c492256d582b\n+ BYOL: ami-0337694124652af4a\n ap-southeast-2:\n- PAYGAl2023: ami-0c65a907408226a3e\n- BYOLAl2023: ami-02bad1ef2c6d4a91a\n+ Enterprise: ami-09b42852706d80f61\n+ BYOL: ami-03d830bd349cddcbc\n ap-northeast-1:\n- PAYGAl2023: ami-0254bc4adaf13e3b9\n- BYOLAl2023: ami-07e8b312b1016bf67\n+ Enterprise: ami-0860fd2cf7c494dfc\n+ BYOL: ami-0f810574accbd33b2\n ap-northeast-2:\n- PAYGAl2023: ami-05995b5f5807873d7\n- BYOLAl2023: ami-0afd77ba0d7a0c129\n+ Enterprise: ami-09e07ba03b2662e4b\n+ BYOL: ami-04f97692a8557b493\n sa-east-1:\n- PAYGAl2023: ami-05ec8fee12de236a5\n- BYOLAl2023: ami-09d883ea308449555\n+ Enterprise: ami-0b94055f72e2d3a30\n+ BYOL: ami-00aadd4fc8a06eeff\n eu-west-2:\n- PAYGAl2023: ami-0f5cff9d243f31521\n- BYOLAl2023: ami-0588d104a52fbc326\n+ Enterprise: ami-01da8900f033938cb\n+ BYOL: ami-016eaaa73edae05a9\n ca-central-1:\n- PAYGAl2023: ami-0f34d118b23b51bf5\n- BYOLAl2023: ami-0c78eccd03e957005\n+ Enterprise: ami-0229c2f9c0da8bfb4\n+ BYOL: ami-083a7db6e6afd6067\n eu-west-3:\n- PAYGAl2023: ami-01fa9155eb17992c5\n- BYOLAl2023: ami-0637199acc5327534\n+ Enterprise: ami-0ac4d1b01ef025708\n+ BYOL: ami-0b44d169075494c13\n Resources:\n VpcStack:\n Type: AWS::CloudFormation::Stack\n@@ -1034,9 +881,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet1Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1089,9 +934,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet1Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1154,9 +997,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet2Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp2\n- Version: !GetAtt LaunchTemp2.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig2\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1219,9 +1060,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet3Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp3\n- Version: !GetAtt LaunchTemp3.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig3\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1324,290 +1163,272 @@ Resources:\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n- LaunchTemp1:\n- Type: 'AWS::EC2::LaunchTemplate'\n+ LaunchConfig1:\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume1\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeA#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume1\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeA#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=1\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=1\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n- LaunchTemp2:\n+ LaunchConfig2:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume2\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeB#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume2\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeB#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n- LaunchTemp3:\n+ LaunchConfig3:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume3\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeC#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume3\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeC#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\ndiff --git a/mlcluster.template b/mlcluster.template\nindex 198ad14..3ea5f5c 100644\n--- a/mlcluster.template\n+++ b/mlcluster.template\n@@ -1,8 +1,8 @@\n AWSTemplateFormatVersion: 2010-09-09\n Description: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\n Metadata:\n- version: 12.0.1\n- binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n+ version: 11.0.2\n+ binary: MarkLogic-11.0.2-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n@@ -32,6 +32,8 @@ Metadata:\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n+ - ExternalAccessCidrIP\n+ - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n@@ -90,6 +92,10 @@ Metadata:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n+ ExternalAccessCidrIP:\n+ default: External IP address range for access to admin site\n+ ECSSecurityGroup:\n+ default: the security group the ecs cluster is in\n Parameters:\n # resource configuration\n IAMRole:\n@@ -100,7 +106,7 @@ Parameters:\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n- Default: '10'\n+ Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n@@ -108,7 +114,7 @@ Parameters:\n - standard\n - gp2\n - gp3\n- Default: gp2\n+ Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n@@ -135,581 +141,8 @@ Parameters:\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n- Default: r5.4xlarge\n+ Default: t3.small\n AllowedValues:\n- - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n- - c3.xlarge\n- - c3.2xlarge\n- - c3.4xlarge\n- - c3.8xlarge\n- - c4.xlarge\n- - c4.2xlarge\n- - c4.4xlarge\n- - c4.8xlarge\n- - c5.xlarge\n- - c5.2xlarge\n- - c5.4xlarge\n- - c5.9xlarge\n- - c5.12xlarge\n- - c5.18xlarge\n- - c5.24xlarge\n- - c5a.xlarge\n- - c5a.2xlarge\n- - c5a.4xlarge\n- - c5a.8xlarge\n- - c5a.12xlarge\n- - c5a.16xlarge\n- - c5a.24xlarge\n- - c5ad.xlarge\n- - c5ad.2xlarge\n- - c5ad.4xlarge\n- - c5ad.8xlarge\n- - c5ad.12xlarge\n- - c5ad.16xlarge\n- - c5ad.24xlarge\n- - c5d.xlarge\n- - c5d.2xlarge\n- - c5d.4xlarge\n- - c5d.9xlarge\n- - c5d.12xlarge\n- - c5d.18xlarge\n- - c5d.24xlarge\n- - c5n.xlarge\n- - c5n.2xlarge\n- - c5n.4xlarge\n- - c5n.9xlarge\n- - c5n.18xlarge\n- - c6a.xlarge\n- - c6a.2xlarge\n- - c6a.4xlarge\n- - c6a.8xlarge\n- - c6a.12xlarge\n- - c6a.16xlarge\n- - c6a.24xlarge\n- - c6a.32xlarge\n- - c6a.48xlarge\n- - c6i.xlarge\n- - c6i.2xlarge\n- - c6i.4xlarge\n- - c6i.8xlarge\n- - c6i.12xlarge\n- - c6i.16xlarge\n- - c6i.24xlarge\n- - c6i.32xlarge\n- - c6id.xlarge\n- - c6id.2xlarge\n- - c6id.4xlarge\n- - c6id.8xlarge\n- - c6id.12xlarge\n- - c6id.16xlarge\n- - c6id.24xlarge\n- - c6id.32xlarge\n- - c7i.xlarge\n- - c7i.2xlarge\n- - c7i.4xlarge\n- - c7i.8xlarge\n- - c7i.12xlarge\n- - c7i.16xlarge\n- - c7i.24xlarge\n- - c7i.48xlarge\n- - c7i-flex.xlarge\n- - c7i-flex.2xlarge\n- - c7i-flex.4xlarge\n- - c7i-flex.8xlarge\n- - c7i-flex.12xlarge\n- - c7i-flex.16xlarge\n- - c7a.xlarge\n- - c7a.2xlarge\n- - c7a.4xlarge\n- - c7a.8xlarge\n- - c7a.12xlarge\n- - c7a.16xlarge\n- - c7a.24xlarge\n- - c7a.32xlarge\n- - c7a.48xlarge\n- - c8i.xlarge\n- - c8i.2xlarge\n- - c8i.4xlarge\n- - c8i.8xlarge\n- - c8i.12xlarge\n- - c8i.16xlarge\n- - c8i.24xlarge\n- - c8i.32xlarge\n- - c8i.48xlarge\n- - c8i.96xlarge\n- - c8i-flex.xlarge\n- - c8i-flex.2xlarge\n- - c8i-flex.4xlarge\n- - c8i-flex.8xlarge\n- - c8i-flex.12xlarge\n- - c8i-flex.16xlarge\n- - i2.2xlarge\n- - i2.4xlarge\n- - i2.8xlarge\n- - i2.xlarge\n- - i3.xlarge\n- - i3.2xlarge\n- - i3.4xlarge\n- - i3.8xlarge\n- - i3.16xlarge\n- - i3en.xlarge\n- - i3en.2xlarge\n- - i3en.3xlarge\n- - i3en.6xlarge\n- - i3en.12xlarge\n- - i3en.24xlarge\n- - i4i.xlarge\n- - i4i.2xlarge\n- - i4i.4xlarge\n- - i4i.8xlarge\n- - i4i.12xlarge\n- - i4i.16xlarge\n- - i4i.24xlarge\n- - i4i.32xlarge\n- - i7ie.xlarge\n- - i7ie.2xlarge\n- - i7ie.3xlarge\n- - i7ie.6xlarge\n- - i7ie.12xlarge\n- - i7ie.18xlarge\n- - i7ie.24xlarge\n- - i7ie.48xlarge\n- - m3.xlarge\n- - m3.2xlarge\n- - m4.xlarge\n- - m4.2xlarge\n- - m4.4xlarge\n- - m4.10xlarge\n- - m4.16xlarge\n- - m5.xlarge\n- - m5.2xlarge\n- - m5.4xlarge\n- - m5.8xlarge\n- - m5.12xlarge\n- - m5.16xlarge\n- - m5.24xlarge\n- - m5a.xlarge\n- - m5a.2xlarge\n- - m5a.4xlarge\n- - m5a.8xlarge\n- - m5a.12xlarge\n- - m5a.16xlarge\n- - m5a.24xlarge\n- - m5d.xlarge\n- - m5d.2xlarge\n- - m5d.4xlarge\n- - m5d.8xlarge\n- - m5d.16xlarge\n- - m5d.12xlarge\n- - m5d.24xlarge\n- - m5ad.xlarge\n- - m5ad.2xlarge\n- - m5ad.4xlarge\n- - m5ad.8xlarge\n- - m5ad.12xlarge\n- - m5ad.16xlarge\n- - m5ad.24xlarge\n- - m5zn.xlarge\n- - m5zn.2xlarge\n- - m5zn.3xlarge\n- - m5zn.6xlarge\n- - m5zn.12xlarge\n- - m5n.xlarge\n- - m5n.2xlarge\n- - m5n.4xlarge\n- - m5n.8xlarge\n- - m5n.12xlarge\n- - m5n.16xlarge\n- - m5n.24xlarge\n- - m5dn.xlarge\n- - m5dn.2xlarge\n- - m5dn.4xlarge\n- - m5dn.8xlarge\n- - m5dn.12xlarge\n- - m5dn.16xlarge\n- - m5dn.24xlarge\n- - m6a.xlarge\n- - m6a.2xlarge\n- - m6a.4xlarge\n- - m6a.8xlarge\n- - m6a.12xlarge\n- - m6a.16xlarge\n- - m6a.24xlarge\n- - m6a.32xlarge\n- - m6a.48xlarge\n- - m6i.xlarge\n- - m6i.2xlarge\n- - m6i.4xlarge\n- - m6i.8xlarge\n- - m6i.12xlarge\n- - m6i.16xlarge\n- - m6i.24xlarge\n- - m6i.32xlarge\n- - m6id.xlarge\n- - m6id.2xlarge\n- - m6id.4xlarge\n- - m6id.8xlarge\n- - m6id.12xlarge\n- - m6id.16xlarge\n- - m6id.24xlarge\n- - m6id.32xlarge\n- - m7i.xlarge\n- - m7i.2xlarge\n- - m7i.4xlarge\n- - m7i.8xlarge\n- - m7i.12xlarge\n- - m7i.16xlarge\n- - m7i.24xlarge\n- - m7i.48xlarge\n- - m7i-flex.xlarge\n- - m7i-flex.2xlarge\n- - m7i-flex.4xlarge\n- - m7i-flex.8xlarge\n- - m7i-flex.12xlarge\n- - m7i-flex.16xlarge\n- - m7a.xlarge\n- - m7a.2xlarge\n- - m7a.4xlarge\n- - m7a.8xlarge\n- - m7a.12xlarge\n- - m7a.16xlarge\n- - m7a.24xlarge\n- - m7a.32xlarge\n- - m7a.48xlarge\n- - m8a.xlarge\n- - m8a.2xlarge\n- - m8a.4xlarge\n- - m8a.8xlarge\n- - m8a.12xlarge\n- - m8a.16xlarge\n- - m8a.24xlarge\n- - m8a.48xlarge\n- - m8i.xlarge\n- - m8i.2xlarge\n- - m8i.4xlarge\n- - m8i.8xlarge\n- - m8i.12xlarge\n- - m8i.16xlarge\n- - m8i.24xlarge\n- - m8i.32xlarge\n- - m8i.48xlarge\n- - m8i.96xlarge\n- - m8i-flex.xlarge\n- - m8i-flex.2xlarge\n- - m8i-flex.4xlarge\n- - m8i-flex.8xlarge\n- - m8i-flex.12xlarge\n- - m8i-flex.16xlarge\n- - r3.xlarge\n- - r3.2xlarge\n- - r3.4xlarge\n- - r3.8xlarge\n- - r4.xlarge\n- - r4.2xlarge\n- - r4.4xlarge\n- - r4.8xlarge\n- - r4.16xlarge\n- - r5.xlarge\n- - r5.2xlarge\n- - r5.4xlarge\n- - r5.8xlarge\n- - r5.12xlarge\n- - r5.16xlarge\n- - r5.24xlarge\n- - r5a.xlarge\n- - r5a.2xlarge\n- - r5a.4xlarge\n- - r5a.8xlarge\n- - r5a.12xlarge\n- - r5a.16xlarge\n- - r5a.24xlarge\n- - r5ad.xlarge\n- - r5ad.2xlarge\n- - r5ad.4xlarge\n- - r5ad.8xlarge\n- - r5ad.12xlarge\n- - r5ad.16xlarge\n- - r5ad.24xlarge\n- - r5b.xlarge\n- - r5b.2xlarge\n- - r5b.4xlarge\n- - r5b.8xlarge\n- - r5b.12xlarge\n- - r5b.16xlarge\n- - r5b.24xlarge\n- - r5d.xlarge\n- - r5d.2xlarge\n- - r5d.4xlarge\n- - r5d.8xlarge\n- - r5d.12xlarge\n- - r5d.16xlarge\n- - r5d.24xlarge\n- - r5dn.xlarge\n- - r5dn.2xlarge\n- - r5dn.4xlarge\n- - r5dn.8xlarge\n- - r5dn.12xlarge\n- - r5dn.16xlarge\n- - r5dn.24xlarge\n- - r5n.xlarge\n- - r5n.2xlarge\n- - r5n.4xlarge\n- - r5n.8xlarge\n- - r5n.12xlarge\n- - r5n.16xlarge\n- - r5n.24xlarge\n- - r6a.xlarge\n- - r6a.2xlarge\n- - r6a.4xlarge\n- - r6a.8xlarge\n- - r6a.12xlarge\n- - r6a.16xlarge\n- - r6a.24xlarge\n- - r6a.32xlarge\n- - r6a.48xlarge\n- - r6i.xlarge\n- - r6i.2xlarge\n- - r6i.4xlarge\n- - r6i.8xlarge\n- - r6i.12xlarge\n- - r6i.16xlarge\n- - r6i.24xlarge\n- - r6i.32xlarge\n- - r6id.xlarge\n- - r6id.2xlarge\n- - r6id.4xlarge\n- - r6id.8xlarge\n- - r6id.12xlarge\n- - r6id.16xlarge\n- - r6id.24xlarge\n- - r6id.32xlarge\n- - r7i.xlarge\n- - r7i.2xlarge\n- - r7i.4xlarge\n- - r7i.8xlarge\n- - r7i.12xlarge\n- - r7i.16xlarge\n- - r7i.24xlarge\n- - r7i.48xlarge\n- - r7iz.xlarge\n- - r7iz.2xlarge\n- - r7iz.4xlarge\n- - r7iz.8xlarge\n- - r7iz.12xlarge\n- - r7iz.16xlarge\n- - r7iz.32xlarge\n- - r7a.xlarge\n- - r7a.2xlarge\n- - r7a.4xlarge\n- - r7a.8xlarge\n- - r7a.12xlarge\n- - r7a.16xlarge\n- - r7a.24xlarge\n- - r7a.32xlarge\n- - r7a.48xlarge\n- - r8a.xlarge\n- - r8a.2xlarge\n- - r8a.4xlarge\n- - r8a.8xlarge\n- - r8a.12xlarge\n- - r8a.16xlarge\n- - r8a.24xlarge\n- - r8a.48xlarge\n- - r8i.xlarge\n- - r8i.2xlarge\n- - r8i.4xlarge\n- - r8i.8xlarge\n- - r8i.12xlarge\n- - r8i.16xlarge\n- - r8i.24xlarge\n- - r8i.32xlarge\n- - r8i.48xlarge\n- - r8i.96xlarge\n- - r8i-flex.xlarge\n- - r8i-flex.2xlarge\n- - r8i-flex.4xlarge\n- - r8i-flex.8xlarge\n- - r8i-flex.12xlarge\n- - r8i-flex.16xlarge\n- - x1.16xlarge\n- - x1.32xlarge\n- - x1e.xlarge\n- - x1e.2xlarge\n- - x1e.4xlarge\n- - x1e.8xlarge\n- - x1e.16xlarge\n- - x1e.32xlarge\n- - x2idn.16xlarge\n- - x2idn.24xlarge\n- - x2idn.32xlarge\n- - x2iedn.xlarge\n- - x2iedn.2xlarge\n- - x2iedn.4xlarge\n- - x2iedn.8xlarge\n- - x2iedn.16xlarge\n- - x2iedn.24xlarge\n- - x2iedn.32xlarge\n- - x2iezn.2xlarge\n- - x2iezn.4xlarge\n- - x2iezn.6xlarge\n- - x2iezn.8xlarge\n- - x2iezn.12xlarge\n- - d2.xlarge\n- - d2.2xlarge\n- - d2.4xlarge\n- - d2.8xlarge\n- - d3.xlarge\n- - d3.2xlarge\n- - d3.4xlarge\n- - d3.8xlarge\n- - d3en.xlarge\n- - d3en.2xlarge\n- - d3en.4xlarge\n- - d3en.6xlarge\n- - d3en.8xlarge\n- - d3en.12xlarge\n- - dl1.24xlarge\n- - h1.2xlarge\n- - h1.4xlarge\n- - h1.8xlarge\n- - h1.16xlarge\n- - inf1.xlarge\n- - inf1.2xlarge\n- - inf1.6xlarge\n- - inf1.24xlarge\n- - trn1.2xlarge\n- - trn1.32xlarge\n- - u-3tb1.56xlarge\n- - u-6tb1.56xlarge\n- - u-6tb1.112xlarge\n- - u-9tb1.112xlarge\n- - u-12tb1.112xlarge\n- - u-18tb1.112xlarge\n- - vt1.3xlarge\n- - vt1.6xlarge\n- - vt1.24xlarge\n- - z1d.xlarge\n- - z1d.2xlarge\n- - z1d.3xlarge\n- - z1d.6xlarge\n- - z1d.12xlarge\n- - -------------- Bring-Your-Own-License Only --------------\n- - c3.large\n- - c4.large\n- - c5.metal\n- - c5.large\n- - c5a.large\n- - c5ad.large\n- - c5d.metal\n- - c5d.large\n- - c5n.large\n- - c5n.metal\n- - c6a.large\n- - c6a.metal\n- - c6i.large\n- - c6i.metal\n- - c6id.large\n- - c6id.metal\n- - c7i.large\n- - c7i.metal-24xl\n- - c7i.metal-48xl\n- - c7i-flex.large\n- - c7a.medium\n- - c7a.large\n- - c7a.metal-48xl\n- - c8i.large\n- - c8i.metal-48xl\n- - c8i.metal-96xl\n- - c8i-flex.large\n- - i3.large\n- - i3.metal\n- - i3en.large\n- - i3en.metal\n- - i4i.large\n- - i4i.metal\n- - i7ie.large\n- - i7ie.metal-24xl\n- - i7ie.metal-48xl\n- - m3.large\n- - m3.medium\n- - m4.large\n- - m5.metal\n- - m5.large\n- - m5a.large\n- - m5ad.large\n- - m5d.metal\n- - m5d.large\n- - m5zn.large\n- - m5zn.metal\n- - m5n.large\n- - m5n.metal\n- - m5dn.large\n- - m5dn.metal\n- - m6a.large\n- - m6a.metal\n- - m6i.large\n- - m6i.metal\n- - m6id.large\n- - m6id.metal\n- - m7i.large\n- - m7i.metal-24xl\n- - m7i.metal-48xl\n- - m7i-flex.large\n- - m7a.medium\n- - m7a.large\n- - m7a.metal-48xl\n- - m8a.medium\n- - m8a.large\n- - m8a.metal-24xl\n- - m8a.metal-48xl\n- - m8i.large\n- - m8i.metal-48xl\n- - m8i.metal-96xl\n- - m8i-flex.large\n- - r3.large\n- - r4.large\n- - r5.metal\n- - r5.large\n- - r5a.large\n- - r5d.metal\n- - r5ad.large\n- - r5d.large\n- - r5dn.large\n- - r5dn.metal\n- - r5b.large\n- - r5b.metal\n- - r5n.large\n- - r5n.metal\n- - r6a.large\n- - r6a.metal\n- - r6i.large\n- - r6i.metal\n- - r6id.large\n- - r6id.metal\n- - r7i.large\n- - r7i.metal-24xl\n- - r7i.metal-48xl\n- - r7iz.large\n- - r7iz.metal-16xl\n- - r7iz.metal-32xl\n- - r7a.medium\n- - r7a.large\n- - r7a.metal-48xl\n- - r8a.medium\n- - r8a.large\n- - r8a.metal-24xl\n- - r8a.metal-48xl\n- - r8i.large\n- - r8i.metal-48xl\n- - r8i.metal-96xl\n- - r8i-flex.large\n- - t2.2xlarge\n- - t2.large\n- - t2.medium\n- - t2.micro\n- - t2.nano\n- - t2.small\n- - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n@@ -717,18 +150,6 @@ Parameters:\n - t3.nano\n - t3.small\n - t3.xlarge\n- - t3a.2xlarge\n- - t3a.large\n- - t3a.medium\n- - t3a.micro\n- - t3a.nano\n- - t3a.small\n- - t3a.xlarge\n- - x2idn.metal\n- - x2iedn.metal\n- - x2iezn.metal\n- - z1d.metal\n- - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n@@ -739,7 +160,7 @@ Parameters:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n- Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n+ Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer.\n Type: Number\n AllowedValues:\n - 1\n@@ -780,6 +201,14 @@ Parameters:\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n+ ExternalAccessCidrIP:\n+ Description: A CIDR IP range to allow external access from\n+ Type: String\n+ Default: 54.76.254.148/32\n+ ECSSecurityGroup:\n+ Description: the security group the ECS cluster is in\n+ Type: 'AWS::EC2::SecurityGroup::Id'\n+\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n@@ -792,11 +221,11 @@ Parameters:\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n- Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n- Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n Conditions:\n@@ -809,7 +238,7 @@ Conditions:\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n- PAYG:\n+ EssentialEnterprise:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n@@ -821,53 +250,53 @@ Mappings:\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n- base: '12.0.1'\n+ base: '11.0.2'\n LicenseRegion2AMI:\n us-east-1:\n- PAYGAl2023: ami-0198b8931e9597271\n- BYOLAl2023: ami-0a8536507241f95b0\n+ Enterprise: ami-0bf7e657fab67e971\n+ BYOL: ami-07d160aaa381d98d3\n us-east-2:\n- PAYGAl2023: ami-0877b64dae8264415\n- BYOLAl2023: ami-082cc98b2c01e486a\n+ Enterprise: ami-0b364b6c340494cde\n+ BYOL: ami-02fc4c59b1e0f84fc\n us-west-1:\n- PAYGAl2023: ami-07890fc78f4ddfa20\n- BYOLAl2023: ami-05c9a962410c2821b\n+ Enterprise: ami-0427f5f4c4ec4fb1a\n+ BYOL: ami-0db1c9ca54f60c93a\n us-west-2:\n- PAYGAl2023: ami-0577eb149c9e0f53f\n- BYOLAl2023: ami-0262dd8d014bf71ba\n+ Enterprise: ami-0f4226d039f3538a4\n+ BYOL: ami-036d6f6629eeae6ae\n eu-central-1:\n- PAYGAl2023: ami-06348556399c8ab69\n- BYOLAl2023: ami-00cb5a3527e7c0d11\n+ Enterprise: ami-0adde7fcee8e0abac\n+ BYOL: ami-0175f20a0ff9b2b41\n eu-west-1:\n- PAYGAl2023: ami-0fa7bc44cd9ab1f85\n- BYOLAl2023: ami-0bc2b4d46367806b0\n+ Enterprise: ami-0adad0df164f5d3d2\n+ BYOL: ami-0162fd6fe0c778804\n ap-south-1:\n- PAYGAl2023: ami-0f481ba0a6819ced6\n- BYOLAl2023: ami-00b59374107e5efb6\n+ Enterprise: ami-05cb78bc62095559e\n+ BYOL: ami-0b6472e5b25075c3a\n ap-southeast-1:\n- PAYGAl2023: ami-0c373c6c8a2316c80\n- BYOLAl2023: ami-0b9bd265ef165a07b\n+ Enterprise: ami-0ace4c492256d582b\n+ BYOL: ami-0337694124652af4a\n ap-southeast-2:\n- PAYGAl2023: ami-0c65a907408226a3e\n- BYOLAl2023: ami-02bad1ef2c6d4a91a\n+ Enterprise: ami-09b42852706d80f61\n+ BYOL: ami-03d830bd349cddcbc\n ap-northeast-1:\n- PAYGAl2023: ami-0254bc4adaf13e3b9\n- BYOLAl2023: ami-07e8b312b1016bf67\n+ Enterprise: ami-0860fd2cf7c494dfc\n+ BYOL: ami-0f810574accbd33b2\n ap-northeast-2:\n- PAYGAl2023: ami-05995b5f5807873d7\n- BYOLAl2023: ami-0afd77ba0d7a0c129\n+ Enterprise: ami-09e07ba03b2662e4b\n+ BYOL: ami-04f97692a8557b493\n sa-east-1:\n- PAYGAl2023: ami-05ec8fee12de236a5\n- BYOLAl2023: ami-09d883ea308449555\n+ Enterprise: ami-0b94055f72e2d3a30\n+ BYOL: ami-00aadd4fc8a06eeff\n eu-west-2:\n- PAYGAl2023: ami-0f5cff9d243f31521\n- BYOLAl2023: ami-0588d104a52fbc326\n+ Enterprise: ami-01da8900f033938cb\n+ BYOL: ami-016eaaa73edae05a9\n ca-central-1:\n- PAYGAl2023: ami-0f34d118b23b51bf5\n- BYOLAl2023: ami-0c78eccd03e957005\n+ Enterprise: ami-0229c2f9c0da8bfb4\n+ BYOL: ami-083a7db6e6afd6067\n eu-west-3:\n- PAYGAl2023: ami-01fa9155eb17992c5\n- BYOLAl2023: ami-0637199acc5327534\n+ Enterprise: ami-0ac4d1b01ef025708\n+ BYOL: ami-0b44d169075494c13\n Resources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n@@ -979,9 +408,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1030,12 +457,12 @@ Resources:\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1074,6 +501,8 @@ Resources:\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n@@ -1094,12 +523,12 @@ Resources:\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp2\n- Version: !GetAtt LaunchTemp2.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig2\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1138,6 +567,8 @@ Resources:\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n@@ -1158,12 +589,12 @@ Resources:\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp3\n- Version: !GetAtt LaunchTemp3.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig3\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1202,6 +633,8 @@ Resources:\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n@@ -1212,25 +645,37 @@ Resources:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n- FromPort: '22'\n- ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7999'\n+ ToPort: '7999'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n@@ -1250,303 +695,303 @@ Resources:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ - IpProtocol: tcp\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ InternalElbSecurityGroup:\n+ Type: 'AWS::EC2::SecurityGroup'\n+ Properties:\n+ GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n+ VpcId: !Ref VPC\n+ SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n- LaunchTemp1:\n- Type: 'AWS::EC2::LaunchTemplate'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n+ LaunchConfig1:\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume1\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeA#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume1\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeA#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=1\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=1\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n- LaunchTemp2:\n+ LaunchConfig2:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume2\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeB#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume2\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeB#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n- LaunchTemp3:\n+ LaunchConfig3:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume3\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeC#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume3\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeC#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n@@ -1757,6 +1202,27 @@ Resources:\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n+ MarklogicExternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n@@ -1875,6 +1341,72 @@ Resources:\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n+ MarklogicExternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - Alb\n+ - MarklogicExternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicExternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref Alb\n+ Port: 8011\n+ Protocol: HTTP\n+ #Application Load Balancer description for MultiZone deployments (3 zones).\n+ InternalAlb:\n+ Condition: MultiZone\n+ Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n+ DependsOn:\n+ - InternalElbSecurityGroup\n+ Properties: \n+ Scheme: internal\n+ SecurityGroups: \n+ - !Ref InternalElbSecurityGroup\n+ Subnets:\n+ - !Ref PrivateSubnet1\n+ - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n+ - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n+ Metadata:\n+ 'AWS::CloudFormation::Designer':\n+ id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n+ #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n+ #Health checks are performed on each TargetGroup.\n+ MarklogicInternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n+ MarklogicInternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - InternalAlb\n+ - MarklogicInternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicInternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref InternalAlb\n+ Port: 8011\n+ Protocol: HTTP\n Outputs:\n URL:\n Description: The URL of the MarkLogic Cluster",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "5d2e4a41-1026-4257-be05-47d879825c3e",
|
||
"timestamp": "2026-01-22T17:46:17.264Z",
|
||
"type": "gemini",
|
||
"content": "I've noticed that `dxw-11` appears to be an older version of the templates, with MarkLogic 11.0 compared to `master`'s 12.0. I'll examine `lambda/nodemanager.py` and `lambda/managedeni.py` to identify any specific improvements in `dxw-11` that might need to be ported to `master`.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Investigating Template Versions",
|
||
"description": "I'm now zeroing in on the template versions. It's clear `dxw-11` is holding older versions. The README.md file and the `mlcluster-vpc.template` file present discrepancies, where the expected older version is actually an older, outdated version of the code. This is very confusing.",
|
||
"timestamp": "2026-01-22T17:46:15.198Z"
|
||
},
|
||
{
|
||
"subject": "Analyzing Branch Discrepancies",
|
||
"description": "I've just spotted a major curveball: The `dxw-11` branch, seemingly intended for MarkLogic 11, actually appears to contain *older* template versions than the `master` branch. The README's version declarations seem to conflict with the template file versions. This raises the critical question of the nature of the changes the user wants to port: Is it truly a change, or a reverted older state? Now, I will examine `lambda/nodemanager.py` and `lambda/managedeni.py` to identify potential enhancements present in the `dxw-11` branch.",
|
||
"timestamp": "2026-01-22T17:46:16.949Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 44826,
|
||
"output": 134,
|
||
"cached": 14962,
|
||
"thoughts": 217,
|
||
"tool": 0,
|
||
"total": 45177
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769103977258-07a9a24b8e21a",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Compare lambda function code between master and dxw-11.",
|
||
"command": "git diff master dxw-11 lambda/nodemanager.py lambda/managedeni.py"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769103977258-07a9a24b8e21a",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git diff master dxw-11 lambda/nodemanager.py lambda/managedeni.py\nDirectory: (root)\nOutput: diff --git a/lambda/managedeni.py b/lambda/managedeni.py\nindex 8037259..601b48a 100644\n--- a/lambda/managedeni.py\n+++ b/lambda/managedeni.py\n@@ -1,4 +1,4 @@\n-# Copyright (c) 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.\n+# Copyright 2002-2018 MarkLogic Corporation. All Rights Reserved.\n \n import boto3\n import logging\ndiff --git a/lambda/nodemanager.py b/lambda/nodemanager.py\nindex 94548b1..3fe18d7 100644\n--- a/lambda/nodemanager.py\n+++ b/lambda/nodemanager.py\n@@ -1,4 +1,4 @@\n-# Copyright (c) 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.\n+# Copyright 2002-2018 MarkLogic Corporation. All Rights Reserved.\n \n import boto3\n import botocore\n@@ -53,72 +53,6 @@ def eni_wait_for_attachment(eni_id):\n \"Waiting for network interface %s attachment timed out\" % eni_id\n )\n \n-def eni_wait_for_detachment(eni_id):\n- max_rety = 10\n- retries = 0\n- sleep_interval = 10\n- eni_info = None\n- while True and retries < max_rety:\n- try:\n- eni_info = ec2_resource.NetworkInterface(id=eni_id)\n- log.info(\"ENI Detachment status %s \" % eni_info.status)\n- except ClientError as e:\n- reason = \"Failed to get network interface by id %s\" % eni_id\n- log.exception(reason)\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n-\n- status = eni_info.status\n- if status == \"available\":\n- time.sleep(sleep_interval)\n- break\n- elif status == \"in-use\":\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n- else:\n- log.warning(\n- \"Network interface %s in unexpected status: %s\" % (eni_id, status)\n- )\n- retries += 1\n- continue\n- else:\n- log.warning(\n- \"Waiting for network interface %s detachment timed out\" % eni_id\n- )\n-\n-def eni_wait_to_detach_attachment(eni_id):\n- max_rety = 5\n- retries = 0\n- sleep_interval = 10\n- eni_info = None\n- while True and retries < max_rety:\n- try:\n- eni_info = ec2_resource.NetworkInterface(id=eni_id)\n- except ClientError as e:\n- reason = \"Failed to get network interface by id %s\" % eni_id\n- log.exception(reason)\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n-\n- status = eni_info.status\n- if not eni_info.attachment and status == \"available\":\n- break\n- elif eni_info.attachment and status == \"available\":\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n- elif status == \"in-use\":\n- break\n- else:\n- log.warning(\n- \"Waiting for network interface %s to detach attachment time out\" % eni_id\n- )\n- return status\n-\n-\n def handler(event, context):\n msg_text = event[\"Records\"][0][\"Sns\"][\"Message\"]\n msg = json.loads(msg_text)\n@@ -177,6 +111,10 @@ def on_launch(msg):\n \"Name\": \"tag:cluster-eni-id\",\n \"Values\": [tag]\n },\n+ {\n+ \"Name\": \"status\",\n+ \"Values\": [\"available\"]\n+ },\n {\n \"Name\": \"subnet-id\",\n \"Values\": [subnet_id]\n@@ -188,52 +126,7 @@ def on_launch(msg):\n continue\n # attach the available ENI\n for eni_info in response[\"NetworkInterfaces\"]:\n- log.info(\"ENI response %s\" % eni_info)\n eni_id = eni_info[\"NetworkInterfaceId\"]\n- eni_status = eni_info[\"Status\"]\n- if \"Attachment\" in eni_info and eni_status != \"available\":\n- attached_instance_id = eni_info[\"Attachment\"][\"InstanceId\"]\n- eni_attach_id = eni_info[\"Attachment\"][\"AttachmentId\"]\n- log.info(\"Actual Instance and ENI Status and ENI Attach ID %s %s %s \" % (\n- attached_instance_id, eni_status, eni_attach_id))\n-\n- try:\n- attached_instance_response = ec2_client.describe_instances(InstanceIds=[attached_instance_id])\n- except botocore.exceptions.ClientError as e:\n- reason = \"Failed to describe instance %s\" % instance_id\n- log.exception(reason)\n-\n- # Check if status is other than available and then check if actual instance is in shutting down or terminated status\n- if (attached_instance_response['Reservations'][0]['Instances'][0]['State']['Name']\n- in [\"shutting-down\", \"terminated\"]):\n- log.info(\"Attached Instance Response %s \" % attached_instance_response)\n- log.info(\"Manually detaching the ENI %s \" % eni_id)\n- # Logic to detach the ENI from the actual instance in shutting down or terminated status\n- try:\n- detach_response = ec2_client.detach_network_interface(\n- AttachmentId=eni_attach_id,\n- )\n- except botocore.exceptions.ClientError as e:\n- reason = \"Error detaching network interface %s\" % eni_id\n- log.exception(reason)\n- \n- eni_wait_for_detachment(eni_id)\n- eni_status = eni_wait_to_detach_attachment(eni_id)\n- log.info(\"ENI status check after detachment and detach attachment %s\" % eni_status)\n-\n- else:\n- continue\n- # Reason to have this logic is sometimes though ENI status is AVAILABLE still attachment status exists and shows detached\n- # When we try to attach the ENI it throws error saying ENI is already attached to an instance. Added sleep to give time to complete the detachment\n- elif \"Attachment\" in eni_info and eni_status == \"available\":\n- if eni_info[\"Attachment\"][\"Status\"] == \"detached\":\n- eni_wait_to_detach_attachment(eni_id)\n-\n-\n- if eni_status != \"available\":\n- continue\n- \n-\n try:\n attachment = ec2_client.attach_network_interface(\n NetworkInterfaceId=eni_id,\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35316"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:46:17.421Z",
|
||
"resultDisplay": "diff --git a/lambda/managedeni.py b/lambda/managedeni.py\nindex 8037259..601b48a 100644\n--- a/lambda/managedeni.py\n+++ b/lambda/managedeni.py\n@@ -1,4 +1,4 @@\n-# Copyright (c) 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.\n+# Copyright 2002-2018 MarkLogic Corporation. All Rights Reserved.\n \n import boto3\n import logging\ndiff --git a/lambda/nodemanager.py b/lambda/nodemanager.py\nindex 94548b1..3fe18d7 100644\n--- a/lambda/nodemanager.py\n+++ b/lambda/nodemanager.py\n@@ -1,4 +1,4 @@\n-# Copyright (c) 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.\n+# Copyright 2002-2018 MarkLogic Corporation. All Rights Reserved.\n \n import boto3\n import botocore\n@@ -53,72 +53,6 @@ def eni_wait_for_attachment(eni_id):\n \"Waiting for network interface %s attachment timed out\" % eni_id\n )\n \n-def eni_wait_for_detachment(eni_id):\n- max_rety = 10\n- retries = 0\n- sleep_interval = 10\n- eni_info = None\n- while True and retries < max_rety:\n- try:\n- eni_info = ec2_resource.NetworkInterface(id=eni_id)\n- log.info(\"ENI Detachment status %s \" % eni_info.status)\n- except ClientError as e:\n- reason = \"Failed to get network interface by id %s\" % eni_id\n- log.exception(reason)\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n-\n- status = eni_info.status\n- if status == \"available\":\n- time.sleep(sleep_interval)\n- break\n- elif status == \"in-use\":\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n- else:\n- log.warning(\n- \"Network interface %s in unexpected status: %s\" % (eni_id, status)\n- )\n- retries += 1\n- continue\n- else:\n- log.warning(\n- \"Waiting for network interface %s detachment timed out\" % eni_id\n- )\n-\n-def eni_wait_to_detach_attachment(eni_id):\n- max_rety = 5\n- retries = 0\n- sleep_interval = 10\n- eni_info = None\n- while True and retries < max_rety:\n- try:\n- eni_info = ec2_resource.NetworkInterface(id=eni_id)\n- except ClientError as e:\n- reason = \"Failed to get network interface by id %s\" % eni_id\n- log.exception(reason)\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n-\n- status = eni_info.status\n- if not eni_info.attachment and status == \"available\":\n- break\n- elif eni_info.attachment and status == \"available\":\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n- elif status == \"in-use\":\n- break\n- else:\n- log.warning(\n- \"Waiting for network interface %s to detach attachment time out\" % eni_id\n- )\n- return status\n-\n-\n def handler(event, context):\n msg_text = event[\"Records\"][0][\"Sns\"][\"Message\"]\n msg = json.loads(msg_text)\n@@ -177,6 +111,10 @@ def on_launch(msg):\n \"Name\": \"tag:cluster-eni-id\",\n \"Values\": [tag]\n },\n+ {\n+ \"Name\": \"status\",\n+ \"Values\": [\"available\"]\n+ },\n {\n \"Name\": \"subnet-id\",\n \"Values\": [subnet_id]\n@@ -188,52 +126,7 @@ def on_launch(msg):\n continue\n # attach the available ENI\n for eni_info in response[\"NetworkInterfaces\"]:\n- log.info(\"ENI response %s\" % eni_info)\n eni_id = eni_info[\"NetworkInterfaceId\"]\n- eni_status = eni_info[\"Status\"]\n- if \"Attachment\" in eni_info and eni_status != \"available\":\n- attached_instance_id = eni_info[\"Attachment\"][\"InstanceId\"]\n- eni_attach_id = eni_info[\"Attachment\"][\"AttachmentId\"]\n- log.info(\"Actual Instance and ENI Status and ENI Attach ID %s %s %s \" % (\n- attached_instance_id, eni_status, eni_attach_id))\n-\n- try:\n- attached_instance_response = ec2_client.describe_instances(InstanceIds=[attached_instance_id])\n- except botocore.exceptions.ClientError as e:\n- reason = \"Failed to describe instance %s\" % instance_id\n- log.exception(reason)\n-\n- # Check if status is other than available and then check if actual instance is in shutting down or terminated status\n- if (attached_instance_response['Reservations'][0]['Instances'][0]['State']['Name']\n- in [\"shutting-down\", \"terminated\"]):\n- log.info(\"Attached Instance Response %s \" % attached_instance_response)\n- log.info(\"Manually detaching the ENI %s \" % eni_id)\n- # Logic to detach the ENI from the actual instance in shutting down or terminated status\n- try:\n- detach_response = ec2_client.detach_network_interface(\n- AttachmentId=eni_attach_id,\n- )\n- except botocore.exceptions.ClientError as e:\n- reason = \"Error detaching network interface %s\" % eni_id\n- log.exception(reason)\n- \n- eni_wait_for_detachment(eni_id)\n- eni_status = eni_wait_to_detach_attachment(eni_id)\n- log.info(\"ENI status check after detachment and detach attachment %s\" % eni_status)\n-\n- else:\n- continue\n- # Reason to have this logic is sometimes though ENI status is AVAILABLE still attachment status exists and shows detached\n- # When we try to attach the ENI it throws error saying ENI is already attached to an instance. Added sleep to give time to complete the detachment\n- elif \"Attachment\" in eni_info and eni_status == \"available\":\n- if eni_info[\"Attachment\"][\"Status\"] == \"detached\":\n- eni_wait_to_detach_attachment(eni_id)\n-\n-\n- if eni_status != \"available\":\n- continue\n- \n-\n try:\n attachment = ec2_client.attach_network_interface(\n NetworkInterfaceId=eni_id,",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "9bb1cff6-7418-4fb0-bb61-96f63deba026",
|
||
"timestamp": "2026-01-22T17:46:23.482Z",
|
||
"type": "gemini",
|
||
"content": "The diff indicates `dxw-11` removed robust logic from `nodemanager.py` and reverted the copyright notice, which is unexpected. I'll examine the commit history of `dxw-11` to clarify these changes.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Reviewing Code Differences",
|
||
"description": "The diff highlights enhanced logic in `nod_emanager.py` within `master`, especially concerning ENI detachment. I was initially unsure, but now I recognize the value in the more robust detachment procedures present in the `master` branch.",
|
||
"timestamp": "2026-01-22T17:46:21.363Z"
|
||
},
|
||
{
|
||
"subject": "Clarifying Diff Direction",
|
||
"description": "The earlier understanding of the diff was incorrect. I've now realized the `git diff master dxw-11` command reveals the changes to be made *to* the `master` branch to align with `dxw-11`. Consequently, the `dxw-11` branch has actually removed the wait functions and reverted the copyright notice. I'm now delving into the commit history of `dxw-11` for context.",
|
||
"timestamp": "2026-01-22T17:46:23.267Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 46853,
|
||
"output": 92,
|
||
"cached": 41098,
|
||
"thoughts": 205,
|
||
"tool": 0,
|
||
"total": 47150
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769103983478-ffa51f1067018",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"command": "git log master..dxw-11 --oneline --graph --decorate",
|
||
"description": "Check commit history of dxw-11 relative to master."
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769103983478-ffa51f1067018",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git log master..dxw-11 --oneline --graph --decorate\nDirectory: (root)\nOutput: * 7044ce2 (origin/dxw-11, dxw-11) wip\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35324"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:46:23.546Z",
|
||
"resultDisplay": "* 7044ce2 (origin/dxw-11, dxw-11) wip",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "bfafddf7-f67d-4722-824a-d609c07c067c",
|
||
"timestamp": "2026-01-22T17:46:26.329Z",
|
||
"type": "gemini",
|
||
"content": "A single \"wip\" commit, `7044ce2`. I'll investigate its contents.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Investigating the Commit",
|
||
"description": "I'm currently delving into the specifics of commit `7044ce2`. My focus is to determine the nature of the work in progress, which seems to be the main point. I'm keen to uncover the context of this \"wip\" tag and understand the direction of development, so I'll be looking into the details.",
|
||
"timestamp": "2026-01-22T17:46:26.135Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 47035,
|
||
"output": 63,
|
||
"cached": 44643,
|
||
"thoughts": 28,
|
||
"tool": 0,
|
||
"total": 47126
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769103986324-3ee107113c0e7",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"command": "git show 7044ce2 --stat",
|
||
"description": "Show the changes in the 'wip' commit on dxw-11."
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769103986324-3ee107113c0e7",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git show 7044ce2 --stat\nDirectory: (root)\nOutput: commit 7044ce2fcefd0f605e3c71439a81cae2fce654b9 (origin/dxw-11, dxw-11)\nAuthor: bob walker <bob@randomness.org.uk>\nDate: Fri May 26 16:03:56 2023 +0100\n\n wip\n\n mlcluster.template | 607 ++++++++++---------------------------\n 1 file changed, 159 insertions(+), 448 deletions(-)\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35340"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:46:26.392Z",
|
||
"resultDisplay": "commit 7044ce2fcefd0f605e3c71439a81cae2fce654b9 (origin/dxw-11, dxw-11)\nAuthor: bob walker <bob@randomness.org.uk>\nDate: Fri May 26 16:03:56 2023 +0100\n\n wip\n\n mlcluster.template | 607 ++++++++++---------------------------\n 1 file changed, 159 insertions(+), 448 deletions(-)",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "26227827-2979-4bb0-9973-45b451724733",
|
||
"timestamp": "2026-01-22T17:46:32.476Z",
|
||
"type": "gemini",
|
||
"content": "Commit `7044ce2` only modified `mlcluster.template`, yet `git diff` shows many more changes. I suspect `dxw-11` branched off an old version of `master`, so I'll check the merge base to confirm.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Analyzing a Discrepancy",
|
||
"description": "I've hit a snag. The commit log indicates a single file change, `mlcluster.template`, yet an initial `git diff` displayed a larger set. I suspect the `dxw-11` branch is stale, possibly stemming from a very old version of `master`. The next logical step is to determine the merge base.",
|
||
"timestamp": "2026-01-22T17:46:32.170Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 47292,
|
||
"output": 91,
|
||
"cached": 44612,
|
||
"thoughts": 68,
|
||
"tool": 0,
|
||
"total": 47451
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769103992466-e8312fd8e1e248",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Find the common ancestor of master and dxw-11.",
|
||
"command": "git merge-base master dxw-11"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769103992466-e8312fd8e1e248",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git merge-base master dxw-11\nDirectory: (root)\nOutput: b72285bd08c6e4d37993223ae00bf433f6311c63\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35363"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:46:32.539Z",
|
||
"resultDisplay": "b72285bd08c6e4d37993223ae00bf433f6311c63",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "0e24320f-c067-4c6d-be33-2c4281bfcec7",
|
||
"timestamp": "2026-01-22T17:46:36.594Z",
|
||
"type": "gemini",
|
||
"content": "Finding common ancestor location.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Tracking Ancestry's Origin",
|
||
"description": "I'm now focusing on pinpointing the origin of the common ancestor. My current line of thinking revolves around identifying shared characteristics across the organisms. I'm cross-referencing these traits to map out potential evolutionary pathways.",
|
||
"timestamp": "2026-01-22T17:46:36.392Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 47480,
|
||
"output": 75,
|
||
"cached": 44542,
|
||
"thoughts": 10,
|
||
"tool": 0,
|
||
"total": 47565
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769103996592-f155c13d8a3fb8",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Check the history of the merge base.",
|
||
"command": "git log -n 5 b72285bd08c6e4d37993223ae00bf433f6311c63 --oneline --graph --decorate"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769103996592-f155c13d8a3fb8",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git log -n 5 b72285bd08c6e4d37993223ae00bf433f6311c63 --oneline --graph --decorate\nDirectory: (root)\nOutput: * b72285b (upstream/11.0-master) Merge pull request #170 from marklogic/11.0-develop\n|\\ \n| * ba3b189 (upstream/11.0-develop) Merge pull request #168 from sumanthravipati/11.0-develop\n| |\\ \n| | * 94ea07c BUG-60314: Fix to address dependency issue for Lambda Runtime Change\n| |/ \n* | 86474f3 Merge pull request #164 from marklogic/11.0-develop\n|\\| \n| * e2301bd Merge pull request #163 from sumanthravipati/11.0-develop\n| |\\ \nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35372"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:46:36.666Z",
|
||
"resultDisplay": "* b72285b (upstream/11.0-master) Merge pull request #170 from marklogic/11.0-develop\n|\\ \n| * ba3b189 (upstream/11.0-develop) Merge pull request #168 from sumanthravipati/11.0-develop\n| |\\ \n| | * 94ea07c BUG-60314: Fix to address dependency issue for Lambda Runtime Change\n| |/ \n* | 86474f3 Merge pull request #164 from marklogic/11.0-develop\n|\\| \n| * e2301bd Merge pull request #163 from sumanthravipati/11.0-develop\n| |\\ ",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "ea097e1b-4def-4eb5-829b-fb1a6c4f1951",
|
||
"timestamp": "2026-01-22T17:46:48.105Z",
|
||
"type": "gemini",
|
||
"content": "Checking `master` status.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Examining the Current Status",
|
||
"description": "I'm currently trying to assess the state of `master`. A bit of investigation is in order to see where things stand. I need to understand what has been done.",
|
||
"timestamp": "2026-01-22T17:46:47.889Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 47837,
|
||
"output": 41,
|
||
"cached": 44536,
|
||
"thoughts": 11,
|
||
"tool": 0,
|
||
"total": 47889
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104008102-196499e27bffd8",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Check the recent history of the master branch.",
|
||
"command": "git log -n 5 master --oneline --graph --decorate"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104008102-196499e27bffd8",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git log -n 5 master --oneline --graph --decorate\nDirectory: (root)\nOutput: * f8a0c47 (HEAD -> master, origin/master, origin/HEAD) MLE-24919: MarkLogic 12.0.1 CFT Release Commit\n|\\ \n| * d12f1e6 MLE-24919: Extra Spaces Removal Changes Commit\n| |\\ \n| | * 5233ae4 MLE-24919: Extra Spaces Removal Changes Commit\n| * | 4c8eaaf MLE-24919: MarkLogic 12.0.1 CFT Changes Commit\n| |\\| \n| | * 43aaded MLE-24919: 12.0.1 CFT Changes Commit\n| |/ \nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35430"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:46:48.176Z",
|
||
"resultDisplay": "* f8a0c47 (HEAD -> master, origin/master, origin/HEAD) MLE-24919: MarkLogic 12.0.1 CFT Release Commit\n|\\ \n| * d12f1e6 MLE-24919: Extra Spaces Removal Changes Commit\n| |\\ \n| | * 5233ae4 MLE-24919: Extra Spaces Removal Changes Commit\n| * | 4c8eaaf MLE-24919: MarkLogic 12.0.1 CFT Changes Commit\n| |\\| \n| | * 43aaded MLE-24919: 12.0.1 CFT Changes Commit\n| |/ ",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "c646d4bc-9da0-4a77-b9ab-e14bee87e450",
|
||
"timestamp": "2026-01-22T17:47:03.355Z",
|
||
"type": "gemini",
|
||
"content": "`dxw-11` is based on an old `11.0` version, while `master` is at `12.0.1`. The user wants to port commit `7044ce2` from `dxw-11`. I'll examine the specific changes it made to `mlcluster.template`.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Inspecting the Code Changes",
|
||
"description": "I'm now diving into the specifics of commit `7044ce2` to understand the exact changes made to `mlcluster.template`. My aim is to isolate the modifications, to assess their impact and the complexity of porting them over to the newer codebase.",
|
||
"timestamp": "2026-01-22T17:47:03.114Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 48106,
|
||
"output": 171,
|
||
"cached": 44521,
|
||
"thoughts": 95,
|
||
"tool": 0,
|
||
"total": 48372
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104023351-84416fcfde1c48",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Extract and diff the changes in the 'wip' commit on dxw-11.",
|
||
"command": "git show 7044ce2:mlcluster.template > mlcluster.template.dxw-11 && git show 7044ce2^:mlcluster.template > mlcluster.template.base && diff -u mlcluster.template.base mlcluster.template.dxw-11"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104023351-84416fcfde1c48",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git show 7044ce2:mlcluster.template > mlcluster.template.dxw-11 && git show 7044ce2^:mlcluster.template > mlcluster.template.base && diff -u mlcluster.template.base mlcluster.template.dxw-11\nDirectory: (root)\nOutput: --- mlcluster.template.base 2026-01-22 17:47:15\n+++ mlcluster.template.dxw-11 2026-01-22 17:47:15\n@@ -32,6 +32,8 @@\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n+ - ExternalAccessCidrIP\n+ - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n@@ -90,6 +92,10 @@\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n+ ExternalAccessCidrIP:\n+ default: External IP address range for access to admin site\n+ ECSSecurityGroup:\n+ default: the security group the ecs cluster is in\n Parameters:\n # resource configuration\n IAMRole:\n@@ -100,7 +106,7 @@\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n- Default: '10'\n+ Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n@@ -108,7 +114,7 @@\n - standard\n - gp2\n - gp3\n- Default: gp2\n+ Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n@@ -135,428 +141,8 @@\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n- Default: r5.4xlarge\n+ Default: t3.small\n AllowedValues:\n- - ---- Essential Enterprise and Bring-Your-Own-License ----\n- - c3.xlarge\n- - c3.2xlarge\n- - c3.4xlarge\n- - c3.8xlarge\n- - c4.xlarge\n- - c4.2xlarge\n- - c4.4xlarge\n- - c4.8xlarge\n- - c5.xlarge\n- - c5.2xlarge\n- - c5.4xlarge\n- - c5.9xlarge\n- - c5.12xlarge\n- - c5.18xlarge\n- - c5.24xlarge\n- - c5a.xlarge\n- - c5a.2xlarge\n- - c5a.4xlarge\n- - c5a.8xlarge\n- - c5a.12xlarge\n- - c5a.16xlarge\n- - c5a.24xlarge\n- - c5ad.xlarge\n- - c5ad.2xlarge\n- - c5ad.4xlarge\n- - c5ad.8xlarge\n- - c5ad.12xlarge\n- - c5ad.16xlarge\n- - c5ad.24xlarge\n- - c5d.xlarge\n- - c5d.2xlarge\n- - c5d.4xlarge\n- - c5d.9xlarge\n- - c5d.12xlarge\n- - c5d.18xlarge\n- - c5d.24xlarge\n- - c5n.xlarge\n- - c5n.2xlarge\n- - c5n.4xlarge\n- - c5n.9xlarge\n- - c5n.18xlarge\n- - c6a.xlarge\n- - c6a.2xlarge\n- - c6a.4xlarge\n- - c6a.8xlarge\n- - c6a.12xlarge\n- - c6a.16xlarge\n- - c6a.24xlarge\n- - c6a.32xlarge\n- - c6a.48xlarge\n- - c6i.xlarge\n- - c6i.2xlarge\n- - c6i.4xlarge\n- - c6i.8xlarge\n- - c6i.12xlarge\n- - c6i.16xlarge\n- - c6i.24xlarge\n- - c6i.32xlarge\n- - c6id.xlarge\n- - c6id.2xlarge\n- - c6id.4xlarge\n- - c6id.8xlarge\n- - c6id.12xlarge\n- - c6id.16xlarge\n- - c6id.24xlarge\n- - c6id.32xlarge\n- - cc2.8xlarge\n- - i2.2xlarge\n- - i2.4xlarge\n- - i2.8xlarge\n- - i2.xlarge\n- - i3.xlarge\n- - i3.2xlarge\n- - i3.4xlarge\n- - i3.8xlarge\n- - i3.16xlarge\n- - i3en.xlarge\n- - i3en.2xlarge\n- - i3en.3xlarge\n- - i3en.6xlarge\n- - i3en.12xlarge\n- - i3en.24xlarge\n- - i4i.xlarge\n- - i4i.2xlarge\n- - i4i.4xlarge\n- - i4i.8xlarge\n- - i4i.16xlarge\n- - i4i.32xlarge\n- - m3.xlarge\n- - m3.2xlarge\n- - m4.xlarge\n- - m4.2xlarge\n- - m4.4xlarge\n- - m4.10xlarge\n- - m4.16xlarge\n- - m5.xlarge\n- - m5.2xlarge\n- - m5.4xlarge\n- - m5.8xlarge\n- - m5.12xlarge\n- - m5.16xlarge\n- - m5.24xlarge\n- - m5a.xlarge\n- - m5a.2xlarge\n- - m5a.4xlarge\n- - m5a.8xlarge\n- - m5a.12xlarge\n- - m5a.16xlarge\n- - m5a.24xlarge\n- - m5d.xlarge\n- - m5d.2xlarge\n- - m5d.4xlarge\n- - m5d.8xlarge\n- - m5d.16xlarge\n- - m5d.12xlarge\n- - m5d.24xlarge\n- - m5ad.xlarge\n- - m5ad.2xlarge\n- - m5ad.4xlarge\n- - m5ad.8xlarge\n- - m5ad.12xlarge\n- - m5ad.16xlarge\n- - m5ad.24xlarge\n- - m5zn.xlarge\n- - m5zn.2xlarge\n- - m5zn.3xlarge\n- - m5zn.6xlarge\n- - m5zn.12xlarge\n- - m5n.xlarge\n- - m5n.2xlarge\n- - m5n.4xlarge\n- - m5n.8xlarge\n- - m5n.12xlarge\n- - m5n.16xlarge\n- - m5n.24xlarge\n- - m5dn.xlarge\n- - m5dn.2xlarge\n- - m5dn.4xlarge\n- - m5dn.8xlarge\n- - m5dn.12xlarge\n- - m5dn.16xlarge\n- - m5dn.24xlarge\n- - m6a.xlarge\n- - m6a.2xlarge\n- - m6a.4xlarge\n- - m6a.8xlarge\n- - m6a.12xlarge\n- - m6a.16xlarge\n- - m6a.24xlarge\n- - m6a.32xlarge\n- - m6a.48xlarge\n- - m6i.xlarge\n- - m6i.2xlarge\n- - m6i.4xlarge\n- - m6i.8xlarge\n- - m6i.12xlarge\n- - m6i.16xlarge\n- - m6i.24xlarge\n- - m6i.32xlarge\n- - m6id.xlarge\n- - m6id.2xlarge\n- - m6id.4xlarge\n- - m6id.8xlarge\n- - m6id.12xlarge\n- - m6id.16xlarge\n- - m6id.24xlarge\n- - m6id.32xlarge\n- - p2.xlarge\n- - p2.8xlarge\n- - p2.16xlarge\n- - p3.2xlarge\n- - p3.8xlarge\n- - p3.16xlarge\n- - p3dn.24xlarge\n- - p4d.24xlarge\n- - r3.xlarge\n- - r3.2xlarge\n- - r3.4xlarge\n- - r3.8xlarge\n- - r4.xlarge\n- - r4.2xlarge\n- - r4.4xlarge\n- - r4.8xlarge\n- - r4.16xlarge\n- - r5.xlarge\n- - r5.2xlarge\n- - r5.4xlarge\n- - r5.8xlarge\n- - r5.12xlarge\n- - r5.16xlarge\n- - r5.24xlarge\n- - r5a.xlarge\n- - r5a.2xlarge\n- - r5a.4xlarge\n- - r5a.8xlarge\n- - r5a.12xlarge\n- - r5a.16xlarge\n- - r5a.24xlarge\n- - r5ad.xlarge\n- - r5ad.2xlarge\n- - r5ad.4xlarge\n- - r5ad.8xlarge\n- - r5ad.12xlarge\n- - r5ad.16xlarge\n- - r5ad.24xlarge\n- - r5b.xlarge\n- - r5b.2xlarge\n- - r5b.4xlarge\n- - r5b.8xlarge\n- - r5b.12xlarge\n- - r5b.16xlarge\n- - r5b.24xlarge\n- - r5d.xlarge\n- - r5d.2xlarge\n- - r5d.4xlarge\n- - r5d.8xlarge\n- - r5d.12xlarge\n- - r5d.16xlarge\n- - r5d.24xlarge\n- - r5dn.xlarge\n- - r5dn.2xlarge\n- - r5dn.4xlarge\n- - r5dn.8xlarge\n- - r5dn.12xlarge\n- - r5dn.16xlarge\n- - r5dn.24xlarge\n- - r5n.xlarge\n- - r5n.2xlarge\n- - r5n.4xlarge\n- - r5n.8xlarge\n- - r5n.12xlarge\n- - r5n.16xlarge\n- - r5n.24xlarge\n- - r6a.xlarge\n- - r6a.2xlarge\n- - r6a.4xlarge\n- - r6a.8xlarge\n- - r6a.12xlarge\n- - r6a.16xlarge\n- - r6a.24xlarge\n- - r6a.32xlarge\n- - r6a.48xlarge\n- - r6i.xlarge\n- - r6i.2xlarge\n- - r6i.4xlarge\n- - r6i.8xlarge\n- - r6i.12xlarge\n- - r6i.16xlarge\n- - r6i.24xlarge\n- - r6i.32xlarge\n- - r6id.xlarge\n- - r6id.2xlarge\n- - r6id.4xlarge\n- - r6id.8xlarge\n- - r6id.12xlarge\n- - r6id.16xlarge\n- - r6id.24xlarge\n- - r6id.32xlarge\n- - x1.16xlarge\n- - x1.32xlarge\n- - x1e.xlarge\n- - x1e.2xlarge\n- - x1e.4xlarge\n- - x1e.8xlarge\n- - x1e.16xlarge\n- - x1e.32xlarge\n- - x2idn.16xlarge\n- - x2idn.24xlarge\n- - x2idn.32xlarge\n- - x2iedn.xlarge\n- - x2iedn.2xlarge\n- - x2iedn.4xlarge\n- - x2iedn.8xlarge\n- - x2iedn.16xlarge\n- - x2iedn.24xlarge\n- - x2iedn.32xlarge\n- - x2iezn.2xlarge\n- - x2iezn.4xlarge\n- - x2iezn.6xlarge\n- - x2iezn.8xlarge\n- - x2iezn.12xlarge\n- - d2.xlarge\n- - d2.2xlarge\n- - d2.4xlarge\n- - d2.8xlarge\n- - d3.xlarge\n- - d3.2xlarge\n- - d3.4xlarge\n- - d3.8xlarge\n- - d3en.xlarge\n- - d3en.2xlarge\n- - d3en.4xlarge\n- - d3en.6xlarge\n- - d3en.8xlarge\n- - d3en.12xlarge\n- - dl1.24xlarge\n- - f1.2xlarge\n- - f1.4xlarge\n- - f1.16xlarge\n- - g2.2xlarge\n- - g2.8xlarge\n- - g3.4xlarge\n- - g3.8xlarge\n- - g3.16xlarge\n- - g3s.xlarge\n- - g4ad.xlarge\n- - g4ad.2xlarge\n- - g4ad.4xlarge\n- - g4ad.8xlarge\n- - g4ad.16xlarge\n- - g4dn.xlarge\n- - g4dn.2xlarge\n- - g4dn.4xlarge\n- - g4dn.8xlarge\n- - g4dn.12xlarge\n- - g4dn.16xlarge\n- - g5.xlarge\n- - g5.2xlarge\n- - g5.4xlarge\n- - g5.8xlarge\n- - g5.12xlarge\n- - g5.16xlarge\n- - g5.24xlarge\n- - g5.48xlarge\n- - h1.2xlarge\n- - h1.4xlarge\n- - h1.8xlarge\n- - h1.16xlarge\n- - inf1.xlarge\n- - inf1.2xlarge\n- - inf1.6xlarge\n- - inf1.24xlarge\n- - trn1.2xlarge\n- - trn1.32xlarge\n- - u-3tb1.56xlarge\n- - u-6tb1.56xlarge\n- - u-6tb1.112xlarge\n- - u-9tb1.112xlarge\n- - u-12tb1.112xlarge\n- - u-18tb1.112xlarge\n- - vt1.3xlarge\n- - vt1.6xlarge\n- - vt1.24xlarge\n- - z1d.xlarge\n- - z1d.2xlarge\n- - z1d.3xlarge\n- - z1d.6xlarge\n- - z1d.12xlarge\n- - -------------- Bring-Your-Own-License Only --------------\n- - c3.large\n- - c4.large\n- - c5.metal\n- - c5.large\n- - c5a.large\n- - c5ad.large\n- - c5d.metal\n- - c5d.large\n- - c5n.large\n- - c5n.metal\n- - c6a.large\n- - c6a.metal\n- - c6i.large\n- - c6i.metal\n- - c6id.large\n- - c6id.metal\n- - g4dn.metal\n- - i3.large\n- - i3en.large\n- - i3en.metal\n- - i4i.large\n- - i4i.metal\n- - m3.large\n- - m3.medium\n- - m4.large\n- - m5.metal\n- - m5.large\n- - m5a.large\n- - m5ad.large\n- - m5d.metal\n- - m5d.large\n- - m5zn.large\n- - m5zn.metal\n- - m5n.large\n- - m5n.metal\n- - m5dn.large\n- - m5dn.metal\n- - m6a.large\n- - m6a.metal\n- - m6i.large\n- - m6i.metal\n- - m6id.large\n- - m6id.metal\n- - r3.large\n- - r4.large\n- - r5.metal\n- - r5.large\n- - r5a.large\n- - r5d.metal\n- - r5ad.large\n- - r5d.large\n- - r5dn.large\n- - r5dn.metal\n- - r5b.large\n- - r5b.metal\n- - r5n.large\n- - r5n.metal\n- - r6a.large\n- - r6a.metal\n- - r6i.large\n- - r6i.metal\n- - r6id.large\n- - r6id.metal\n- - t2.2xlarge\n- - t2.large\n- - t2.medium\n- - t2.micro\n- - t2.nano\n- - t2.small\n- - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n@@ -564,18 +150,6 @@\n - t3.nano\n - t3.small\n - t3.xlarge\n- - t3a.2xlarge\n- - t3a.large\n- - t3a.medium\n- - t3a.micro\n- - t3a.nano\n- - t3a.small\n- - t3a.xlarge\n- - x2idn.metal\n- - x2iedn.metal\n- - x2iezn.metal\n- - z1d.metal\n- - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n@@ -627,6 +201,14 @@\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n+ ExternalAccessCidrIP:\n+ Description: A CIDR IP range to allow external access from\n+ Type: String\n+ Default: 54.76.254.148/32\n+ ECSSecurityGroup:\n+ Description: the security group the ECS cluster is in\n+ Type: 'AWS::EC2::SecurityGroup::Id'\n+\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n@@ -875,6 +457,8 @@\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n@@ -917,6 +501,8 @@\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n@@ -937,6 +523,8 @@\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n@@ -979,6 +567,8 @@\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n@@ -999,6 +589,8 @@\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n@@ -1041,6 +633,8 @@\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n@@ -1051,25 +645,37 @@\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n- FromPort: '22'\n- ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7999'\n+ ToPort: '7999'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n@@ -1089,19 +695,37 @@\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ InternalElbSecurityGroup:\n+ Type: 'AWS::EC2::SecurityGroup'\n+ Properties:\n+ GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n+ VpcId: !Ref VPC\n+ SecurityGroupIngress:\n+ - IpProtocol: tcp\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n LaunchConfig1:\n Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n@@ -1578,6 +1202,27 @@\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n+ MarklogicExternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n@@ -1696,6 +1341,72 @@\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n+ MarklogicExternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - Alb\n+ - MarklogicExternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicExternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref Alb\n+ Port: 8011\n+ Protocol: HTTP\n+ #Application Load Balancer description for MultiZone deployments (3 zones).\n+ InternalAlb:\n+ Condition: MultiZone\n+ Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n+ DependsOn:\n+ - InternalElbSecurityGroup\n+ Properties: \n+ Scheme: internal\n+ SecurityGroups: \n+ - !Ref InternalElbSecurityGroup\n+ Subnets:\n+ - !Ref PrivateSubnet1\n+ - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n+ - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n+ Metadata:\n+ 'AWS::CloudFormation::Designer':\n+ id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n+ #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n+ #Health checks are performed on each TargetGroup.\n+ MarklogicInternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n+ MarklogicInternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - InternalAlb\n+ - MarklogicInternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicInternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref InternalAlb\n+ Port: 8011\n+ Protocol: HTTP\n Outputs:\n URL:\n Description: The URL of the MarkLogic Cluster\nError: (none)\nExit Code: 1\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35485"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:47:15.938Z",
|
||
"resultDisplay": "--- mlcluster.template.base 2026-01-22 17:47:15\n+++ mlcluster.template.dxw-11 2026-01-22 17:47:15\n@@ -32,6 +32,8 @@\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n+ - ExternalAccessCidrIP\n+ - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n@@ -90,6 +92,10 @@\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n+ ExternalAccessCidrIP:\n+ default: External IP address range for access to admin site\n+ ECSSecurityGroup:\n+ default: the security group the ecs cluster is in\n Parameters:\n # resource configuration\n IAMRole:\n@@ -100,7 +106,7 @@\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n- Default: '10'\n+ Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n@@ -108,7 +114,7 @@\n - standard\n - gp2\n - gp3\n- Default: gp2\n+ Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n@@ -135,428 +141,8 @@\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n- Default: r5.4xlarge\n+ Default: t3.small\n AllowedValues:\n- - ---- Essential Enterprise and Bring-Your-Own-License ----\n- - c3.xlarge\n- - c3.2xlarge\n- - c3.4xlarge\n- - c3.8xlarge\n- - c4.xlarge\n- - c4.2xlarge\n- - c4.4xlarge\n- - c4.8xlarge\n- - c5.xlarge\n- - c5.2xlarge\n- - c5.4xlarge\n- - c5.9xlarge\n- - c5.12xlarge\n- - c5.18xlarge\n- - c5.24xlarge\n- - c5a.xlarge\n- - c5a.2xlarge\n- - c5a.4xlarge\n- - c5a.8xlarge\n- - c5a.12xlarge\n- - c5a.16xlarge\n- - c5a.24xlarge\n- - c5ad.xlarge\n- - c5ad.2xlarge\n- - c5ad.4xlarge\n- - c5ad.8xlarge\n- - c5ad.12xlarge\n- - c5ad.16xlarge\n- - c5ad.24xlarge\n- - c5d.xlarge\n- - c5d.2xlarge\n- - c5d.4xlarge\n- - c5d.9xlarge\n- - c5d.12xlarge\n- - c5d.18xlarge\n- - c5d.24xlarge\n- - c5n.xlarge\n- - c5n.2xlarge\n- - c5n.4xlarge\n- - c5n.9xlarge\n- - c5n.18xlarge\n- - c6a.xlarge\n- - c6a.2xlarge\n- - c6a.4xlarge\n- - c6a.8xlarge\n- - c6a.12xlarge\n- - c6a.16xlarge\n- - c6a.24xlarge\n- - c6a.32xlarge\n- - c6a.48xlarge\n- - c6i.xlarge\n- - c6i.2xlarge\n- - c6i.4xlarge\n- - c6i.8xlarge\n- - c6i.12xlarge\n- - c6i.16xlarge\n- - c6i.24xlarge\n- - c6i.32xlarge\n- - c6id.xlarge\n- - c6id.2xlarge\n- - c6id.4xlarge\n- - c6id.8xlarge\n- - c6id.12xlarge\n- - c6id.16xlarge\n- - c6id.24xlarge\n- - c6id.32xlarge\n- - cc2.8xlarge\n- - i2.2xlarge\n- - i2.4xlarge\n- - i2.8xlarge\n- - i2.xlarge\n- - i3.xlarge\n- - i3.2xlarge\n- - i3.4xlarge\n- - i3.8xlarge\n- - i3.16xlarge\n- - i3en.xlarge\n- - i3en.2xlarge\n- - i3en.3xlarge\n- - i3en.6xlarge\n- - i3en.12xlarge\n- - i3en.24xlarge\n- - i4i.xlarge\n- - i4i.2xlarge\n- - i4i.4xlarge\n- - i4i.8xlarge\n- - i4i.16xlarge\n- - i4i.32xlarge\n- - m3.xlarge\n- - m3.2xlarge\n- - m4.xlarge\n- - m4.2xlarge\n- - m4.4xlarge\n- - m4.10xlarge\n- - m4.16xlarge\n- - m5.xlarge\n- - m5.2xlarge\n- - m5.4xlarge\n- - m5.8xlarge\n- - m5.12xlarge\n- - m5.16xlarge\n- - m5.24xlarge\n- - m5a.xlarge\n- - m5a.2xlarge\n- - m5a.4xlarge\n- - m5a.8xlarge\n- - m5a.12xlarge\n- - m5a.16xlarge\n- - m5a.24xlarge\n- - m5d.xlarge\n- - m5d.2xlarge\n- - m5d.4xlarge\n- - m5d.8xlarge\n- - m5d.16xlarge\n- - m5d.12xlarge\n- - m5d.24xlarge\n- - m5ad.xlarge\n- - m5ad.2xlarge\n- - m5ad.4xlarge\n- - m5ad.8xlarge\n- - m5ad.12xlarge\n- - m5ad.16xlarge\n- - m5ad.24xlarge\n- - m5zn.xlarge\n- - m5zn.2xlarge\n- - m5zn.3xlarge\n- - m5zn.6xlarge\n- - m5zn.12xlarge\n- - m5n.xlarge\n- - m5n.2xlarge\n- - m5n.4xlarge\n- - m5n.8xlarge\n- - m5n.12xlarge\n- - m5n.16xlarge\n- - m5n.24xlarge\n- - m5dn.xlarge\n- - m5dn.2xlarge\n- - m5dn.4xlarge\n- - m5dn.8xlarge\n- - m5dn.12xlarge\n- - m5dn.16xlarge\n- - m5dn.24xlarge\n- - m6a.xlarge\n- - m6a.2xlarge\n- - m6a.4xlarge\n- - m6a.8xlarge\n- - m6a.12xlarge\n- - m6a.16xlarge\n- - m6a.24xlarge\n- - m6a.32xlarge\n- - m6a.48xlarge\n- - m6i.xlarge\n- - m6i.2xlarge\n- - m6i.4xlarge\n- - m6i.8xlarge\n- - m6i.12xlarge\n- - m6i.16xlarge\n- - m6i.24xlarge\n- - m6i.32xlarge\n- - m6id.xlarge\n- - m6id.2xlarge\n- - m6id.4xlarge\n- - m6id.8xlarge\n- - m6id.12xlarge\n- - m6id.16xlarge\n- - m6id.24xlarge\n- - m6id.32xlarge\n- - p2.xlarge\n- - p2.8xlarge\n- - p2.16xlarge\n- - p3.2xlarge\n- - p3.8xlarge\n- - p3.16xlarge\n- - p3dn.24xlarge\n- - p4d.24xlarge\n- - r3.xlarge\n- - r3.2xlarge\n- - r3.4xlarge\n- - r3.8xlarge\n- - r4.xlarge\n- - r4.2xlarge\n- - r4.4xlarge\n- - r4.8xlarge\n- - r4.16xlarge\n- - r5.xlarge\n- - r5.2xlarge\n- - r5.4xlarge\n- - r5.8xlarge\n- - r5.12xlarge\n- - r5.16xlarge\n- - r5.24xlarge\n- - r5a.xlarge\n- - r5a.2xlarge\n- - r5a.4xlarge\n- - r5a.8xlarge\n- - r5a.12xlarge\n- - r5a.16xlarge\n- - r5a.24xlarge\n- - r5ad.xlarge\n- - r5ad.2xlarge\n- - r5ad.4xlarge\n- - r5ad.8xlarge\n- - r5ad.12xlarge\n- - r5ad.16xlarge\n- - r5ad.24xlarge\n- - r5b.xlarge\n- - r5b.2xlarge\n- - r5b.4xlarge\n- - r5b.8xlarge\n- - r5b.12xlarge\n- - r5b.16xlarge\n- - r5b.24xlarge\n- - r5d.xlarge\n- - r5d.2xlarge\n- - r5d.4xlarge\n- - r5d.8xlarge\n- - r5d.12xlarge\n- - r5d.16xlarge\n- - r5d.24xlarge\n- - r5dn.xlarge\n- - r5dn.2xlarge\n- - r5dn.4xlarge\n- - r5dn.8xlarge\n- - r5dn.12xlarge\n- - r5dn.16xlarge\n- - r5dn.24xlarge\n- - r5n.xlarge\n- - r5n.2xlarge\n- - r5n.4xlarge\n- - r5n.8xlarge\n- - r5n.12xlarge\n- - r5n.16xlarge\n- - r5n.24xlarge\n- - r6a.xlarge\n- - r6a.2xlarge\n- - r6a.4xlarge\n- - r6a.8xlarge\n- - r6a.12xlarge\n- - r6a.16xlarge\n- - r6a.24xlarge\n- - r6a.32xlarge\n- - r6a.48xlarge\n- - r6i.xlarge\n- - r6i.2xlarge\n- - r6i.4xlarge\n- - r6i.8xlarge\n- - r6i.12xlarge\n- - r6i.16xlarge\n- - r6i.24xlarge\n- - r6i.32xlarge\n- - r6id.xlarge\n- - r6id.2xlarge\n- - r6id.4xlarge\n- - r6id.8xlarge\n- - r6id.12xlarge\n- - r6id.16xlarge\n- - r6id.24xlarge\n- - r6id.32xlarge\n- - x1.16xlarge\n- - x1.32xlarge\n- - x1e.xlarge\n- - x1e.2xlarge\n- - x1e.4xlarge\n- - x1e.8xlarge\n- - x1e.16xlarge\n- - x1e.32xlarge\n- - x2idn.16xlarge\n- - x2idn.24xlarge\n- - x2idn.32xlarge\n- - x2iedn.xlarge\n- - x2iedn.2xlarge\n- - x2iedn.4xlarge\n- - x2iedn.8xlarge\n- - x2iedn.16xlarge\n- - x2iedn.24xlarge\n- - x2iedn.32xlarge\n- - x2iezn.2xlarge\n- - x2iezn.4xlarge\n- - x2iezn.6xlarge\n- - x2iezn.8xlarge\n- - x2iezn.12xlarge\n- - d2.xlarge\n- - d2.2xlarge\n- - d2.4xlarge\n- - d2.8xlarge\n- - d3.xlarge\n- - d3.2xlarge\n- - d3.4xlarge\n- - d3.8xlarge\n- - d3en.xlarge\n- - d3en.2xlarge\n- - d3en.4xlarge\n- - d3en.6xlarge\n- - d3en.8xlarge\n- - d3en.12xlarge\n- - dl1.24xlarge\n- - f1.2xlarge\n- - f1.4xlarge\n- - f1.16xlarge\n- - g2.2xlarge\n- - g2.8xlarge\n- - g3.4xlarge\n- - g3.8xlarge\n- - g3.16xlarge\n- - g3s.xlarge\n- - g4ad.xlarge\n- - g4ad.2xlarge\n- - g4ad.4xlarge\n- - g4ad.8xlarge\n- - g4ad.16xlarge\n- - g4dn.xlarge\n- - g4dn.2xlarge\n- - g4dn.4xlarge\n- - g4dn.8xlarge\n- - g4dn.12xlarge\n- - g4dn.16xlarge\n- - g5.xlarge\n- - g5.2xlarge\n- - g5.4xlarge\n- - g5.8xlarge\n- - g5.12xlarge\n- - g5.16xlarge\n- - g5.24xlarge\n- - g5.48xlarge\n- - h1.2xlarge\n- - h1.4xlarge\n- - h1.8xlarge\n- - h1.16xlarge\n- - inf1.xlarge\n- - inf1.2xlarge\n- - inf1.6xlarge\n- - inf1.24xlarge\n- - trn1.2xlarge\n- - trn1.32xlarge\n- - u-3tb1.56xlarge\n- - u-6tb1.56xlarge\n- - u-6tb1.112xlarge\n- - u-9tb1.112xlarge\n- - u-12tb1.112xlarge\n- - u-18tb1.112xlarge\n- - vt1.3xlarge\n- - vt1.6xlarge\n- - vt1.24xlarge\n- - z1d.xlarge\n- - z1d.2xlarge\n- - z1d.3xlarge\n- - z1d.6xlarge\n- - z1d.12xlarge\n- - -------------- Bring-Your-Own-License Only --------------\n- - c3.large\n- - c4.large\n- - c5.metal\n- - c5.large\n- - c5a.large\n- - c5ad.large\n- - c5d.metal\n- - c5d.large\n- - c5n.large\n- - c5n.metal\n- - c6a.large\n- - c6a.metal\n- - c6i.large\n- - c6i.metal\n- - c6id.large\n- - c6id.metal\n- - g4dn.metal\n- - i3.large\n- - i3en.large\n- - i3en.metal\n- - i4i.large\n- - i4i.metal\n- - m3.large\n- - m3.medium\n- - m4.large\n- - m5.metal\n- - m5.large\n- - m5a.large\n- - m5ad.large\n- - m5d.metal\n- - m5d.large\n- - m5zn.large\n- - m5zn.metal\n- - m5n.large\n- - m5n.metal\n- - m5dn.large\n- - m5dn.metal\n- - m6a.large\n- - m6a.metal\n- - m6i.large\n- - m6i.metal\n- - m6id.large\n- - m6id.metal\n- - r3.large\n- - r4.large\n- - r5.metal\n- - r5.large\n- - r5a.large\n- - r5d.metal\n- - r5ad.large\n- - r5d.large\n- - r5dn.large\n- - r5dn.metal\n- - r5b.large\n- - r5b.metal\n- - r5n.large\n- - r5n.metal\n- - r6a.large\n- - r6a.metal\n- - r6i.large\n- - r6i.metal\n- - r6id.large\n- - r6id.metal\n- - t2.2xlarge\n- - t2.large\n- - t2.medium\n- - t2.micro\n- - t2.nano\n- - t2.small\n- - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n@@ -564,18 +150,6 @@\n - t3.nano\n - t3.small\n - t3.xlarge\n- - t3a.2xlarge\n- - t3a.large\n- - t3a.medium\n- - t3a.micro\n- - t3a.nano\n- - t3a.small\n- - t3a.xlarge\n- - x2idn.metal\n- - x2iedn.metal\n- - x2iezn.metal\n- - z1d.metal\n- - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n@@ -627,6 +201,14 @@\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n+ ExternalAccessCidrIP:\n+ Description: A CIDR IP range to allow external access from\n+ Type: String\n+ Default: 54.76.254.148/32\n+ ECSSecurityGroup:\n+ Description: the security group the ECS cluster is in\n+ Type: 'AWS::EC2::SecurityGroup::Id'\n+\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n@@ -875,6 +457,8 @@\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n@@ -917,6 +501,8 @@\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n@@ -937,6 +523,8 @@\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n@@ -979,6 +567,8 @@\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n@@ -999,6 +589,8 @@\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n@@ -1041,6 +633,8 @@\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n@@ -1051,25 +645,37 @@\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n- FromPort: '22'\n- ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7999'\n+ ToPort: '7999'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n@@ -1089,19 +695,37 @@\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ InternalElbSecurityGroup:\n+ Type: 'AWS::EC2::SecurityGroup'\n+ Properties:\n+ GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n+ VpcId: !Ref VPC\n+ SecurityGroupIngress:\n+ - IpProtocol: tcp\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n LaunchConfig1:\n Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n@@ -1578,6 +1202,27 @@\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n+ MarklogicExternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n@@ -1696,6 +1341,72 @@\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n+ MarklogicExternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - Alb\n+ - MarklogicExternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicExternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref Alb\n+ Port: 8011\n+ Protocol: HTTP\n+ #Application Load Balancer description for MultiZone deployments (3 zones).\n+ InternalAlb:\n+ Condition: MultiZone\n+ Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n+ DependsOn:\n+ - InternalElbSecurityGroup\n+ Properties: \n+ Scheme: internal\n+ SecurityGroups: \n+ - !Ref InternalElbSecurityGroup\n+ Subnets:\n+ - !Ref PrivateSubnet1\n+ - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n+ - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n+ Metadata:\n+ 'AWS::CloudFormation::Designer':\n+ id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n+ #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n+ #Health checks are performed on each TargetGroup.\n+ MarklogicInternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n+ MarklogicInternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - InternalAlb\n+ - MarklogicInternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicInternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref InternalAlb\n+ Port: 8011\n+ Protocol: HTTP\n Outputs:\n URL:\n Description: The URL of the MarkLogic Cluster",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "13aabd24-69b6-41c8-bd70-d9b012b121d2",
|
||
"timestamp": "2026-01-22T17:47:22.948Z",
|
||
"type": "gemini",
|
||
"content": "I've identified the changes in `mlcluster.template` from `dxw-11`, which focus on CIDR restrictions, internal/external load balancer updates for port 8011, and volume defaults. I'll now apply these functional improvements to `master`'s `mlcluster.template`, adapting to its `LaunchTemplate` usage while preserving its expanded `InstanceType` options. I'll also check `mlcluster-vpc.template` for similar modifications.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Reviewing Infrastructure Updates",
|
||
"description": "I'm focused on the changes in `mlcluster.template`. I've noted the addition of `ExternalAccessCidrIP` and `ECSSecurityGroup` metadata and parameters. I also observed the adjustments to `VolumeSize`, `VolumeType`, and `InstanceType` defaults and allowed values. Finally, I've taken note of the new target groups and listeners for Marklogic ports 8011.",
|
||
"timestamp": "2026-01-22T17:47:20.553Z"
|
||
},
|
||
{
|
||
"subject": "Considering Next Steps",
|
||
"description": "I've digested the changes in `mlcluster.template` and now I'm formulating a plan. The goal is to migrate these changes into the `master` version, accounting for its `LaunchTemplate` usage and extended instance type options. The primary updates seem to focus on external access restrictions via CIDR, setting up an internal load balancer for port 8011, and some default value adjustments. My next task will be reviewing `mlcluster-vpc.template` for parallel modifications.",
|
||
"timestamp": "2026-01-22T17:47:22.682Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 56431,
|
||
"output": 143,
|
||
"cached": 45054,
|
||
"thoughts": 371,
|
||
"tool": 0,
|
||
"total": 56945
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104042945-e38db03c1f2f68",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"command": "git diff master dxw-11 mlcluster-vpc.template",
|
||
"description": "Compare mlcluster-vpc.template between master and dxw-11."
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104042945-e38db03c1f2f68",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git diff master dxw-11 mlcluster-vpc.template\nDirectory: (root)\nOutput: diff --git a/mlcluster-vpc.template b/mlcluster-vpc.template\nindex cc6ba5d..4b25578 100644\n--- a/mlcluster-vpc.template\n+++ b/mlcluster-vpc.template\n@@ -1,8 +1,8 @@\n AWSTemplateFormatVersion: 2010-09-09\n Description: Deploy a MarkLogic Cluster on AWS with a new VPC\n Metadata:\n- version: 12.0.1\n- binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n+ version: 11.0.2\n+ binary: MarkLogic-11.0.2-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n@@ -137,7 +137,7 @@ Parameters:\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n- - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n+ - ---- Essential Enterprise and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n@@ -204,45 +204,7 @@ Parameters:\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n- - c7i.xlarge\n- - c7i.2xlarge\n- - c7i.4xlarge\n- - c7i.8xlarge\n- - c7i.12xlarge\n- - c7i.16xlarge\n- - c7i.24xlarge\n- - c7i.48xlarge\n- - c7i-flex.xlarge\n- - c7i-flex.2xlarge\n- - c7i-flex.4xlarge\n- - c7i-flex.8xlarge\n- - c7i-flex.12xlarge\n- - c7i-flex.16xlarge\n- - c7a.xlarge\n- - c7a.2xlarge\n- - c7a.4xlarge\n- - c7a.8xlarge\n- - c7a.12xlarge\n- - c7a.16xlarge\n- - c7a.24xlarge\n- - c7a.32xlarge\n- - c7a.48xlarge\n- - c8i.xlarge\n- - c8i.2xlarge\n- - c8i.4xlarge\n- - c8i.8xlarge\n- - c8i.12xlarge\n- - c8i.16xlarge\n- - c8i.24xlarge\n- - c8i.32xlarge\n- - c8i.48xlarge\n- - c8i.96xlarge\n- - c8i-flex.xlarge\n- - c8i-flex.2xlarge\n- - c8i-flex.4xlarge\n- - c8i-flex.8xlarge\n- - c8i-flex.12xlarge\n- - c8i-flex.16xlarge\n+ - cc2.8xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n@@ -262,18 +224,8 @@ Parameters:\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n- - i4i.12xlarge\n - i4i.16xlarge\n- - i4i.24xlarge\n - i4i.32xlarge\n- - i7ie.xlarge\n- - i7ie.2xlarge\n- - i7ie.3xlarge\n- - i7ie.6xlarge\n- - i7ie.12xlarge\n- - i7ie.18xlarge\n- - i7ie.24xlarge\n- - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n@@ -353,53 +305,14 @@ Parameters:\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n- - m7i.xlarge\n- - m7i.2xlarge\n- - m7i.4xlarge\n- - m7i.8xlarge\n- - m7i.12xlarge\n- - m7i.16xlarge\n- - m7i.24xlarge\n- - m7i.48xlarge\n- - m7i-flex.xlarge\n- - m7i-flex.2xlarge\n- - m7i-flex.4xlarge\n- - m7i-flex.8xlarge\n- - m7i-flex.12xlarge\n- - m7i-flex.16xlarge\n- - m7a.xlarge\n- - m7a.2xlarge\n- - m7a.4xlarge\n- - m7a.8xlarge\n- - m7a.12xlarge\n- - m7a.16xlarge\n- - m7a.24xlarge\n- - m7a.32xlarge\n- - m7a.48xlarge\n- - m8a.xlarge\n- - m8a.2xlarge\n- - m8a.4xlarge\n- - m8a.8xlarge\n- - m8a.12xlarge\n- - m8a.16xlarge\n- - m8a.24xlarge\n- - m8a.48xlarge\n- - m8i.xlarge\n- - m8i.2xlarge\n- - m8i.4xlarge\n- - m8i.8xlarge\n- - m8i.12xlarge\n- - m8i.16xlarge\n- - m8i.24xlarge\n- - m8i.32xlarge\n- - m8i.48xlarge\n- - m8i.96xlarge\n- - m8i-flex.xlarge\n- - m8i-flex.2xlarge\n- - m8i-flex.4xlarge\n- - m8i-flex.8xlarge\n- - m8i-flex.12xlarge\n- - m8i-flex.16xlarge\n+ - p2.xlarge\n+ - p2.8xlarge\n+ - p2.16xlarge\n+ - p3.2xlarge\n+ - p3.8xlarge\n+ - p3.16xlarge\n+ - p3dn.24xlarge\n+ - p4d.24xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n@@ -483,54 +396,6 @@ Parameters:\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n- - r7i.xlarge\n- - r7i.2xlarge\n- - r7i.4xlarge\n- - r7i.8xlarge\n- - r7i.12xlarge\n- - r7i.16xlarge\n- - r7i.24xlarge\n- - r7i.48xlarge\n- - r7iz.xlarge\n- - r7iz.2xlarge\n- - r7iz.4xlarge\n- - r7iz.8xlarge\n- - r7iz.12xlarge\n- - r7iz.16xlarge\n- - r7iz.32xlarge\n- - r7a.xlarge\n- - r7a.2xlarge\n- - r7a.4xlarge\n- - r7a.8xlarge\n- - r7a.12xlarge\n- - r7a.16xlarge\n- - r7a.24xlarge\n- - r7a.32xlarge\n- - r7a.48xlarge\n- - r8a.xlarge\n- - r8a.2xlarge\n- - r8a.4xlarge\n- - r8a.8xlarge\n- - r8a.12xlarge\n- - r8a.16xlarge\n- - r8a.24xlarge\n- - r8a.48xlarge\n- - r8i.xlarge\n- - r8i.2xlarge\n- - r8i.4xlarge\n- - r8i.8xlarge\n- - r8i.12xlarge\n- - r8i.16xlarge\n- - r8i.24xlarge\n- - r8i.32xlarge\n- - r8i.48xlarge\n- - r8i.96xlarge\n- - r8i-flex.xlarge\n- - r8i-flex.2xlarge\n- - r8i-flex.4xlarge\n- - r8i-flex.8xlarge\n- - r8i-flex.12xlarge\n- - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n@@ -569,6 +434,34 @@ Parameters:\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n+ - f1.2xlarge\n+ - f1.4xlarge\n+ - f1.16xlarge\n+ - g2.2xlarge\n+ - g2.8xlarge\n+ - g3.4xlarge\n+ - g3.8xlarge\n+ - g3.16xlarge\n+ - g3s.xlarge\n+ - g4ad.xlarge\n+ - g4ad.2xlarge\n+ - g4ad.4xlarge\n+ - g4ad.8xlarge\n+ - g4ad.16xlarge\n+ - g4dn.xlarge\n+ - g4dn.2xlarge\n+ - g4dn.4xlarge\n+ - g4dn.8xlarge\n+ - g4dn.12xlarge\n+ - g4dn.16xlarge\n+ - g5.xlarge\n+ - g5.2xlarge\n+ - g5.4xlarge\n+ - g5.8xlarge\n+ - g5.12xlarge\n+ - g5.16xlarge\n+ - g5.24xlarge\n+ - g5.48xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n@@ -610,26 +503,12 @@ Parameters:\n - c6i.metal\n - c6id.large\n - c6id.metal\n- - c7i.large\n- - c7i.metal-24xl\n- - c7i.metal-48xl\n- - c7i-flex.large\n- - c7a.medium\n- - c7a.large\n- - c7a.metal-48xl\n- - c8i.large\n- - c8i.metal-48xl\n- - c8i.metal-96xl\n- - c8i-flex.large\n+ - g4dn.metal\n - i3.large\n- - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n- - i7ie.large\n- - i7ie.metal-24xl\n- - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n@@ -651,21 +530,6 @@ Parameters:\n - m6i.metal\n - m6id.large\n - m6id.metal\n- - m7i.large\n- - m7i.metal-24xl\n- - m7i.metal-48xl\n- - m7i-flex.large\n- - m7a.medium\n- - m7a.large\n- - m7a.metal-48xl\n- - m8a.medium\n- - m8a.large\n- - m8a.metal-24xl\n- - m8a.metal-48xl\n- - m8i.large\n- - m8i.metal-48xl\n- - m8i.metal-96xl\n- - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n@@ -686,23 +550,6 @@ Parameters:\n - r6i.metal\n - r6id.large\n - r6id.metal\n- - r7i.large\n- - r7i.metal-24xl\n- - r7i.metal-48xl\n- - r7iz.large\n- - r7iz.metal-16xl\n- - r7iz.metal-32xl\n- - r7a.medium\n- - r7a.large\n- - r7a.metal-48xl\n- - r8a.medium\n- - r8a.large\n- - r8a.metal-24xl\n- - r8a.metal-48xl\n- - r8i.large\n- - r8i.metal-48xl\n- - r8i.metal-96xl\n- - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n@@ -739,7 +586,7 @@ Parameters:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance.\n Type: String\n NumberOfZones:\n- Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n+ Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer. \n Type: Number\n AllowedValues:\n - 1\n@@ -820,11 +667,11 @@ Parameters:\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n- Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n- Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n Conditions:\n@@ -836,7 +683,7 @@ Conditions:\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone: !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n- PAYG: !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n+ EssentialEnterprise: !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\n@@ -847,53 +694,53 @@ Mappings:\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n- base: '12.0.1'\n+ base: '11.0.2'\n LicenseRegion2AMI:\n us-east-1:\n- PAYGAl2023: ami-0198b8931e9597271\n- BYOLAl2023: ami-0a8536507241f95b0\n+ Enterprise: ami-0bf7e657fab67e971\n+ BYOL: ami-07d160aaa381d98d3\n us-east-2:\n- PAYGAl2023: ami-0877b64dae8264415\n- BYOLAl2023: ami-082cc98b2c01e486a\n+ Enterprise: ami-0b364b6c340494cde\n+ BYOL: ami-02fc4c59b1e0f84fc\n us-west-1:\n- PAYGAl2023: ami-07890fc78f4ddfa20\n- BYOLAl2023: ami-05c9a962410c2821b\n+ Enterprise: ami-0427f5f4c4ec4fb1a\n+ BYOL: ami-0db1c9ca54f60c93a\n us-west-2:\n- PAYGAl2023: ami-0577eb149c9e0f53f\n- BYOLAl2023: ami-0262dd8d014bf71ba\n+ Enterprise: ami-0f4226d039f3538a4\n+ BYOL: ami-036d6f6629eeae6ae\n eu-central-1:\n- PAYGAl2023: ami-06348556399c8ab69\n- BYOLAl2023: ami-00cb5a3527e7c0d11\n+ Enterprise: ami-0adde7fcee8e0abac\n+ BYOL: ami-0175f20a0ff9b2b41\n eu-west-1:\n- PAYGAl2023: ami-0fa7bc44cd9ab1f85\n- BYOLAl2023: ami-0bc2b4d46367806b0\n+ Enterprise: ami-0adad0df164f5d3d2\n+ BYOL: ami-0162fd6fe0c778804\n ap-south-1:\n- PAYGAl2023: ami-0f481ba0a6819ced6\n- BYOLAl2023: ami-00b59374107e5efb6\n+ Enterprise: ami-05cb78bc62095559e\n+ BYOL: ami-0b6472e5b25075c3a\n ap-southeast-1:\n- PAYGAl2023: ami-0c373c6c8a2316c80\n- BYOLAl2023: ami-0b9bd265ef165a07b\n+ Enterprise: ami-0ace4c492256d582b\n+ BYOL: ami-0337694124652af4a\n ap-southeast-2:\n- PAYGAl2023: ami-0c65a907408226a3e\n- BYOLAl2023: ami-02bad1ef2c6d4a91a\n+ Enterprise: ami-09b42852706d80f61\n+ BYOL: ami-03d830bd349cddcbc\n ap-northeast-1:\n- PAYGAl2023: ami-0254bc4adaf13e3b9\n- BYOLAl2023: ami-07e8b312b1016bf67\n+ Enterprise: ami-0860fd2cf7c494dfc\n+ BYOL: ami-0f810574accbd33b2\n ap-northeast-2:\n- PAYGAl2023: ami-05995b5f5807873d7\n- BYOLAl2023: ami-0afd77ba0d7a0c129\n+ Enterprise: ami-09e07ba03b2662e4b\n+ BYOL: ami-04f97692a8557b493\n sa-east-1:\n- PAYGAl2023: ami-05ec8fee12de236a5\n- BYOLAl2023: ami-09d883ea308449555\n+ Enterprise: ami-0b94055f72e2d3a30\n+ BYOL: ami-00aadd4fc8a06eeff\n eu-west-2:\n- PAYGAl2023: ami-0f5cff9d243f31521\n- BYOLAl2023: ami-0588d104a52fbc326\n+ Enterprise: ami-01da8900f033938cb\n+ BYOL: ami-016eaaa73edae05a9\n ca-central-1:\n- PAYGAl2023: ami-0f34d118b23b51bf5\n- BYOLAl2023: ami-0c78eccd03e957005\n+ Enterprise: ami-0229c2f9c0da8bfb4\n+ BYOL: ami-083a7db6e6afd6067\n eu-west-3:\n- PAYGAl2023: ami-01fa9155eb17992c5\n- BYOLAl2023: ami-0637199acc5327534\n+ Enterprise: ami-0ac4d1b01ef025708\n+ BYOL: ami-0b44d169075494c13\n Resources:\n VpcStack:\n Type: AWS::CloudFormation::Stack\n@@ -1034,9 +881,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet1Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1089,9 +934,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet1Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1154,9 +997,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet2Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp2\n- Version: !GetAtt LaunchTemp2.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig2\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1219,9 +1060,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet3Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp3\n- Version: !GetAtt LaunchTemp3.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig3\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1324,290 +1163,272 @@ Resources:\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n- LaunchTemp1:\n- Type: 'AWS::EC2::LaunchTemplate'\n+ LaunchConfig1:\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume1\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeA#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume1\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeA#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=1\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=1\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n- LaunchTemp2:\n+ LaunchConfig2:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume2\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeB#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume2\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeB#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n- LaunchTemp3:\n+ LaunchConfig3:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume3\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeC#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume3\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeC#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35523"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:47:23.814Z",
|
||
"resultDisplay": "diff --git a/mlcluster-vpc.template b/mlcluster-vpc.template\nindex cc6ba5d..4b25578 100644\n--- a/mlcluster-vpc.template\n+++ b/mlcluster-vpc.template\n@@ -1,8 +1,8 @@\n AWSTemplateFormatVersion: 2010-09-09\n Description: Deploy a MarkLogic Cluster on AWS with a new VPC\n Metadata:\n- version: 12.0.1\n- binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n+ version: 11.0.2\n+ binary: MarkLogic-11.0.2-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n@@ -137,7 +137,7 @@ Parameters:\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n- - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n+ - ---- Essential Enterprise and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n@@ -204,45 +204,7 @@ Parameters:\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n- - c7i.xlarge\n- - c7i.2xlarge\n- - c7i.4xlarge\n- - c7i.8xlarge\n- - c7i.12xlarge\n- - c7i.16xlarge\n- - c7i.24xlarge\n- - c7i.48xlarge\n- - c7i-flex.xlarge\n- - c7i-flex.2xlarge\n- - c7i-flex.4xlarge\n- - c7i-flex.8xlarge\n- - c7i-flex.12xlarge\n- - c7i-flex.16xlarge\n- - c7a.xlarge\n- - c7a.2xlarge\n- - c7a.4xlarge\n- - c7a.8xlarge\n- - c7a.12xlarge\n- - c7a.16xlarge\n- - c7a.24xlarge\n- - c7a.32xlarge\n- - c7a.48xlarge\n- - c8i.xlarge\n- - c8i.2xlarge\n- - c8i.4xlarge\n- - c8i.8xlarge\n- - c8i.12xlarge\n- - c8i.16xlarge\n- - c8i.24xlarge\n- - c8i.32xlarge\n- - c8i.48xlarge\n- - c8i.96xlarge\n- - c8i-flex.xlarge\n- - c8i-flex.2xlarge\n- - c8i-flex.4xlarge\n- - c8i-flex.8xlarge\n- - c8i-flex.12xlarge\n- - c8i-flex.16xlarge\n+ - cc2.8xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n@@ -262,18 +224,8 @@ Parameters:\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n- - i4i.12xlarge\n - i4i.16xlarge\n- - i4i.24xlarge\n - i4i.32xlarge\n- - i7ie.xlarge\n- - i7ie.2xlarge\n- - i7ie.3xlarge\n- - i7ie.6xlarge\n- - i7ie.12xlarge\n- - i7ie.18xlarge\n- - i7ie.24xlarge\n- - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n@@ -353,53 +305,14 @@ Parameters:\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n- - m7i.xlarge\n- - m7i.2xlarge\n- - m7i.4xlarge\n- - m7i.8xlarge\n- - m7i.12xlarge\n- - m7i.16xlarge\n- - m7i.24xlarge\n- - m7i.48xlarge\n- - m7i-flex.xlarge\n- - m7i-flex.2xlarge\n- - m7i-flex.4xlarge\n- - m7i-flex.8xlarge\n- - m7i-flex.12xlarge\n- - m7i-flex.16xlarge\n- - m7a.xlarge\n- - m7a.2xlarge\n- - m7a.4xlarge\n- - m7a.8xlarge\n- - m7a.12xlarge\n- - m7a.16xlarge\n- - m7a.24xlarge\n- - m7a.32xlarge\n- - m7a.48xlarge\n- - m8a.xlarge\n- - m8a.2xlarge\n- - m8a.4xlarge\n- - m8a.8xlarge\n- - m8a.12xlarge\n- - m8a.16xlarge\n- - m8a.24xlarge\n- - m8a.48xlarge\n- - m8i.xlarge\n- - m8i.2xlarge\n- - m8i.4xlarge\n- - m8i.8xlarge\n- - m8i.12xlarge\n- - m8i.16xlarge\n- - m8i.24xlarge\n- - m8i.32xlarge\n- - m8i.48xlarge\n- - m8i.96xlarge\n- - m8i-flex.xlarge\n- - m8i-flex.2xlarge\n- - m8i-flex.4xlarge\n- - m8i-flex.8xlarge\n- - m8i-flex.12xlarge\n- - m8i-flex.16xlarge\n+ - p2.xlarge\n+ - p2.8xlarge\n+ - p2.16xlarge\n+ - p3.2xlarge\n+ - p3.8xlarge\n+ - p3.16xlarge\n+ - p3dn.24xlarge\n+ - p4d.24xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n@@ -483,54 +396,6 @@ Parameters:\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n- - r7i.xlarge\n- - r7i.2xlarge\n- - r7i.4xlarge\n- - r7i.8xlarge\n- - r7i.12xlarge\n- - r7i.16xlarge\n- - r7i.24xlarge\n- - r7i.48xlarge\n- - r7iz.xlarge\n- - r7iz.2xlarge\n- - r7iz.4xlarge\n- - r7iz.8xlarge\n- - r7iz.12xlarge\n- - r7iz.16xlarge\n- - r7iz.32xlarge\n- - r7a.xlarge\n- - r7a.2xlarge\n- - r7a.4xlarge\n- - r7a.8xlarge\n- - r7a.12xlarge\n- - r7a.16xlarge\n- - r7a.24xlarge\n- - r7a.32xlarge\n- - r7a.48xlarge\n- - r8a.xlarge\n- - r8a.2xlarge\n- - r8a.4xlarge\n- - r8a.8xlarge\n- - r8a.12xlarge\n- - r8a.16xlarge\n- - r8a.24xlarge\n- - r8a.48xlarge\n- - r8i.xlarge\n- - r8i.2xlarge\n- - r8i.4xlarge\n- - r8i.8xlarge\n- - r8i.12xlarge\n- - r8i.16xlarge\n- - r8i.24xlarge\n- - r8i.32xlarge\n- - r8i.48xlarge\n- - r8i.96xlarge\n- - r8i-flex.xlarge\n- - r8i-flex.2xlarge\n- - r8i-flex.4xlarge\n- - r8i-flex.8xlarge\n- - r8i-flex.12xlarge\n- - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n@@ -569,6 +434,34 @@ Parameters:\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n+ - f1.2xlarge\n+ - f1.4xlarge\n+ - f1.16xlarge\n+ - g2.2xlarge\n+ - g2.8xlarge\n+ - g3.4xlarge\n+ - g3.8xlarge\n+ - g3.16xlarge\n+ - g3s.xlarge\n+ - g4ad.xlarge\n+ - g4ad.2xlarge\n+ - g4ad.4xlarge\n+ - g4ad.8xlarge\n+ - g4ad.16xlarge\n+ - g4dn.xlarge\n+ - g4dn.2xlarge\n+ - g4dn.4xlarge\n+ - g4dn.8xlarge\n+ - g4dn.12xlarge\n+ - g4dn.16xlarge\n+ - g5.xlarge\n+ - g5.2xlarge\n+ - g5.4xlarge\n+ - g5.8xlarge\n+ - g5.12xlarge\n+ - g5.16xlarge\n+ - g5.24xlarge\n+ - g5.48xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n@@ -610,26 +503,12 @@ Parameters:\n - c6i.metal\n - c6id.large\n - c6id.metal\n- - c7i.large\n- - c7i.metal-24xl\n- - c7i.metal-48xl\n- - c7i-flex.large\n- - c7a.medium\n- - c7a.large\n- - c7a.metal-48xl\n- - c8i.large\n- - c8i.metal-48xl\n- - c8i.metal-96xl\n- - c8i-flex.large\n+ - g4dn.metal\n - i3.large\n- - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n- - i7ie.large\n- - i7ie.metal-24xl\n- - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n@@ -651,21 +530,6 @@ Parameters:\n - m6i.metal\n - m6id.large\n - m6id.metal\n- - m7i.large\n- - m7i.metal-24xl\n- - m7i.metal-48xl\n- - m7i-flex.large\n- - m7a.medium\n- - m7a.large\n- - m7a.metal-48xl\n- - m8a.medium\n- - m8a.large\n- - m8a.metal-24xl\n- - m8a.metal-48xl\n- - m8i.large\n- - m8i.metal-48xl\n- - m8i.metal-96xl\n- - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n@@ -686,23 +550,6 @@ Parameters:\n - r6i.metal\n - r6id.large\n - r6id.metal\n- - r7i.large\n- - r7i.metal-24xl\n- - r7i.metal-48xl\n- - r7iz.large\n- - r7iz.metal-16xl\n- - r7iz.metal-32xl\n- - r7a.medium\n- - r7a.large\n- - r7a.metal-48xl\n- - r8a.medium\n- - r8a.large\n- - r8a.metal-24xl\n- - r8a.metal-48xl\n- - r8i.large\n- - r8i.metal-48xl\n- - r8i.metal-96xl\n- - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n@@ -739,7 +586,7 @@ Parameters:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance.\n Type: String\n NumberOfZones:\n- Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n+ Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer. \n Type: Number\n AllowedValues:\n - 1\n@@ -820,11 +667,11 @@ Parameters:\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n- Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n- Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n Conditions:\n@@ -836,7 +683,7 @@ Conditions:\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone: !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n- PAYG: !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n+ EssentialEnterprise: !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\n@@ -847,53 +694,53 @@ Mappings:\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n- base: '12.0.1'\n+ base: '11.0.2'\n LicenseRegion2AMI:\n us-east-1:\n- PAYGAl2023: ami-0198b8931e9597271\n- BYOLAl2023: ami-0a8536507241f95b0\n+ Enterprise: ami-0bf7e657fab67e971\n+ BYOL: ami-07d160aaa381d98d3\n us-east-2:\n- PAYGAl2023: ami-0877b64dae8264415\n- BYOLAl2023: ami-082cc98b2c01e486a\n+ Enterprise: ami-0b364b6c340494cde\n+ BYOL: ami-02fc4c59b1e0f84fc\n us-west-1:\n- PAYGAl2023: ami-07890fc78f4ddfa20\n- BYOLAl2023: ami-05c9a962410c2821b\n+ Enterprise: ami-0427f5f4c4ec4fb1a\n+ BYOL: ami-0db1c9ca54f60c93a\n us-west-2:\n- PAYGAl2023: ami-0577eb149c9e0f53f\n- BYOLAl2023: ami-0262dd8d014bf71ba\n+ Enterprise: ami-0f4226d039f3538a4\n+ BYOL: ami-036d6f6629eeae6ae\n eu-central-1:\n- PAYGAl2023: ami-06348556399c8ab69\n- BYOLAl2023: ami-00cb5a3527e7c0d11\n+ Enterprise: ami-0adde7fcee8e0abac\n+ BYOL: ami-0175f20a0ff9b2b41\n eu-west-1:\n- PAYGAl2023: ami-0fa7bc44cd9ab1f85\n- BYOLAl2023: ami-0bc2b4d46367806b0\n+ Enterprise: ami-0adad0df164f5d3d2\n+ BYOL: ami-0162fd6fe0c778804\n ap-south-1:\n- PAYGAl2023: ami-0f481ba0a6819ced6\n- BYOLAl2023: ami-00b59374107e5efb6\n+ Enterprise: ami-05cb78bc62095559e\n+ BYOL: ami-0b6472e5b25075c3a\n ap-southeast-1:\n- PAYGAl2023: ami-0c373c6c8a2316c80\n- BYOLAl2023: ami-0b9bd265ef165a07b\n+ Enterprise: ami-0ace4c492256d582b\n+ BYOL: ami-0337694124652af4a\n ap-southeast-2:\n- PAYGAl2023: ami-0c65a907408226a3e\n- BYOLAl2023: ami-02bad1ef2c6d4a91a\n+ Enterprise: ami-09b42852706d80f61\n+ BYOL: ami-03d830bd349cddcbc\n ap-northeast-1:\n- PAYGAl2023: ami-0254bc4adaf13e3b9\n- BYOLAl2023: ami-07e8b312b1016bf67\n+ Enterprise: ami-0860fd2cf7c494dfc\n+ BYOL: ami-0f810574accbd33b2\n ap-northeast-2:\n- PAYGAl2023: ami-05995b5f5807873d7\n- BYOLAl2023: ami-0afd77ba0d7a0c129\n+ Enterprise: ami-09e07ba03b2662e4b\n+ BYOL: ami-04f97692a8557b493\n sa-east-1:\n- PAYGAl2023: ami-05ec8fee12de236a5\n- BYOLAl2023: ami-09d883ea308449555\n+ Enterprise: ami-0b94055f72e2d3a30\n+ BYOL: ami-00aadd4fc8a06eeff\n eu-west-2:\n- PAYGAl2023: ami-0f5cff9d243f31521\n- BYOLAl2023: ami-0588d104a52fbc326\n+ Enterprise: ami-01da8900f033938cb\n+ BYOL: ami-016eaaa73edae05a9\n ca-central-1:\n- PAYGAl2023: ami-0f34d118b23b51bf5\n- BYOLAl2023: ami-0c78eccd03e957005\n+ Enterprise: ami-0229c2f9c0da8bfb4\n+ BYOL: ami-083a7db6e6afd6067\n eu-west-3:\n- PAYGAl2023: ami-01fa9155eb17992c5\n- BYOLAl2023: ami-0637199acc5327534\n+ Enterprise: ami-0ac4d1b01ef025708\n+ BYOL: ami-0b44d169075494c13\n Resources:\n VpcStack:\n Type: AWS::CloudFormation::Stack\n@@ -1034,9 +881,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet1Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1089,9 +934,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet1Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp1\n- Version: !GetAtt LaunchTemp1.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig1\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1154,9 +997,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet2Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp2\n- Version: !GetAtt LaunchTemp2.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig2\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1219,9 +1060,7 @@ Resources:\n Properties:\n VPCZoneIdentifier:\n - !GetAtt [VpcStack, Outputs.PrivateSubnet3Id]\n- LaunchTemplate: \n- LaunchTemplateId: !Ref LaunchTemp3\n- Version: !GetAtt LaunchTemp3.LatestVersionNumber\n+ LaunchConfigurationName: !Ref LaunchConfig3\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n@@ -1324,290 +1163,272 @@ Resources:\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n- LaunchTemp1:\n- Type: 'AWS::EC2::LaunchTemplate'\n+ LaunchConfig1:\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume1\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeA#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume1\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeA#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=1\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=1\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n- LaunchTemp2:\n+ LaunchConfig2:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume2\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeB#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume2\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeB#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n- LaunchTemp3:\n+ LaunchConfig3:\n Condition: MultiZone\n- Type: 'AWS::EC2::LaunchTemplate'\n+ Type: 'AWS::AutoScaling::LaunchConfiguration'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n- LaunchTemplateData:\n- BlockDeviceMappings:\n- - DeviceName: /dev/xvda\n- Ebs:\n- VolumeSize: 40\n- - DeviceName: /dev/sdf\n- NoDevice: true\n- Ebs: {}\n- KeyName: !Ref KeyName\n- ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n- UserData: !Base64\n- 'Fn::Join':\n- - ''\n- - - MARKLOGIC_CLUSTER_NAME=\n- - !Ref MarkLogicDDBTable\n- - |+\n+ BlockDeviceMappings:\n+ - DeviceName: /dev/xvda\n+ Ebs:\n+ VolumeSize: 40\n+ - DeviceName: /dev/sdf\n+ NoDevice: true\n+ Ebs: {}\n+ KeyName: !Ref KeyName\n+ ImageId: !If [EssentialEnterprise, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"Enterprise\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOL\"]]\n+ UserData: !Base64\n+ 'Fn::Join':\n+ - ''\n+ - - MARKLOGIC_CLUSTER_NAME=\n+ - !Ref MarkLogicDDBTable\n+ - |+\n \n- - MARKLOGIC_EBS_VOLUME=\n- - !Ref MarklogicVolume3\n- - ',:'\n- - !Ref VolumeSize\n- - '::'\n- - !Ref VolumeType\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeIOPS\n- - ''\n- - ':'\n- - !If\n- - GP3\n- - !Ref VolumeThroughput\n- - ''\n- - |\n- :,*\n- - |\n- MARKLOGIC_NODE_NAME=NodeC#\n- - MARKLOGIC_ADMIN_USERNAME=\n- - !Ref AdminUser\n- - |+\n+ - MARKLOGIC_EBS_VOLUME=\n+ - !Ref MarklogicVolume3\n+ - ',:'\n+ - !Ref VolumeSize\n+ - '::'\n+ - !Ref VolumeType\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeIOPS\n+ - ''\n+ - ':'\n+ - !If\n+ - GP3\n+ - !Ref VolumeThroughput\n+ - ''\n+ - |\n+ :,*\n+ - |\n+ MARKLOGIC_NODE_NAME=NodeC#\n+ - MARKLOGIC_ADMIN_USERNAME=\n+ - !Ref AdminUser\n+ - |+\n \n- - MARKLOGIC_ADMIN_PASSWORD=\n- - !Ref AdminPass\n- - |+\n+ - MARKLOGIC_ADMIN_PASSWORD=\n+ - !Ref AdminPass\n+ - |+\n \n- - |\n- MARKLOGIC_CLUSTER_MASTER=0\n- - MARKLOGIC_LICENSEE=\n- - !Ref Licensee\n- - |+\n+ - |\n+ MARKLOGIC_CLUSTER_MASTER=0\n+ - MARKLOGIC_LICENSEE=\n+ - !Ref Licensee\n+ - |+\n \n- - MARKLOGIC_LICENSE_KEY=\n- - !Ref LicenseKey\n- - |+\n+ - MARKLOGIC_LICENSE_KEY=\n+ - !Ref LicenseKey\n+ - |+\n \n- - MARKLOGIC_LOG_SNS=\n- - !Ref LogSNS\n- - |+\n+ - MARKLOGIC_LOG_SNS=\n+ - !Ref LogSNS\n+ - |+\n \n- - MARKLOGIC_AWS_SWAP_SIZE=\n- - 32\n- - |+\n+ - MARKLOGIC_AWS_SWAP_SIZE=\n+ - 32\n+ - |+\n \n- - !If\n- - UseVolumeEncryption\n- - !Join\n- - ''\n- - - 'MARKLOGIC_EBS_KEY='\n- - !If\n- - HasCustomEBSKey\n- - !Ref VolumeEncryptionKey\n- - 'default'\n+ - !If\n+ - UseVolumeEncryption\n+ - !Join\n - ''\n+ - - 'MARKLOGIC_EBS_KEY='\n+ - !If\n+ - HasCustomEBSKey\n+ - !Ref VolumeEncryptionKey\n+ - 'default'\n+ - ''\n \n- SecurityGroupIds:\n- - !Ref InstanceSecurityGroup\n- InstanceType: !Ref InstanceType\n- IamInstanceProfile: \n- Name: !Ref IAMRole\n- MetadataOptions:\n- HttpTokens: required\n- InstanceMarketOptions: !If\n- - UseSpot\n- - MarketType: spot \n- SpotOptions: \n- MaxPrice: !Ref SpotPrice\n- - !Ref 'AWS::NoValue'\n+ SecurityGroups:\n+ - !Ref InstanceSecurityGroup\n+ InstanceType: !Ref InstanceType\n+ IamInstanceProfile: !Ref IAMRole\n+ SpotPrice: !If\n+ - UseSpot\n+ - !Ref SpotPrice\n+ - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "efb384d8-c77f-464a-acce-63ed7ef67668",
|
||
"timestamp": "2026-01-22T17:47:29.364Z",
|
||
"type": "gemini",
|
||
"content": "`mlcluster-vpc.template` in `dxw-11` mostly reverts `master`'s newer features. I'll check the `dxw-11` branch for port `8011` changes to see if they were also applied there.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Checking Template Revisions",
|
||
"description": "I'm focused on the `mlcluster-vpc.template` file. It appears the changes in `dxw-11` primarily revert features from `master`, specifically regarding `LaunchTemplate`, `IMDSv2`, and the `InstanceType` list. My next step is to confirm whether `mlcluster-vpc.template` also received these reverts, or if something else is at play.",
|
||
"timestamp": "2026-01-22T17:47:28.088Z"
|
||
},
|
||
{
|
||
"subject": "Analyzing Port Modifications",
|
||
"description": "I've confirmed the template's reversion of several features. Now I'm shifting gears and scrutinizing the port changes. My objective is to see if the `8011` port modifications introduced in `master` were also carried over to `dxw-11`. A quick search within the `dxw-11` branch should quickly illuminate this aspect.",
|
||
"timestamp": "2026-01-22T17:47:29.113Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 67494,
|
||
"output": 98,
|
||
"cached": 56781,
|
||
"thoughts": 101,
|
||
"tool": 0,
|
||
"total": 67693
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104049361-aee3b02b39cb1",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Search for '8011' in the dxw-11 branch.",
|
||
"command": "git grep 8011 dxw-11"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104049361-aee3b02b39cb1",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git grep 8011 dxw-11\nDirectory: (root)\nOutput: dxw-11:mlcluster.template: - MarklogicExternal8011\ndxw-11:mlcluster.template: - MarklogicInternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicExternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicInternal8011\ndxw-11:mlcluster.template: - MarklogicExternal8011\ndxw-11:mlcluster.template: - MarklogicInternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicExternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicInternal8011\ndxw-11:mlcluster.template: - MarklogicExternal8011\ndxw-11:mlcluster.template: - MarklogicInternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicExternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicInternal8011\ndxw-11:mlcluster.template: ToPort: '8011'\ndxw-11:mlcluster.template: ToPort: '8011'\ndxw-11:mlcluster.template: ToPort: '8011'\ndxw-11:mlcluster.template: ToPort: '8011'\ndxw-11:mlcluster.template: MarklogicExternal8011:\ndxw-11:mlcluster.template: Port: 8011\ndxw-11:mlcluster.template: MarklogicExternal8011Listener:\ndxw-11:mlcluster.template: - MarklogicExternal8011\ndxw-11:mlcluster.template: - TargetGroupArn: !Ref MarklogicExternal8011\ndxw-11:mlcluster.template: Port: 8011\ndxw-11:mlcluster.template: MarklogicInternal8011:\ndxw-11:mlcluster.template: Port: 8011\ndxw-11:mlcluster.template: MarklogicInternal8011Listener:\ndxw-11:mlcluster.template: - MarklogicInternal8011\ndxw-11:mlcluster.template: - TargetGroupArn: !Ref MarklogicInternal8011\ndxw-11:mlcluster.template: Port: 8011\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35542"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:47:29.448Z",
|
||
"resultDisplay": "dxw-11:mlcluster.template: - MarklogicExternal8011\ndxw-11:mlcluster.template: - MarklogicInternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicExternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicInternal8011\ndxw-11:mlcluster.template: - MarklogicExternal8011\ndxw-11:mlcluster.template: - MarklogicInternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicExternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicInternal8011\ndxw-11:mlcluster.template: - MarklogicExternal8011\ndxw-11:mlcluster.template: - MarklogicInternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicExternal8011\ndxw-11:mlcluster.template: - !Ref MarklogicInternal8011\ndxw-11:mlcluster.template: ToPort: '8011'\ndxw-11:mlcluster.template: ToPort: '8011'\ndxw-11:mlcluster.template: ToPort: '8011'\ndxw-11:mlcluster.template: ToPort: '8011'\ndxw-11:mlcluster.template: MarklogicExternal8011:\ndxw-11:mlcluster.template: Port: 8011\ndxw-11:mlcluster.template: MarklogicExternal8011Listener:\ndxw-11:mlcluster.template: - MarklogicExternal8011\ndxw-11:mlcluster.template: - TargetGroupArn: !Ref MarklogicExternal8011\ndxw-11:mlcluster.template: Port: 8011\ndxw-11:mlcluster.template: MarklogicInternal8011:\ndxw-11:mlcluster.template: Port: 8011\ndxw-11:mlcluster.template: MarklogicInternal8011Listener:\ndxw-11:mlcluster.template: - MarklogicInternal8011\ndxw-11:mlcluster.template: - TargetGroupArn: !Ref MarklogicInternal8011\ndxw-11:mlcluster.template: Port: 8011",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "3d2b17e2-c3a2-40cd-9d20-a5dfb4d84f30",
|
||
"timestamp": "2026-01-22T17:47:33.587Z",
|
||
"type": "gemini",
|
||
"content": "`8011` only appears in `mlcluster.template`. I'll now check for `ExternalAccessCidrIP`.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Verifying Location of Code",
|
||
"description": "I've determined that the code, specifically `8011`, appears exclusively within `mlcluster.template`. I'm now cross-referencing this with `ExternalAccessCidrIP` to ensure there are no other potential locations or dependencies.",
|
||
"timestamp": "2026-01-22T17:47:33.387Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 68267,
|
||
"output": 73,
|
||
"cached": 64290,
|
||
"thoughts": 33,
|
||
"tool": 0,
|
||
"total": 68373
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104053584-4ebc1aae4da5b8",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Search for 'ExternalAccessCidrIP' in the dxw-11 branch.",
|
||
"command": "git grep ExternalAccessCidrIP dxw-11"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104053584-4ebc1aae4da5b8",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git grep ExternalAccessCidrIP dxw-11\nDirectory: (root)\nOutput: dxw-11:mlcluster.template: - ExternalAccessCidrIP\ndxw-11:mlcluster.template: ExternalAccessCidrIP:\ndxw-11:mlcluster.template: ExternalAccessCidrIP:\ndxw-11:mlcluster.template: CidrIp: !Ref ExternalAccessCidrIP\ndxw-11:mlcluster.template: CidrIp: !Ref ExternalAccessCidrIP\ndxw-11:mlcluster.template: CidrIp: !Ref ExternalAccessCidrIP\ndxw-11:mlcluster.template: CidrIp: !Ref ExternalAccessCidrIP\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35554"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:47:33.659Z",
|
||
"resultDisplay": "dxw-11:mlcluster.template: - ExternalAccessCidrIP\ndxw-11:mlcluster.template: ExternalAccessCidrIP:\ndxw-11:mlcluster.template: ExternalAccessCidrIP:\ndxw-11:mlcluster.template: CidrIp: !Ref ExternalAccessCidrIP\ndxw-11:mlcluster.template: CidrIp: !Ref ExternalAccessCidrIP\ndxw-11:mlcluster.template: CidrIp: !Ref ExternalAccessCidrIP\ndxw-11:mlcluster.template: CidrIp: !Ref ExternalAccessCidrIP",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "4b27d5a8-6683-4fd1-9697-05f58980298a",
|
||
"timestamp": "2026-01-22T17:47:38.399Z",
|
||
"type": "gemini",
|
||
"content": "The changes are primarily in `mlcluster.template`, so I'll port them to `master`. I'll add `ExternalAccessCidrIP` and `ECSSecurityGroup` parameters, set up new resources including security groups and load balancers, and update `InstanceSecurityGroup` and `AutoScalingGroup`. I'll also refine metadata and update volume defaults, starting with a read of the current `mlcluster.template`.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Planning the Template Merge",
|
||
"description": "I'm focused on merging the changes from `mlcluster.template` into `master`. My strategy involves first reading the existing `mlcluster.template` on `master`, and then incorporating the new parameters: `ExternalAccessCidrIP` and `ECSSecurityGroup` to the `master` template.",
|
||
"timestamp": "2026-01-22T17:47:37.337Z"
|
||
},
|
||
{
|
||
"subject": "Initiating Template Integration",
|
||
"description": "I'm now diving into the implementation phase. I've read the `mlcluster.template` from `master` and am ready to integrate the changes. My immediate next step is adding the parameters `ExternalAccessCidrIP` and `ECSSecurityGroup`, followed by incorporating the new resources, including the ELB and ALB configurations. I will then adjust the security groups and autoscaling group configurations to use the new resources.",
|
||
"timestamp": "2026-01-22T17:47:38.228Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 68566,
|
||
"output": 107,
|
||
"cached": 68033,
|
||
"thoughts": 233,
|
||
"tool": 0,
|
||
"total": 68906
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "read_file-1769104058396-c0396bfb6dced8",
|
||
"name": "read_file",
|
||
"args": {
|
||
"file_path": "mlcluster.template"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "read_file-1769104058396-c0396bfb6dced8",
|
||
"name": "read_file",
|
||
"response": {
|
||
"output": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '10'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp2\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:47:38.426Z",
|
||
"resultDisplay": "",
|
||
"displayName": "ReadFile",
|
||
"description": "Reads and returns the content of a specified file. If the file is large, the content will be truncated. The tool's response will clearly indicate if truncation has occurred and will provide details on how to read more of the file using the 'offset' and 'limit' parameters. Handles text, images (PNG, JPG, GIF, WEBP, SVG, BMP), audio files (MP3, WAV, AIFF, AAC, OGG, FLAC), and PDF files. For text files, it can read specific line ranges.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "d73912fd-4ded-47f2-ab76-a83ec1763767",
|
||
"timestamp": "2026-01-22T17:47:43.798Z",
|
||
"type": "gemini",
|
||
"content": "Modifying `mlcluster.template`: I'll begin by adding the new parameters and metadata.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Implementing the Template",
|
||
"description": "I've started making changes to `mlcluster.template`. My initial step involves adding the new parameters and associated metadata. I anticipate this will set the foundation for the upcoming modifications.",
|
||
"timestamp": "2026-01-22T17:47:42.936Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 87059,
|
||
"output": 164,
|
||
"cached": 68972,
|
||
"thoughts": 27,
|
||
"tool": 0,
|
||
"total": 87250
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "replace-1769104063795-3957a94b7d859",
|
||
"name": "replace",
|
||
"args": {
|
||
"instruction": "Add ExternalAccessCidrIP and ECSSecurityGroup to Metadata and Parameters in mlcluster.template. Also update default VolumeSize to 50 and VolumeType to gp3.",
|
||
"old_string": " - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - Label:\n default: \"MarkLogic Configuration\"",
|
||
"new_string": " - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"",
|
||
"file_path": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "replace-1769104063795-3957a94b7d859",
|
||
"name": "replace",
|
||
"response": {
|
||
"output": "Successfully modified file: /Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template (1 replacements)."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:47:58.295Z",
|
||
"resultDisplay": {
|
||
"fileDiff": "Index: mlcluster.template\n===================================================================\n--- mlcluster.template\tCurrent\n+++ mlcluster.template\tProposed\n@@ -32,6 +32,8 @@\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n+ - ExternalAccessCidrIP\n+ - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n",
|
||
"fileName": "mlcluster.template",
|
||
"filePath": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"originalContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '10'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp2\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"newContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '10'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp2\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"diffStat": {
|
||
"model_added_lines": 2,
|
||
"model_removed_lines": 0,
|
||
"model_added_chars": 60,
|
||
"model_removed_chars": 0,
|
||
"user_added_lines": 0,
|
||
"user_removed_lines": 1880,
|
||
"user_added_chars": 0,
|
||
"user_removed_chars": 51502
|
||
},
|
||
"isNewFile": false
|
||
},
|
||
"displayName": "Edit",
|
||
"description": "Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when `expected_replacements` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the read_file tool to examine the file's current content before attempting a text replacement.\n \n The user has the ability to modify the `new_string` content. If modified, this will be stated in the response.\n \n Expectation for required parameters:\n 1. `old_string` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).\n 2. `new_string` MUST be the exact literal text to replace `old_string` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic and that `old_string` and `new_string` are different.\n 3. `instruction` is the detailed instruction of what needs to be changed. It is important to Make it specific and detailed so developers or large language models can understand what needs to be changed and perform the changes on their own if necessary. \n 4. NEVER escape `old_string` or `new_string`, that would break the exact literal text requirement.\n **Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for `old_string`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.\n 5. Prefer to break down complex and long changes into multiple smaller atomic calls to this tool. Always check the content of the file after changes or not finding a string to match.\n **Multiple replacements:** Set `expected_replacements` to the number of occurrences you want to replace. The tool will replace ALL occurrences that match `old_string` exactly. Ensure the number of replacements matches your expectation.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "3c367cd1-2bf5-4069-9d8c-bbcc265d4004",
|
||
"timestamp": "2026-01-22T17:48:03.104Z",
|
||
"type": "gemini",
|
||
"content": "Adding parameter labels and definitions.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Adding Parameter Definitions",
|
||
"description": "I've made progress on the parameter labels and definitions. I am now working on fleshing out the specifics of each parameter. Focusing on clarity to make sure the labels and definitions are easy to comprehend.",
|
||
"timestamp": "2026-01-22T17:48:00.741Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 87267,
|
||
"output": 381,
|
||
"cached": 84250,
|
||
"thoughts": 13,
|
||
"tool": 0,
|
||
"total": 87661
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "replace-1769104083100-40197d2f0a29a8",
|
||
"name": "replace",
|
||
"args": {
|
||
"file_path": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"new_string": " PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3",
|
||
"instruction": "Add labels and definitions for ExternalAccessCidrIP and ECSSecurityGroup parameters. Update VolumeSize and VolumeType defaults.",
|
||
"old_string": " PrivateSubnet3:\n default: Private Subnet 3\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '10'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp2"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "replace-1769104083100-40197d2f0a29a8",
|
||
"name": "replace",
|
||
"response": {
|
||
"output": "Successfully modified file: /Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template (1 replacements)."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:48:19.669Z",
|
||
"resultDisplay": {
|
||
"fileDiff": "Index: mlcluster.template\n===================================================================\n--- mlcluster.template\tCurrent\n+++ mlcluster.template\tProposed\n@@ -92,6 +92,10 @@\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n+ ExternalAccessCidrIP:\n+ default: External IP address range for access to admin site\n+ ECSSecurityGroup:\n+ default: the security group the ecs cluster is in\n Parameters:\n # resource configuration\n IAMRole:\n@@ -102,7 +106,7 @@\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n- Default: '10'\n+ Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n@@ -110,7 +114,7 @@\n - standard\n - gp2\n - gp3\n- Default: gp2\n+ Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n",
|
||
"fileName": "mlcluster.template",
|
||
"filePath": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"originalContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '10'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp2\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"newContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"diffStat": {
|
||
"model_added_lines": 6,
|
||
"model_removed_lines": 2,
|
||
"model_added_chars": 207,
|
||
"model_removed_chars": 33,
|
||
"user_added_lines": 0,
|
||
"user_removed_lines": 1866,
|
||
"user_added_chars": 0,
|
||
"user_removed_chars": 51270
|
||
},
|
||
"isNewFile": false
|
||
},
|
||
"displayName": "Edit",
|
||
"description": "Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when `expected_replacements` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the read_file tool to examine the file's current content before attempting a text replacement.\n \n The user has the ability to modify the `new_string` content. If modified, this will be stated in the response.\n \n Expectation for required parameters:\n 1. `old_string` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).\n 2. `new_string` MUST be the exact literal text to replace `old_string` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic and that `old_string` and `new_string` are different.\n 3. `instruction` is the detailed instruction of what needs to be changed. It is important to Make it specific and detailed so developers or large language models can understand what needs to be changed and perform the changes on their own if necessary. \n 4. NEVER escape `old_string` or `new_string`, that would break the exact literal text requirement.\n **Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for `old_string`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.\n 5. Prefer to break down complex and long changes into multiple smaller atomic calls to this tool. Always check the content of the file after changes or not finding a string to match.\n **Multiple replacements:** Set `expected_replacements` to the number of occurrences you want to replace. The tool will replace ALL occurrences that match `old_string` exactly. Ensure the number of replacements matches your expectation.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "caf58ebb-beec-49b6-aa5e-0f17a55773ad",
|
||
"timestamp": "2026-01-22T17:48:24.613Z",
|
||
"type": "gemini",
|
||
"content": "Adding parameter definitions to the network configuration.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Appending Parameter Definitions",
|
||
"description": "I'm currently working on incorporating the parameter definitions into the network configuration section. It seems logical to place them at the end for improved readability and organization. This ensures all the network specifics are together, followed by the detailed explanation of each parameter.",
|
||
"timestamp": "2026-01-22T17:48:22.977Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 87675,
|
||
"output": 297,
|
||
"cached": 84226,
|
||
"thoughts": 14,
|
||
"tool": 0,
|
||
"total": 87986
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "replace-1769104104607-0b3a290ab975f8",
|
||
"name": "replace",
|
||
"args": {
|
||
"old_string": " PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n",
|
||
"new_string": " PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n",
|
||
"instruction": "Add ExternalAccessCidrIP and ECSSecurityGroup parameter definitions.",
|
||
"file_path": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "replace-1769104104607-0b3a290ab975f8",
|
||
"name": "replace",
|
||
"response": {
|
||
"output": "Successfully modified file: /Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template (1 replacements)."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:48:29.883Z",
|
||
"resultDisplay": {
|
||
"fileDiff": "Index: mlcluster.template\n===================================================================\n--- mlcluster.template\tCurrent\n+++ mlcluster.template\tProposed\n@@ -786,6 +786,13 @@\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n+ ExternalAccessCidrIP:\n+ Description: A CIDR IP range to allow external access from\n+ Type: String\n+ Default: 54.76.254.148/32\n+ ECSSecurityGroup:\n+ Description: the security group the ECS cluster is in\n+ Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n",
|
||
"fileName": "mlcluster.template",
|
||
"filePath": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"originalContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"newContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"diffStat": {
|
||
"model_added_lines": 7,
|
||
"model_removed_lines": 0,
|
||
"model_added_chars": 245,
|
||
"model_removed_chars": 0,
|
||
"user_added_lines": 0,
|
||
"user_removed_lines": 1888,
|
||
"user_added_chars": 0,
|
||
"user_removed_chars": 51568
|
||
},
|
||
"isNewFile": false
|
||
},
|
||
"displayName": "Edit",
|
||
"description": "Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when `expected_replacements` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the read_file tool to examine the file's current content before attempting a text replacement.\n \n The user has the ability to modify the `new_string` content. If modified, this will be stated in the response.\n \n Expectation for required parameters:\n 1. `old_string` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).\n 2. `new_string` MUST be the exact literal text to replace `old_string` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic and that `old_string` and `new_string` are different.\n 3. `instruction` is the detailed instruction of what needs to be changed. It is important to Make it specific and detailed so developers or large language models can understand what needs to be changed and perform the changes on their own if necessary. \n 4. NEVER escape `old_string` or `new_string`, that would break the exact literal text requirement.\n **Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for `old_string`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.\n 5. Prefer to break down complex and long changes into multiple smaller atomic calls to this tool. Always check the content of the file after changes or not finding a string to match.\n **Multiple replacements:** Set `expected_replacements` to the number of occurrences you want to replace. The tool will replace ALL occurrences that match `old_string` exactly. Ensure the number of replacements matches your expectation.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "bf732694-0455-4cd8-b71a-713dd845e7d9",
|
||
"timestamp": "2026-01-22T17:48:36.667Z",
|
||
"type": "gemini",
|
||
"content": "`dxw-11` renamed the `PAYG` condition to `EssentialEnterprise`, but I'll keep `PAYG` to minimize noise unless necessary. I'll update the `Licensee` and `LicenseKey` descriptions to match `dxw-11`.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Assessing PAYG Condition",
|
||
"description": "Okay, I've got a grasp of the `dxw-11` change related to the `PAYG` condition. It seems they've switched it to `EssentialEnterprise`. I'm now digging into the `master` branch to understand the context of the change. Specifically, I'm examining the YAML, focusing on the `PAYG` settings and how the `LicenseKey` and `License` are handled within the `!Or` and `!And` logic. I'm looking for the implications of the change.",
|
||
"timestamp": "2026-01-22T17:48:33.832Z"
|
||
},
|
||
{
|
||
"subject": "Re-Evaluating PAYG Logic",
|
||
"description": "I'm now revisiting the `PAYG` logic, comparing it directly to the `dxw-11` changes. The renaming to `EssentialEnterprise` seems straightforward. The real question is, are there any functional differences beyond the name change? I'm cross-referencing the `LicenseKey` and `Licensee` descriptions in the code and plan to update them to maintain consistency with the change in `dxw-11`.",
|
||
"timestamp": "2026-01-22T17:48:35.247Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 87999,
|
||
"output": 320,
|
||
"cached": 84197,
|
||
"thoughts": 234,
|
||
"tool": 0,
|
||
"total": 88553
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "replace-1769104116656-f4bb8c0ebd19b8",
|
||
"name": "replace",
|
||
"args": {
|
||
"old_string": " Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none",
|
||
"new_string": " Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none",
|
||
"file_path": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"instruction": "Update Licensee and LicenseKey parameter descriptions."
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "replace-1769104116656-f4bb8c0ebd19b8",
|
||
"name": "replace",
|
||
"response": {
|
||
"output": "Successfully modified file: /Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template (1 replacements)."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:49:16.984Z",
|
||
"resultDisplay": {
|
||
"fileDiff": "Index: mlcluster.template\n===================================================================\n--- mlcluster.template\tCurrent\n+++ mlcluster.template\tProposed\n@@ -805,11 +805,11 @@\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n- Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n- Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n+ Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n Conditions:\n",
|
||
"fileName": "mlcluster.template",
|
||
"filePath": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"originalContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose PAYG version. Provide valid Licensee/Licensekey to choose BYOL version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"newContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"diffStat": {
|
||
"model_added_lines": 2,
|
||
"model_removed_lines": 2,
|
||
"model_added_chars": 367,
|
||
"model_removed_chars": 303,
|
||
"user_added_lines": 0,
|
||
"user_removed_lines": 1890,
|
||
"user_added_chars": 0,
|
||
"user_removed_chars": 51720
|
||
},
|
||
"isNewFile": false
|
||
},
|
||
"displayName": "Edit",
|
||
"description": "Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when `expected_replacements` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the read_file tool to examine the file's current content before attempting a text replacement.\n \n The user has the ability to modify the `new_string` content. If modified, this will be stated in the response.\n \n Expectation for required parameters:\n 1. `old_string` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).\n 2. `new_string` MUST be the exact literal text to replace `old_string` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic and that `old_string` and `new_string` are different.\n 3. `instruction` is the detailed instruction of what needs to be changed. It is important to Make it specific and detailed so developers or large language models can understand what needs to be changed and perform the changes on their own if necessary. \n 4. NEVER escape `old_string` or `new_string`, that would break the exact literal text requirement.\n **Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for `old_string`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.\n 5. Prefer to break down complex and long changes into multiple smaller atomic calls to this tool. Always check the content of the file after changes or not finding a string to match.\n **Multiple replacements:** Set `expected_replacements` to the number of occurrences you want to replace. The tool will replace ALL occurrences that match `old_string` exactly. Ensure the number of replacements matches your expectation.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "f46fa2b1-08e8-4bfb-a2dc-d5428de2f1b1",
|
||
"timestamp": "2026-01-22T17:49:20.879Z",
|
||
"type": "gemini",
|
||
"content": "Adding 8011 target groups to ASGs.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Deploying the Groups",
|
||
"description": "Okay, so I'm now focusing on integrating the 8011 target groups with the AutoScalingGroups. I'm thinking about the most efficient and least disruptive way to accomplish this. Considering the current setup, I'm leaning toward a phased rollout to avoid any potential downtime.",
|
||
"timestamp": "2026-01-22T17:49:20.242Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 88346,
|
||
"output": 154,
|
||
"cached": 83973,
|
||
"thoughts": 19,
|
||
"tool": 0,
|
||
"total": 88519
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "replace-1769104160865-bd8c9068443cc",
|
||
"name": "replace",
|
||
"args": {
|
||
"old_string": " - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:",
|
||
"file_path": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"instruction": "Add MarklogicExternal8011 and MarklogicInternal8011 to the TargetGroupARNs in all MarkLogicServerGroup resources.",
|
||
"new_string": " - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:",
|
||
"expected_replacements": 3
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "replace-1769104160865-bd8c9068443cc",
|
||
"name": "replace",
|
||
"response": {
|
||
"output": "Successfully modified file: /Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template (3 replacements)."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:49:38.412Z",
|
||
"resultDisplay": {
|
||
"fileDiff": "Index: mlcluster.template\n===================================================================\n--- mlcluster.template\tCurrent\n+++ mlcluster.template\tProposed\n@@ -1043,6 +1043,8 @@\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n@@ -1107,6 +1109,8 @@\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n@@ -1171,6 +1175,8 @@\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n+ - MarklogicExternal8011\n+ - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n",
|
||
"fileName": "mlcluster.template",
|
||
"filePath": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"originalContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"newContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"diffStat": {
|
||
"model_added_lines": 6,
|
||
"model_removed_lines": 0,
|
||
"model_added_chars": 174,
|
||
"model_removed_chars": 0,
|
||
"user_added_lines": 0,
|
||
"user_removed_lines": 1898,
|
||
"user_added_chars": 0,
|
||
"user_removed_chars": 52207
|
||
},
|
||
"isNewFile": false
|
||
},
|
||
"displayName": "Edit",
|
||
"description": "Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when `expected_replacements` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the read_file tool to examine the file's current content before attempting a text replacement.\n \n The user has the ability to modify the `new_string` content. If modified, this will be stated in the response.\n \n Expectation for required parameters:\n 1. `old_string` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).\n 2. `new_string` MUST be the exact literal text to replace `old_string` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic and that `old_string` and `new_string` are different.\n 3. `instruction` is the detailed instruction of what needs to be changed. It is important to Make it specific and detailed so developers or large language models can understand what needs to be changed and perform the changes on their own if necessary. \n 4. NEVER escape `old_string` or `new_string`, that would break the exact literal text requirement.\n **Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for `old_string`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.\n 5. Prefer to break down complex and long changes into multiple smaller atomic calls to this tool. Always check the content of the file after changes or not finding a string to match.\n **Multiple replacements:** Set `expected_replacements` to the number of occurrences you want to replace. The tool will replace ALL occurrences that match `old_string` exactly. Ensure the number of replacements matches your expectation.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "46fd62b2-99b0-4367-b75f-d3a76bba1186",
|
||
"timestamp": "2026-01-22T17:49:42.320Z",
|
||
"type": "gemini",
|
||
"content": "Adding them to `TargetGroupARNs` in `Properties`.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Adding TargetGroupARNs",
|
||
"description": "I've been focusing on integrating the `TargetGroupARNs` into the `Properties` section. My current task involves ensuring the correct data structure and format for these ARNs within the configuration. I want to make sure they are included correctly.",
|
||
"timestamp": "2026-01-22T17:49:41.453Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 88527,
|
||
"output": 168,
|
||
"cached": 87744,
|
||
"thoughts": 19,
|
||
"tool": 0,
|
||
"total": 88714
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "replace-1769104182311-60a3a3805f1768",
|
||
"name": "replace",
|
||
"args": {
|
||
"new_string": " - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:",
|
||
"old_string": " - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:",
|
||
"expected_replacements": 3,
|
||
"file_path": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"instruction": "Add MarklogicExternal8011 and MarklogicInternal8011 to TargetGroupARNs property of MarkLogicServerGroup resources."
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "replace-1769104182311-60a3a3805f1768",
|
||
"name": "replace",
|
||
"response": {
|
||
"output": "Successfully modified file: /Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template (3 replacements)."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:49:50.685Z",
|
||
"resultDisplay": {
|
||
"fileDiff": "Index: mlcluster.template\n===================================================================\n--- mlcluster.template\tCurrent\n+++ mlcluster.template\tProposed\n@@ -1089,6 +1089,8 @@\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n@@ -1155,6 +1157,8 @@\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n@@ -1221,6 +1225,8 @@\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n+ - !Ref MarklogicExternal8011\n+ - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n",
|
||
"fileName": "mlcluster.template",
|
||
"filePath": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"originalContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"newContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"diffStat": {
|
||
"model_added_lines": 6,
|
||
"model_removed_lines": 0,
|
||
"model_added_chars": 216,
|
||
"model_removed_chars": 0,
|
||
"user_added_lines": 0,
|
||
"user_removed_lines": 1904,
|
||
"user_added_chars": 0,
|
||
"user_removed_chars": 52396
|
||
},
|
||
"isNewFile": false
|
||
},
|
||
"displayName": "Edit",
|
||
"description": "Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when `expected_replacements` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the read_file tool to examine the file's current content before attempting a text replacement.\n \n The user has the ability to modify the `new_string` content. If modified, this will be stated in the response.\n \n Expectation for required parameters:\n 1. `old_string` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).\n 2. `new_string` MUST be the exact literal text to replace `old_string` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic and that `old_string` and `new_string` are different.\n 3. `instruction` is the detailed instruction of what needs to be changed. It is important to Make it specific and detailed so developers or large language models can understand what needs to be changed and perform the changes on their own if necessary. \n 4. NEVER escape `old_string` or `new_string`, that would break the exact literal text requirement.\n **Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for `old_string`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.\n 5. Prefer to break down complex and long changes into multiple smaller atomic calls to this tool. Always check the content of the file after changes or not finding a string to match.\n **Multiple replacements:** Set `expected_replacements` to the number of occurrences you want to replace. The tool will replace ALL occurrences that match `old_string` exactly. Ensure the number of replacements matches your expectation.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "d5543b81-3133-4211-be0e-445d64d1d2bc",
|
||
"timestamp": "2026-01-22T17:50:01.646Z",
|
||
"type": "gemini",
|
||
"content": "Updating `InstanceSecurityGroup`; adding `InternalElbSecurityGroup`.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Revising Security Groups",
|
||
"description": "I'm currently working on updating the `InstanceSecurityGroup` and introducing the `InternalElbSecurityGroup`. I'm focusing on ensuring these groups provide the correct level of security for the resources they protect. Further thought is being given to minimizing overly permissive rules.",
|
||
"timestamp": "2026-01-22T17:49:53.989Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 88722,
|
||
"output": 1311,
|
||
"cached": 87699,
|
||
"thoughts": 16,
|
||
"tool": 0,
|
||
"total": 90049
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "replace-1769104201635-62fad159e949f",
|
||
"name": "replace",
|
||
"args": {
|
||
"old_string": " InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n",
|
||
"instruction": "Update InstanceSecurityGroup to restrict access and allow traffic from load balancers. Add InternalElbSecurityGroup.",
|
||
"new_string": " InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n InstanceSecurityGroupAdminIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n GroupId: !Ref InstanceSecurityGroup\n IpProtocol: tcp\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: !Ref ExternalAccessCidrIP\n InternalElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n",
|
||
"file_path": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "replace-1769104201635-62fad159e949f",
|
||
"name": "replace",
|
||
"response": {
|
||
"output": "Successfully modified file: /Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template (1 replacements)."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:50:09.982Z",
|
||
"resultDisplay": {
|
||
"fileDiff": "Index: mlcluster.template\n===================================================================\n--- mlcluster.template\tCurrent\n+++ mlcluster.template\tProposed\n@@ -1233,29 +1233,40 @@\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n- GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n- FromPort: '22'\n- ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7999'\n+ ToPort: '7999'\n+ SourceSecurityGroupId: !Ref ElbSecurityGroup\n+ - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n- CidrIp: 0.0.0.0/0\n+ SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n@@ -1266,6 +1277,48 @@\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n+ InstanceSecurityGroupAdminIngress:\n+ Type: 'AWS::EC2::SecurityGroupIngress'\n+ DependsOn:\n+ - InstanceSecurityGroup\n+ Properties:\n+ GroupId: !Ref InstanceSecurityGroup\n+ IpProtocol: tcp\n+ SecurityGroupIngress:\n+ - IpProtocol: tcp\n+ FromPort: '22'\n+ ToPort: '22'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ - IpProtocol: tcp\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ CidrIp: !Ref ExternalAccessCidrIP\n+ InternalElbSecurityGroup:\n+ Type: 'AWS::EC2::SecurityGroup'\n+ Properties:\n+ GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n+ VpcId: !Ref VPC\n+ SecurityGroupIngress:\n+ - IpProtocol: tcp\n+ FromPort: '7998'\n+ ToPort: '7998'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '8000'\n+ ToPort: '8011'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n+ - IpProtocol: tcp\n+ FromPort: '7997'\n+ ToPort: '7997'\n+ SourceSecurityGroupId: !Ref ECSSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n",
|
||
"fileName": "mlcluster.template",
|
||
"filePath": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"originalContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n CidrIp: 0.0.0.0/0\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"newContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n InstanceSecurityGroupAdminIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n GroupId: !Ref InstanceSecurityGroup\n IpProtocol: tcp\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: !Ref ExternalAccessCidrIP\n InternalElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"diffStat": {
|
||
"model_added_lines": 62,
|
||
"model_removed_lines": 9,
|
||
"model_added_chars": 2060,
|
||
"model_removed_chars": 282,
|
||
"user_added_lines": 0,
|
||
"user_removed_lines": 1874,
|
||
"user_added_chars": 0,
|
||
"user_removed_chars": 51578
|
||
},
|
||
"isNewFile": false
|
||
},
|
||
"displayName": "Edit",
|
||
"description": "Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when `expected_replacements` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the read_file tool to examine the file's current content before attempting a text replacement.\n \n The user has the ability to modify the `new_string` content. If modified, this will be stated in the response.\n \n Expectation for required parameters:\n 1. `old_string` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).\n 2. `new_string` MUST be the exact literal text to replace `old_string` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic and that `old_string` and `new_string` are different.\n 3. `instruction` is the detailed instruction of what needs to be changed. It is important to Make it specific and detailed so developers or large language models can understand what needs to be changed and perform the changes on their own if necessary. \n 4. NEVER escape `old_string` or `new_string`, that would break the exact literal text requirement.\n **Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for `old_string`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.\n 5. Prefer to break down complex and long changes into multiple smaller atomic calls to this tool. Always check the content of the file after changes or not finding a string to match.\n **Multiple replacements:** Set `expected_replacements` to the number of occurrences you want to replace. The tool will replace ALL occurrences that match `old_string` exactly. Ensure the number of replacements matches your expectation.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "7eb64658-a74d-4923-ae43-60f743bd755d",
|
||
"timestamp": "2026-01-22T17:50:18.864Z",
|
||
"type": "gemini",
|
||
"content": "I messed up `InstanceSecurityGroupAdminIngress`; `AWS::EC2::SecurityGroupIngress` only supports one rule per resource. `dxw-11` seemed to use a list, which I doubt is valid. I'll re-examine the `dxw-11` `mlcluster.template` to see how it actually handled multiple rules.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Rectifying the Error",
|
||
"description": "I realize I was mistaken about the `AWS::EC2::SecurityGroupIngress` resource. It doesn't accept a list for its ingress rules. Now, I'm considering the best way to correct this: generating multiple individual resources or perhaps using a different approach altogether.",
|
||
"timestamp": "2026-01-22T17:50:15.546Z"
|
||
},
|
||
{
|
||
"subject": "Reviewing the Implementation",
|
||
"description": "I'm now revisiting the `dxw-11` template, specifically the `InstanceSecurityGroupIngress` definition, to understand how it handled the ingress rules. It appears they redefined the resource. However, I'm still uncertain if that's the correct approach given the limitations of `AWS::EC2::SecurityGroupIngress`. I need to confirm the validity of that approach before I proceed.",
|
||
"timestamp": "2026-01-22T17:50:18.488Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 90060,
|
||
"output": 130,
|
||
"cached": 87737,
|
||
"thoughts": 373,
|
||
"tool": 0,
|
||
"total": 90563
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104218854-8f03d5ab8a6ce8",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Examine InstanceSecurityGroupIngress in dxw-11 branch.",
|
||
"command": "git show dxw-11:mlcluster.template | grep -A 30 \"InstanceSecurityGroupIngress:\""
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104218854-8f03d5ab8a6ce8",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git show dxw-11:mlcluster.template | grep -A 30 \"InstanceSecurityGroupIngress:\"\nDirectory: (root)\nOutput: InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 35968"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:50:28.034Z",
|
||
"resultDisplay": " InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "e9735e21-32db-4f2e-8d9e-7f5e8b192cc1",
|
||
"timestamp": "2026-01-22T17:52:40.502Z",
|
||
"type": "gemini",
|
||
"content": "I misread the diff; `dxw-11` actually restricted `ElbSecurityGroup`'s `CidrIp` and set `InstanceSecurityGroup` to only allow traffic from ELB security groups. I need to fix my `mlcluster.template` implementation accordingly.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Re-Examining the Diff",
|
||
"description": "I was completely off-base before! It's the `ElbSecurityGroup`, not the `InstanceSecurityGroup`, where the `CidrIp` restrictions apply. Time to carefully re-examine that diff and make sure I fully grasp the implications of those restrictions.",
|
||
"timestamp": "2026-01-22T17:50:31.219Z"
|
||
},
|
||
{
|
||
"subject": "Analyzing the Changes",
|
||
"description": "The diff makes sense now, finally. The `ElbSecurityGroup` restricts access to a specific IP range via `ExternalAccessCidrIP`. Concurrently, `InstanceSecurityGroup` ingress is locked down to the ELB. It's an elegant solution.",
|
||
"timestamp": "2026-01-22T17:50:34.840Z"
|
||
},
|
||
{
|
||
"subject": "Clarifying the Solution",
|
||
"description": "Okay, after a second, and more thorough, review, the role of `ElbSecurityGroup` and `InstanceSecurityGroup` is crystal clear now. The key is the change within `ElbSecurityGroup`, restricting access via `ExternalAccessCidrIP`, while the `InstanceSecurityGroup` only accepts traffic from the ELB. It's a clean and effective design. Time to apply this knowledge to the `mlcluster.template`.",
|
||
"timestamp": "2026-01-22T17:50:34.858Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 90561,
|
||
"output": 19841,
|
||
"cached": 87404,
|
||
"thoughts": 471,
|
||
"tool": 0,
|
||
"total": 110873
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "write_file-1769104360488-a287af817b5f68",
|
||
"name": "write_file",
|
||
"args": {
|
||
"content": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n InternalElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: !Ref ExternalAccessCidrIP\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n MarklogicExternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n MarklogicExternal8011Listener:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - MarklogicExternal8011\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref MarklogicExternal8011\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8011\n Protocol: HTTP\n #Application Load Balancer description for MultiZone deployments (3 zones).\n InternalAlb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - InternalElbSecurityGroup\n Properties: \n Scheme: internal\n SecurityGroups: \n - !Ref InternalElbSecurityGroup\n Subnets:\n - !Ref PrivateSubnet1\n - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n MarklogicInternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n MarklogicInternal8011Listener:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - InternalAlb\n - MarklogicInternal8011\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref MarklogicInternal8011\n Type: forward\n LoadBalancerArn: !Ref InternalAlb\n Port: 8011\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"file_path": "mlcluster.template"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "write_file-1769104360488-a287af817b5f68",
|
||
"name": "write_file",
|
||
"response": {
|
||
"output": "Successfully overwrote file: /Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:52:51.283Z",
|
||
"resultDisplay": {
|
||
"fileDiff": "Index: mlcluster.template\n===================================================================\n--- mlcluster.template\tOriginal\n+++ mlcluster.template\tWritten\n@@ -793,6 +793,7 @@\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n+\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n@@ -1277,30 +1278,6 @@\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n- InstanceSecurityGroupAdminIngress:\n- Type: 'AWS::EC2::SecurityGroupIngress'\n- DependsOn:\n- - InstanceSecurityGroup\n- Properties:\n- GroupId: !Ref InstanceSecurityGroup\n- IpProtocol: tcp\n- SecurityGroupIngress:\n- - IpProtocol: tcp\n- FromPort: '22'\n- ToPort: '22'\n- CidrIp: !Ref ExternalAccessCidrIP\n- - IpProtocol: tcp\n- FromPort: '7998'\n- ToPort: '7998'\n- CidrIp: !Ref ExternalAccessCidrIP\n- - IpProtocol: tcp\n- FromPort: '8000'\n- ToPort: '8011'\n- CidrIp: !Ref ExternalAccessCidrIP\n- - IpProtocol: tcp\n- FromPort: '7997'\n- ToPort: '7997'\n- CidrIp: !Ref ExternalAccessCidrIP\n InternalElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n@@ -1328,19 +1305,19 @@\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n- ToPort: '8010'\n- CidrIp: 0.0.0.0/0\n+ ToPort: '8011'\n+ CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n- CidrIp: 0.0.0.0/0\n+ CidrIp: !Ref ExternalAccessCidrIP\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n@@ -1835,6 +1812,27 @@\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n+ MarklogicExternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n@@ -1953,6 +1951,72 @@\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n+ MarklogicExternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - Alb\n+ - MarklogicExternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicExternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref Alb\n+ Port: 8011\n+ Protocol: HTTP\n+ #Application Load Balancer description for MultiZone deployments (3 zones).\n+ InternalAlb:\n+ Condition: MultiZone\n+ Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n+ DependsOn:\n+ - InternalElbSecurityGroup\n+ Properties: \n+ Scheme: internal\n+ SecurityGroups: \n+ - !Ref InternalElbSecurityGroup\n+ Subnets:\n+ - !Ref PrivateSubnet1\n+ - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n+ - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n+ Metadata:\n+ 'AWS::CloudFormation::Designer':\n+ id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n+ #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n+ #Health checks are performed on each TargetGroup.\n+ MarklogicInternal8011:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n+ Properties:\n+ HealthCheckIntervalSeconds: 10\n+ HealthCheckTimeoutSeconds: 5\n+ HealthyThresholdCount: 3\n+ HealthCheckPort: 7997\n+ UnhealthyThresholdCount: 5\n+ Port: 8011\n+ Protocol: HTTP\n+ TargetGroupAttributes:\n+ - Key: stickiness.enabled\n+ Value: true\n+ - Key: stickiness.type\n+ Value: lb_cookie\n+ - Key: stickiness.lb_cookie.duration_seconds\n+ Value: 3600\n+ - Key: deregistration_delay.timeout_seconds\n+ Value: 60\n+ VpcId: !Ref VPC\n+ MarklogicInternal8011Listener:\n+ Condition: MultiZone\n+ Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n+ DependsOn:\n+ - InternalAlb\n+ - MarklogicInternal8011\n+ Properties:\n+ DefaultActions:\n+ - TargetGroupArn: !Ref MarklogicInternal8011\n+ Type: forward\n+ LoadBalancerArn: !Ref InternalAlb\n+ Port: 8011\n+ Protocol: HTTP\n Outputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n",
|
||
"fileName": "mlcluster.template",
|
||
"filePath": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"originalContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n InstanceSecurityGroupAdminIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n GroupId: !Ref InstanceSecurityGroup\n IpProtocol: tcp\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: !Ref ExternalAccessCidrIP\n InternalElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8010'\n CidrIp: 0.0.0.0/0\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: 0.0.0.0/0\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'\n",
|
||
"newContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n InternalElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: !Ref ExternalAccessCidrIP\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n MarklogicExternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n MarklogicExternal8011Listener:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - MarklogicExternal8011\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref MarklogicExternal8011\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8011\n Protocol: HTTP\n #Application Load Balancer description for MultiZone deployments (3 zones).\n InternalAlb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - InternalElbSecurityGroup\n Properties: \n Scheme: internal\n SecurityGroups: \n - !Ref InternalElbSecurityGroup\n Subnets:\n - !Ref PrivateSubnet1\n - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n MarklogicInternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n MarklogicInternal8011Listener:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - InternalAlb\n - MarklogicInternal8011\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref MarklogicInternal8011\n Type: forward\n LoadBalancerArn: !Ref InternalAlb\n Port: 8011\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'",
|
||
"diffStat": {
|
||
"model_added_lines": 93,
|
||
"model_removed_lines": 29,
|
||
"model_added_chars": 2872,
|
||
"model_removed_chars": 825,
|
||
"user_added_lines": 0,
|
||
"user_removed_lines": 0,
|
||
"user_added_chars": 0,
|
||
"user_removed_chars": 0
|
||
},
|
||
"isNewFile": false
|
||
},
|
||
"displayName": "WriteFile",
|
||
"description": "Writes content to a specified file in the local filesystem.\n\n The user has the ability to modify `content`. If modified, this will be stated in the response.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "4a3c5e7c-9902-4742-b57c-aca82264d714",
|
||
"timestamp": "2026-01-22T17:53:01.311Z",
|
||
"type": "gemini",
|
||
"content": "I need to update the `NumberOfZones` description in `mlcluster.template` to match `dxw-11`. I've confirmed `ECSSecurityGroup` is correctly used in `InternalElbSecurityGroup`. Now, I'll check `mlcluster-vpc.template` in `dxw-11` for any `8011` port changes to see if they should also be ported to `master`.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Inspecting Template Revisions",
|
||
"description": "I'm now cross-referencing all recent edits in `mlcluster.template`. I pinpointed an update to the `NumberOfZones` description for `dxw-11` within the `master` branch. I'm focusing on ensuring I capture all relevant revisions.",
|
||
"timestamp": "2026-01-22T17:52:58.849Z"
|
||
},
|
||
{
|
||
"subject": "Confirming Template Integration",
|
||
"description": "I'm now integrating the `dxw-11` changes into the `master` branch. I've updated the `NumberOfZones` description for `dxw-11`. I confirmed the `ECSSecurityGroup` parameter is correctly used. Now, I'm checking `mlcluster-vpc.template` for changes, particularly port `8011`, to ensure all necessary modifications are included.",
|
||
"timestamp": "2026-01-22T17:53:00.896Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 110428,
|
||
"output": 146,
|
||
"cached": 88176,
|
||
"thoughts": 312,
|
||
"tool": 0,
|
||
"total": 110886
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104381301-ca75ca50f04158",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"command": "git grep 8011 dxw-11 mlcluster-vpc.template",
|
||
"description": "Search for '8011' in mlcluster-vpc.template in the dxw-11 branch."
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104381301-ca75ca50f04158",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git grep 8011 dxw-11 mlcluster-vpc.template\nDirectory: (root)\nOutput: (empty)\nError: (none)\nExit Code: 1\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 36419"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:53:01.389Z",
|
||
"resultDisplay": "Command exited with code: 1",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "204b6716-1b30-4a28-9239-ada6dc470b0d",
|
||
"timestamp": "2026-01-22T17:53:07.000Z",
|
||
"type": "gemini",
|
||
"content": "`8011` changes are exclusive to `mlcluster.template`. `master` has more code in `lambda/nodemanager.py` than `dxw-11`, which aligns with `dxw-11` being older. I'll re-examine the `dxw-11` lambda code for anything new before concluding the port.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Investigating the Changes",
|
||
"description": "I'm now focusing on the Lambda functions, specifically `lambda/nodemanager.py`. Initially, I was concerned about changes in the `8011` update, but now I see that the `master` branch has more code than the update diff. This warrants further investigation to understand the nature of the discrepancies.",
|
||
"timestamp": "2026-01-22T17:53:05.535Z"
|
||
},
|
||
{
|
||
"subject": "Assessing Lambda Differences",
|
||
"description": "I'm starting to home in on the Lambda function discrepancies. After focusing on the template changes, I'm returning to `lambda/nodemanager.py`. It looks like the `master` branch has more code than the `dxw-11` branch, likely due to it being a later version. My next step is to carefully analyze the diff to ensure there's nothing new in the `dxw-11` code.",
|
||
"timestamp": "2026-01-22T17:53:06.730Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 110645,
|
||
"output": 123,
|
||
"cached": 107045,
|
||
"thoughts": 164,
|
||
"tool": 0,
|
||
"total": 110932
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104386990-76af1b0b479b4",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"command": "git diff master..dxw-11 lambda/nodemanager.py",
|
||
"description": "Check for any new code in nodemanager.py on dxw-11."
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104386990-76af1b0b479b4",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: git diff master..dxw-11 lambda/nodemanager.py\nDirectory: (root)\nOutput: diff --git a/lambda/nodemanager.py b/lambda/nodemanager.py\nindex 94548b1..3fe18d7 100644\n--- a/lambda/nodemanager.py\n+++ b/lambda/nodemanager.py\n@@ -1,4 +1,4 @@\n-# Copyright (c) 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.\n+# Copyright 2002-2018 MarkLogic Corporation. All Rights Reserved.\n \n import boto3\n import botocore\n@@ -53,72 +53,6 @@ def eni_wait_for_attachment(eni_id):\n \"Waiting for network interface %s attachment timed out\" % eni_id\n )\n \n-def eni_wait_for_detachment(eni_id):\n- max_rety = 10\n- retries = 0\n- sleep_interval = 10\n- eni_info = None\n- while True and retries < max_rety:\n- try:\n- eni_info = ec2_resource.NetworkInterface(id=eni_id)\n- log.info(\"ENI Detachment status %s \" % eni_info.status)\n- except ClientError as e:\n- reason = \"Failed to get network interface by id %s\" % eni_id\n- log.exception(reason)\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n-\n- status = eni_info.status\n- if status == \"available\":\n- time.sleep(sleep_interval)\n- break\n- elif status == \"in-use\":\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n- else:\n- log.warning(\n- \"Network interface %s in unexpected status: %s\" % (eni_id, status)\n- )\n- retries += 1\n- continue\n- else:\n- log.warning(\n- \"Waiting for network interface %s detachment timed out\" % eni_id\n- )\n-\n-def eni_wait_to_detach_attachment(eni_id):\n- max_rety = 5\n- retries = 0\n- sleep_interval = 10\n- eni_info = None\n- while True and retries < max_rety:\n- try:\n- eni_info = ec2_resource.NetworkInterface(id=eni_id)\n- except ClientError as e:\n- reason = \"Failed to get network interface by id %s\" % eni_id\n- log.exception(reason)\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n-\n- status = eni_info.status\n- if not eni_info.attachment and status == \"available\":\n- break\n- elif eni_info.attachment and status == \"available\":\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n- elif status == \"in-use\":\n- break\n- else:\n- log.warning(\n- \"Waiting for network interface %s to detach attachment time out\" % eni_id\n- )\n- return status\n-\n-\n def handler(event, context):\n msg_text = event[\"Records\"][0][\"Sns\"][\"Message\"]\n msg = json.loads(msg_text)\n@@ -177,6 +111,10 @@ def on_launch(msg):\n \"Name\": \"tag:cluster-eni-id\",\n \"Values\": [tag]\n },\n+ {\n+ \"Name\": \"status\",\n+ \"Values\": [\"available\"]\n+ },\n {\n \"Name\": \"subnet-id\",\n \"Values\": [subnet_id]\n@@ -188,52 +126,7 @@ def on_launch(msg):\n continue\n # attach the available ENI\n for eni_info in response[\"NetworkInterfaces\"]:\n- log.info(\"ENI response %s\" % eni_info)\n eni_id = eni_info[\"NetworkInterfaceId\"]\n- eni_status = eni_info[\"Status\"]\n- if \"Attachment\" in eni_info and eni_status != \"available\":\n- attached_instance_id = eni_info[\"Attachment\"][\"InstanceId\"]\n- eni_attach_id = eni_info[\"Attachment\"][\"AttachmentId\"]\n- log.info(\"Actual Instance and ENI Status and ENI Attach ID %s %s %s \" % (\n- attached_instance_id, eni_status, eni_attach_id))\n-\n- try:\n- attached_instance_response = ec2_client.describe_instances(InstanceIds=[attached_instance_id])\n- except botocore.exceptions.ClientError as e:\n- reason = \"Failed to describe instance %s\" % instance_id\n- log.exception(reason)\n-\n- # Check if status is other than available and then check if actual instance is in shutting down or terminated status\n- if (attached_instance_response['Reservations'][0]['Instances'][0]['State']['Name']\n- in [\"shutting-down\", \"terminated\"]):\n- log.info(\"Attached Instance Response %s \" % attached_instance_response)\n- log.info(\"Manually detaching the ENI %s \" % eni_id)\n- # Logic to detach the ENI from the actual instance in shutting down or terminated status\n- try:\n- detach_response = ec2_client.detach_network_interface(\n- AttachmentId=eni_attach_id,\n- )\n- except botocore.exceptions.ClientError as e:\n- reason = \"Error detaching network interface %s\" % eni_id\n- log.exception(reason)\n- \n- eni_wait_for_detachment(eni_id)\n- eni_status = eni_wait_to_detach_attachment(eni_id)\n- log.info(\"ENI status check after detachment and detach attachment %s\" % eni_status)\n-\n- else:\n- continue\n- # Reason to have this logic is sometimes though ENI status is AVAILABLE still attachment status exists and shows detached\n- # When we try to attach the ENI it throws error saying ENI is already attached to an instance. Added sleep to give time to complete the detachment\n- elif \"Attachment\" in eni_info and eni_status == \"available\":\n- if eni_info[\"Attachment\"][\"Status\"] == \"detached\":\n- eni_wait_to_detach_attachment(eni_id)\n-\n-\n- if eni_status != \"available\":\n- continue\n- \n-\n try:\n attachment = ec2_client.attach_network_interface(\n NetworkInterfaceId=eni_id,\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 36435"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:53:07.149Z",
|
||
"resultDisplay": "diff --git a/lambda/nodemanager.py b/lambda/nodemanager.py\nindex 94548b1..3fe18d7 100644\n--- a/lambda/nodemanager.py\n+++ b/lambda/nodemanager.py\n@@ -1,4 +1,4 @@\n-# Copyright (c) 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.\n+# Copyright 2002-2018 MarkLogic Corporation. All Rights Reserved.\n \n import boto3\n import botocore\n@@ -53,72 +53,6 @@ def eni_wait_for_attachment(eni_id):\n \"Waiting for network interface %s attachment timed out\" % eni_id\n )\n \n-def eni_wait_for_detachment(eni_id):\n- max_rety = 10\n- retries = 0\n- sleep_interval = 10\n- eni_info = None\n- while True and retries < max_rety:\n- try:\n- eni_info = ec2_resource.NetworkInterface(id=eni_id)\n- log.info(\"ENI Detachment status %s \" % eni_info.status)\n- except ClientError as e:\n- reason = \"Failed to get network interface by id %s\" % eni_id\n- log.exception(reason)\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n-\n- status = eni_info.status\n- if status == \"available\":\n- time.sleep(sleep_interval)\n- break\n- elif status == \"in-use\":\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n- else:\n- log.warning(\n- \"Network interface %s in unexpected status: %s\" % (eni_id, status)\n- )\n- retries += 1\n- continue\n- else:\n- log.warning(\n- \"Waiting for network interface %s detachment timed out\" % eni_id\n- )\n-\n-def eni_wait_to_detach_attachment(eni_id):\n- max_rety = 5\n- retries = 0\n- sleep_interval = 10\n- eni_info = None\n- while True and retries < max_rety:\n- try:\n- eni_info = ec2_resource.NetworkInterface(id=eni_id)\n- except ClientError as e:\n- reason = \"Failed to get network interface by id %s\" % eni_id\n- log.exception(reason)\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n-\n- status = eni_info.status\n- if not eni_info.attachment and status == \"available\":\n- break\n- elif eni_info.attachment and status == \"available\":\n- time.sleep(sleep_interval)\n- retries += 1\n- continue\n- elif status == \"in-use\":\n- break\n- else:\n- log.warning(\n- \"Waiting for network interface %s to detach attachment time out\" % eni_id\n- )\n- return status\n-\n-\n def handler(event, context):\n msg_text = event[\"Records\"][0][\"Sns\"][\"Message\"]\n msg = json.loads(msg_text)\n@@ -177,6 +111,10 @@ def on_launch(msg):\n \"Name\": \"tag:cluster-eni-id\",\n \"Values\": [tag]\n },\n+ {\n+ \"Name\": \"status\",\n+ \"Values\": [\"available\"]\n+ },\n {\n \"Name\": \"subnet-id\",\n \"Values\": [subnet_id]\n@@ -188,52 +126,7 @@ def on_launch(msg):\n continue\n # attach the available ENI\n for eni_info in response[\"NetworkInterfaces\"]:\n- log.info(\"ENI response %s\" % eni_info)\n eni_id = eni_info[\"NetworkInterfaceId\"]\n- eni_status = eni_info[\"Status\"]\n- if \"Attachment\" in eni_info and eni_status != \"available\":\n- attached_instance_id = eni_info[\"Attachment\"][\"InstanceId\"]\n- eni_attach_id = eni_info[\"Attachment\"][\"AttachmentId\"]\n- log.info(\"Actual Instance and ENI Status and ENI Attach ID %s %s %s \" % (\n- attached_instance_id, eni_status, eni_attach_id))\n-\n- try:\n- attached_instance_response = ec2_client.describe_instances(InstanceIds=[attached_instance_id])\n- except botocore.exceptions.ClientError as e:\n- reason = \"Failed to describe instance %s\" % instance_id\n- log.exception(reason)\n-\n- # Check if status is other than available and then check if actual instance is in shutting down or terminated status\n- if (attached_instance_response['Reservations'][0]['Instances'][0]['State']['Name']\n- in [\"shutting-down\", \"terminated\"]):\n- log.info(\"Attached Instance Response %s \" % attached_instance_response)\n- log.info(\"Manually detaching the ENI %s \" % eni_id)\n- # Logic to detach the ENI from the actual instance in shutting down or terminated status\n- try:\n- detach_response = ec2_client.detach_network_interface(\n- AttachmentId=eni_attach_id,\n- )\n- except botocore.exceptions.ClientError as e:\n- reason = \"Error detaching network interface %s\" % eni_id\n- log.exception(reason)\n- \n- eni_wait_for_detachment(eni_id)\n- eni_status = eni_wait_to_detach_attachment(eni_id)\n- log.info(\"ENI status check after detachment and detach attachment %s\" % eni_status)\n-\n- else:\n- continue\n- # Reason to have this logic is sometimes though ENI status is AVAILABLE still attachment status exists and shows detached\n- # When we try to attach the ENI it throws error saying ENI is already attached to an instance. Added sleep to give time to complete the detachment\n- elif \"Attachment\" in eni_info and eni_status == \"available\":\n- if eni_info[\"Attachment\"][\"Status\"] == \"detached\":\n- eni_wait_to_detach_attachment(eni_id)\n-\n-\n- if eni_status != \"available\":\n- continue\n- \n-\n try:\n attachment = ec2_client.attach_network_interface(\n NetworkInterfaceId=eni_id,",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "1ba0d692-b22f-4072-bb2c-96cd888e1311",
|
||
"timestamp": "2026-01-22T17:53:12.643Z",
|
||
"type": "gemini",
|
||
"content": "`dxw-11` adds a `status: available` filter to `lambda/nodemanager.py`. I'll check if `master`'s version has this filter.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Analyzing the Code Snippet",
|
||
"description": "I've just spotted a new addition in `lambda/nodemanager.py` within `dxw-11`. A `+` section, specifically lines related to a status check, has surfaced. I'm now examining the implications of this 'available' status filter, wondering how it interacts with the broader system's behavior. I need to understand its impact on filtering and resource availability.",
|
||
"timestamp": "2026-01-22T17:53:11.483Z"
|
||
},
|
||
{
|
||
"subject": "Confirming the Delta",
|
||
"description": "I'm verifying that the `status` filter, which I just saw, is absent in the `master` branch's `nodemanager.py`. This stark difference makes me question the purpose of this added status check within the `dxw-11` branch, and what impact that will have. A thorough comparison is next on my list.",
|
||
"timestamp": "2026-01-22T17:53:12.367Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 112518,
|
||
"output": 90,
|
||
"cached": 106988,
|
||
"thoughts": 178,
|
||
"tool": 0,
|
||
"total": 112786
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104392626-c6c7354b6dfc7",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"description": "Check the filter logic in master's nodemanager.py.",
|
||
"command": "grep -C 5 '\"Name\": \"tag:cluster-eni-id\"' lambda/nodemanager.py"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104392626-c6c7354b6dfc7",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"error": "[Operation Cancelled] Reason: User cancelled the operation."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "cancelled",
|
||
"timestamp": "2026-01-22T17:53:38.239Z",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "539c91c0-629d-4f22-861e-787057703ec1",
|
||
"timestamp": "2026-01-22T17:53:38.270Z",
|
||
"type": "info",
|
||
"content": "Request cancelled."
|
||
},
|
||
{
|
||
"id": "e41dc702-deb1-4e13-8a6a-f5593b150de5",
|
||
"timestamp": "2026-01-22T17:53:57.102Z",
|
||
"type": "user",
|
||
"content": "it was only the template i cared about."
|
||
},
|
||
{
|
||
"id": "d6435f26-f6ed-4328-821c-c8a4fe189e4e",
|
||
"timestamp": "2026-01-22T17:54:23.720Z",
|
||
"type": "gemini",
|
||
"content": "I will update the `NumberOfZones` description in `mlcluster.template` to match the version from the `dxw-11` branch.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Defining the scope",
|
||
"description": "I've homed in on the core task: migrating modifications in `mlcluster.template` from the `dxw-11` branch to `master`. I've started the porting process with `replace` and `write_file` operations, targeting the template file directly. The initial approach is now underway.",
|
||
"timestamp": "2026-01-22T17:54:09.997Z"
|
||
},
|
||
{
|
||
"subject": "Assessing the modifications",
|
||
"description": "I'm now carefully examining the changes I've made to the template file. I'm satisfied with the modifications of the `Metadata` and `Parameters` sections. I've successfully adjusted descriptions and default values. I've also implemented the resource additions and security group updates, including the load balancer configurations and listener resources. However, I need to make sure I implement the correction to the `NumberOfZones` description.",
|
||
"timestamp": "2026-01-22T17:54:12.569Z"
|
||
},
|
||
{
|
||
"subject": "Confirming the Changes",
|
||
"description": "I'm checking all the changes I've made so far against the user's intent to ensure nothing has been missed from the `mlcluster.template` diff. I've successfully incorporated the `ExternalAccessCidrIP` and `ECSSecurityGroup` updates to metadata and parameters and adjusted the parameter descriptions, default values, and resource additions. I'm now verifying the security group configurations and load balancer settings before finalizing.",
|
||
"timestamp": "2026-01-22T17:54:14.756Z"
|
||
},
|
||
{
|
||
"subject": "Verifying all resources",
|
||
"description": "I'm now carefully revisiting the modifications to ensure their accuracy. I've updated the `NumberOfZones` description to the `dxw-11` version. I'm also double-checking the security group configurations. In the `InstanceSecurityGroup` I've confirmed that the ingress rules allow traffic from both `ElbSecurityGroup` and `InternalElbSecurityGroup` with the specified ports. I am now checking the `ElbSecurityGroup` and `InternalElbSecurityGroup` resources.",
|
||
"timestamp": "2026-01-22T17:54:17.185Z"
|
||
},
|
||
{
|
||
"subject": "Reviewing and Refining",
|
||
"description": "I'm now comparing the `mlcluster.template` changes from `dxw-11` to my current version, checking for any missed details. I've confirmed `InstanceSecurityGroup` and `ElbSecurityGroup` settings. I will also update the `NumberOfZones` description and the `InstanceType` settings, keeping the latest instance types while adjusting the default.",
|
||
"timestamp": "2026-01-22T17:54:19.661Z"
|
||
},
|
||
{
|
||
"subject": "Concluding the Port",
|
||
"description": "I've now updated the `NumberOfZones` description to match the `dxw-11` version, addressing a key discrepancy. I've retained the more extensive `AllowedValues` for `InstanceType` while assessing the `Default` value. I also confirmed all `write_file` operations aligned with the intended changes. Finally, I'm removing the temporary files.",
|
||
"timestamp": "2026-01-22T17:54:22.091Z"
|
||
},
|
||
{
|
||
"subject": "Concluding the port's completion",
|
||
"description": "I've carefully reviewed all my operations and the diff, addressing all the core components. I've updated the description of `NumberOfZones`, matching the specifications. I am satisfied with retaining the `master`'s `AllowedValues` for `InstanceType`, while I'll consider altering the `Default` if there is a reason to do so. I've also verified that the `write_file` operations aligned with the intended changes. I'll remove the temporary files once and for all.",
|
||
"timestamp": "2026-01-22T17:54:23.244Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 112631,
|
||
"output": 183,
|
||
"cached": 11789,
|
||
"thoughts": 1765,
|
||
"tool": 0,
|
||
"total": 114579
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "replace-1769104463701-693d91e1ba18a8",
|
||
"name": "replace",
|
||
"args": {
|
||
"instruction": "Update the NumberOfZones description to clarify the relationship between zones and load balancer type.",
|
||
"old_string": " NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number",
|
||
"file_path": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"new_string": " NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer.\n Type: Number"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "replace-1769104463701-693d91e1ba18a8",
|
||
"name": "replace",
|
||
"response": {
|
||
"output": "Successfully modified file: /Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template (1 replacements)."
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:54:56.068Z",
|
||
"resultDisplay": {
|
||
"fileDiff": "Index: mlcluster.template\n===================================================================\n--- mlcluster.template\tCurrent\n+++ mlcluster.template\tProposed\n@@ -745,7 +745,7 @@\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n- Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n+ Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer.\n Type: Number\n AllowedValues:\n - 1\n",
|
||
"fileName": "mlcluster.template",
|
||
"filePath": "/Users/bob/git/dxw/marklogic-cf-templates/mlcluster.template",
|
||
"originalContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Select 3 zones for Application Load Balancer. Once the stack has been created, the number of Availability Zones cannot be changed.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n InternalElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: !Ref ExternalAccessCidrIP\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n MarklogicExternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n MarklogicExternal8011Listener:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - MarklogicExternal8011\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref MarklogicExternal8011\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8011\n Protocol: HTTP\n #Application Load Balancer description for MultiZone deployments (3 zones).\n InternalAlb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - InternalElbSecurityGroup\n Properties: \n Scheme: internal\n SecurityGroups: \n - !Ref InternalElbSecurityGroup\n Subnets:\n - !Ref PrivateSubnet1\n - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n MarklogicInternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n MarklogicInternal8011Listener:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - InternalAlb\n - MarklogicInternal8011\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref MarklogicInternal8011\n Type: forward\n LoadBalancerArn: !Ref InternalAlb\n Port: 8011\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'",
|
||
"newContent": "AWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n InternalElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: !Ref ExternalAccessCidrIP\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n MarklogicExternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n MarklogicExternal8011Listener:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - MarklogicExternal8011\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref MarklogicExternal8011\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8011\n Protocol: HTTP\n #Application Load Balancer description for MultiZone deployments (3 zones).\n InternalAlb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - InternalElbSecurityGroup\n Properties: \n Scheme: internal\n SecurityGroups: \n - !Ref InternalElbSecurityGroup\n Subnets:\n - !Ref PrivateSubnet1\n - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n MarklogicInternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n MarklogicInternal8011Listener:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - InternalAlb\n - MarklogicInternal8011\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref MarklogicInternal8011\n Type: forward\n LoadBalancerArn: !Ref InternalAlb\n Port: 8011\n Protocol: HTTP\nOutputs:\n URL:\n Description: The URL of the MarkLogic Cluster\n Value: !Join\n - ''\n - - 'http://'\n - !If [MultiZone, !GetAtt [Alb, DNSName], !GetAtt [ManagedEniStack, Outputs.ENI]]\n - ':8001'",
|
||
"diffStat": {
|
||
"model_added_lines": 1,
|
||
"model_removed_lines": 1,
|
||
"model_added_chars": 224,
|
||
"model_removed_chars": 204,
|
||
"user_added_lines": 0,
|
||
"user_removed_lines": 2024,
|
||
"user_added_chars": 0,
|
||
"user_removed_chars": 56156
|
||
},
|
||
"isNewFile": false
|
||
},
|
||
"displayName": "Edit",
|
||
"description": "Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when `expected_replacements` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the read_file tool to examine the file's current content before attempting a text replacement.\n \n The user has the ability to modify the `new_string` content. If modified, this will be stated in the response.\n \n Expectation for required parameters:\n 1. `old_string` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).\n 2. `new_string` MUST be the exact literal text to replace `old_string` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic and that `old_string` and `new_string` are different.\n 3. `instruction` is the detailed instruction of what needs to be changed. It is important to Make it specific and detailed so developers or large language models can understand what needs to be changed and perform the changes on their own if necessary. \n 4. NEVER escape `old_string` or `new_string`, that would break the exact literal text requirement.\n **Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for `old_string`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.\n 5. Prefer to break down complex and long changes into multiple smaller atomic calls to this tool. Always check the content of the file after changes or not finding a string to match.\n **Multiple replacements:** Set `expected_replacements` to the number of occurrences you want to replace. The tool will replace ALL occurrences that match `old_string` exactly. Ensure the number of replacements matches your expectation.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "3bf2e54d-421f-433c-a19f-38dfeb5f3b99",
|
||
"timestamp": "2026-01-22T17:55:02.484Z",
|
||
"type": "gemini",
|
||
"content": "I will remove the temporary files created during the porting process and then finalize the task.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Evaluating Template Updates",
|
||
"description": "I've successfully integrated the adjustments from `dxw-11` into the `mlcluster.template` residing on `master`. Specifically, I incorporated the `ExternalAccessCidrIP` and `ECSSecurityGroup` parameters and associated metadata. I've also refreshed the `VolumeSize` settings.",
|
||
"timestamp": "2026-01-22T17:55:00.354Z"
|
||
},
|
||
{
|
||
"subject": "Revising Configuration Details",
|
||
"description": "My recent efforts involved updating the `mlcluster.template` on `master` with specific enhancements. I've successfully incorporated changes from `dxw-11`, including the port `8011` addition. Furthermore, I revamped the security group rules and adjusted `VolumeSize ` to a default of 50. I've also updated the related descriptions, and have now added `InternalAlb` and associated resources to the template. I'm ready to purge the temporary files.",
|
||
"timestamp": "2026-01-22T17:55:02.242Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 112858,
|
||
"output": 51,
|
||
"cached": 108379,
|
||
"thoughts": 199,
|
||
"tool": 0,
|
||
"total": 113108
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "run_shell_command-1769104502479-e075008a7fe768",
|
||
"name": "run_shell_command",
|
||
"args": {
|
||
"command": "rm mlcluster.template.base mlcluster.template.dxw-11",
|
||
"description": "Remove temporary files."
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "run_shell_command-1769104502479-e075008a7fe768",
|
||
"name": "run_shell_command",
|
||
"response": {
|
||
"output": "Command: rm mlcluster.template.base mlcluster.template.dxw-11\nDirectory: (root)\nOutput: (empty)\nError: (none)\nExit Code: 0\nSignal: 0\nBackground PIDs: (none)\nProcess Group PGID: 36783"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:55:11.339Z",
|
||
"resultDisplay": "",
|
||
"displayName": "Shell",
|
||
"description": "This tool executes a given shell command as `bash -c <command>`. Command can start background processes using `&`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory where command was executed, or `(root)`.\n Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.\n Error: Error or `(none)` if no error was reported for the subprocess.\n Exit Code: Exit code or `(none)` if terminated by signal.\n Signal: Signal number or `(none)` if no signal was received.\n Background PIDs: List of background processes started or `(none)`.\n Process Group PGID: Process group started or `(none)`",
|
||
"renderOutputAsMarkdown": false
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "4f0e0e8d-40a0-4cb8-b9b6-174fcf23376f",
|
||
"timestamp": "2026-01-22T17:55:17.776Z",
|
||
"type": "gemini",
|
||
"content": "I will perform a final check of the `mlcluster.template` file content to ensure all changes were correctly applied and the file structure is sound.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Validating the changes",
|
||
"description": "I've just finished porting the template modifications. My next step involves meticulously reviewing the file content. I'm aiming to confirm that everything is accurate and conforms to the necessary standards.",
|
||
"timestamp": "2026-01-22T17:55:17.484Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 112979,
|
||
"output": 45,
|
||
"cached": 112038,
|
||
"thoughts": 31,
|
||
"tool": 0,
|
||
"total": 113055
|
||
},
|
||
"model": "gemini-3-flash-preview",
|
||
"toolCalls": [
|
||
{
|
||
"id": "read_file-1769104517764-938e25556d8ad8",
|
||
"name": "read_file",
|
||
"args": {
|
||
"file_path": "mlcluster.template"
|
||
},
|
||
"result": [
|
||
{
|
||
"functionResponse": {
|
||
"id": "read_file-1769104517764-938e25556d8ad8",
|
||
"name": "read_file",
|
||
"response": {
|
||
"output": "\nIMPORTANT: The file content has been truncated.\nStatus: Showing lines 1-2000 of 2027 total lines.\nAction: To read more of the file, you can use the 'offset' and 'limit' parameters in a subsequent 'read_file' call. For example, to read the next section of the file, use offset: 2000.\n\n--- FILE CONTENT (truncated) ---\nAWSTemplateFormatVersion: 2010-09-09\nDescription: Deploy a MarkLogic Cluster on AWS in existing VPC (Virtual Private Cloud).\nMetadata:\n version: 12.0.1\n binary: MarkLogic-12.0.1-rhel.x86_64.rpm\n AWS::CloudFormation::Interface:\n ParameterGroups:\n - Label:\n default: \"Resource Configuration\"\n Parameters:\n - IAMRole\n - VolumeSize\n - VolumeType\n - VolumeIOPS\n - VolumeThroughput\n - VolumeEncryption\n - VolumeEncryptionKey\n - InstanceType\n - SpotPrice\n - KeyName\n - NumberOfZones\n - NodesPerZone\n - AZ\n - LogSNS\n - Label:\n default: \"Network Configuration\"\n Parameters:\n - VPC\n - PublicSubnet1\n - PublicSubnet2\n - PublicSubnet3\n - PrivateSubnet1\n - PrivateSubnet2\n - PrivateSubnet3\n - ExternalAccessCidrIP\n - ECSSecurityGroup\n - Label:\n default: \"MarkLogic Configuration\"\n Parameters:\n - AdminUser\n - AdminPass\n - Licensee\n - LicenseKey\n ParameterLabels:\n AdminUser:\n default: Admin User\n AdminPass:\n default: Admin password\n Licensee:\n default: Licensee\n LicenseKey:\n default: License Key\n IAMRole:\n default: IAM Role\n LogSNS:\n default: Logging SNS ARN\n VolumeSize:\n default: Volume Size\n VolumeType:\n default: Volume Type\n VolumeIOPS:\n default: Volume Iops\n VolumeThroughput:\n default: Volume Throughput\n VolumeEncryption:\n default: Volume Encryption\n VolumeEncryptionKey:\n default: Volume Encryption Key ARN\n InstanceType:\n default: Instance Type\n SpotPrice:\n default: Spot Price\n KeyName:\n default: SSH Key Name\n NumberOfZones:\n default: Number of Zones\n NodesPerZone:\n default: Nodes per Zone\n AZ:\n default: Availability Zone\n VPC:\n default: VPC\n PublicSubnet1:\n default: Public Subnet 1\n PublicSubnet2:\n default: Public Subnet 2\n PublicSubnet3:\n default: Public Subnet 3\n PrivateSubnet1:\n default: Private Subnet 1\n PrivateSubnet2:\n default: Private Subnet 2\n PrivateSubnet3:\n default: Private Subnet 3\n ExternalAccessCidrIP:\n default: External IP address range for access to admin site\n ECSSecurityGroup:\n default: the security group the ecs cluster is in\nParameters:\n # resource configuration\n IAMRole:\n Description: IAM Role\n Type: String\n VolumeSize:\n Description: The EBS Data volume size (GB) for all nodes\n Type: Number\n MinValue: '10'\n MaxValue: '1000'\n Default: '50'\n VolumeType:\n Description: The EBS Data volume Type\n Type: String\n AllowedValues:\n - standard\n - gp2\n - gp3\n Default: gp3\n VolumeIOPS:\n Description: The number of I/O operations per second for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '3000'\n MaxValue: '16000'\n Default: '3000'\n VolumeThroughput:\n Description: The throughput to provision for a gp3 volume. This parameter is only applicable for a gp3 volume\n Type: Number\n MinValue: '125'\n MaxValue: '1000'\n Default: '125'\n VolumeEncryption:\n Description: Whether to enable volume encryption\n Type: String\n AllowedValues:\n - enable\n - disable\n Default: enable\n VolumeEncryptionKey:\n Description: The key ID of AWS KMS key to encrypt volumes - Optional\n Type: String\n Default: \"\"\n InstanceType:\n Description: Type of EC2 instance to launch\n Type: String\n Default: r5.4xlarge\n AllowedValues:\n - ---- Pay-As-You-Go and Bring-Your-Own-License ----\n - c3.xlarge\n - c3.2xlarge\n - c3.4xlarge\n - c3.8xlarge\n - c4.xlarge\n - c4.2xlarge\n - c4.4xlarge\n - c4.8xlarge\n - c5.xlarge\n - c5.2xlarge\n - c5.4xlarge\n - c5.9xlarge\n - c5.12xlarge\n - c5.18xlarge\n - c5.24xlarge\n - c5a.xlarge\n - c5a.2xlarge\n - c5a.4xlarge\n - c5a.8xlarge\n - c5a.12xlarge\n - c5a.16xlarge\n - c5a.24xlarge\n - c5ad.xlarge\n - c5ad.2xlarge\n - c5ad.4xlarge\n - c5ad.8xlarge\n - c5ad.12xlarge\n - c5ad.16xlarge\n - c5ad.24xlarge\n - c5d.xlarge\n - c5d.2xlarge\n - c5d.4xlarge\n - c5d.9xlarge\n - c5d.12xlarge\n - c5d.18xlarge\n - c5d.24xlarge\n - c5n.xlarge\n - c5n.2xlarge\n - c5n.4xlarge\n - c5n.9xlarge\n - c5n.18xlarge\n - c6a.xlarge\n - c6a.2xlarge\n - c6a.4xlarge\n - c6a.8xlarge\n - c6a.12xlarge\n - c6a.16xlarge\n - c6a.24xlarge\n - c6a.32xlarge\n - c6a.48xlarge\n - c6i.xlarge\n - c6i.2xlarge\n - c6i.4xlarge\n - c6i.8xlarge\n - c6i.12xlarge\n - c6i.16xlarge\n - c6i.24xlarge\n - c6i.32xlarge\n - c6id.xlarge\n - c6id.2xlarge\n - c6id.4xlarge\n - c6id.8xlarge\n - c6id.12xlarge\n - c6id.16xlarge\n - c6id.24xlarge\n - c6id.32xlarge\n - c7i.xlarge\n - c7i.2xlarge\n - c7i.4xlarge\n - c7i.8xlarge\n - c7i.12xlarge\n - c7i.16xlarge\n - c7i.24xlarge\n - c7i.48xlarge\n - c7i-flex.xlarge\n - c7i-flex.2xlarge\n - c7i-flex.4xlarge\n - c7i-flex.8xlarge\n - c7i-flex.12xlarge\n - c7i-flex.16xlarge\n - c7a.xlarge\n - c7a.2xlarge\n - c7a.4xlarge\n - c7a.8xlarge\n - c7a.12xlarge\n - c7a.16xlarge\n - c7a.24xlarge\n - c7a.32xlarge\n - c7a.48xlarge\n - c8i.xlarge\n - c8i.2xlarge\n - c8i.4xlarge\n - c8i.8xlarge\n - c8i.12xlarge\n - c8i.16xlarge\n - c8i.24xlarge\n - c8i.32xlarge\n - c8i.48xlarge\n - c8i.96xlarge\n - c8i-flex.xlarge\n - c8i-flex.2xlarge\n - c8i-flex.4xlarge\n - c8i-flex.8xlarge\n - c8i-flex.12xlarge\n - c8i-flex.16xlarge\n - i2.2xlarge\n - i2.4xlarge\n - i2.8xlarge\n - i2.xlarge\n - i3.xlarge\n - i3.2xlarge\n - i3.4xlarge\n - i3.8xlarge\n - i3.16xlarge\n - i3en.xlarge\n - i3en.2xlarge\n - i3en.3xlarge\n - i3en.6xlarge\n - i3en.12xlarge\n - i3en.24xlarge\n - i4i.xlarge\n - i4i.2xlarge\n - i4i.4xlarge\n - i4i.8xlarge\n - i4i.12xlarge\n - i4i.16xlarge\n - i4i.24xlarge\n - i4i.32xlarge\n - i7ie.xlarge\n - i7ie.2xlarge\n - i7ie.3xlarge\n - i7ie.6xlarge\n - i7ie.12xlarge\n - i7ie.18xlarge\n - i7ie.24xlarge\n - i7ie.48xlarge\n - m3.xlarge\n - m3.2xlarge\n - m4.xlarge\n - m4.2xlarge\n - m4.4xlarge\n - m4.10xlarge\n - m4.16xlarge\n - m5.xlarge\n - m5.2xlarge\n - m5.4xlarge\n - m5.8xlarge\n - m5.12xlarge\n - m5.16xlarge\n - m5.24xlarge\n - m5a.xlarge\n - m5a.2xlarge\n - m5a.4xlarge\n - m5a.8xlarge\n - m5a.12xlarge\n - m5a.16xlarge\n - m5a.24xlarge\n - m5d.xlarge\n - m5d.2xlarge\n - m5d.4xlarge\n - m5d.8xlarge\n - m5d.16xlarge\n - m5d.12xlarge\n - m5d.24xlarge\n - m5ad.xlarge\n - m5ad.2xlarge\n - m5ad.4xlarge\n - m5ad.8xlarge\n - m5ad.12xlarge\n - m5ad.16xlarge\n - m5ad.24xlarge\n - m5zn.xlarge\n - m5zn.2xlarge\n - m5zn.3xlarge\n - m5zn.6xlarge\n - m5zn.12xlarge\n - m5n.xlarge\n - m5n.2xlarge\n - m5n.4xlarge\n - m5n.8xlarge\n - m5n.12xlarge\n - m5n.16xlarge\n - m5n.24xlarge\n - m5dn.xlarge\n - m5dn.2xlarge\n - m5dn.4xlarge\n - m5dn.8xlarge\n - m5dn.12xlarge\n - m5dn.16xlarge\n - m5dn.24xlarge\n - m6a.xlarge\n - m6a.2xlarge\n - m6a.4xlarge\n - m6a.8xlarge\n - m6a.12xlarge\n - m6a.16xlarge\n - m6a.24xlarge\n - m6a.32xlarge\n - m6a.48xlarge\n - m6i.xlarge\n - m6i.2xlarge\n - m6i.4xlarge\n - m6i.8xlarge\n - m6i.12xlarge\n - m6i.16xlarge\n - m6i.24xlarge\n - m6i.32xlarge\n - m6id.xlarge\n - m6id.2xlarge\n - m6id.4xlarge\n - m6id.8xlarge\n - m6id.12xlarge\n - m6id.16xlarge\n - m6id.24xlarge\n - m6id.32xlarge\n - m7i.xlarge\n - m7i.2xlarge\n - m7i.4xlarge\n - m7i.8xlarge\n - m7i.12xlarge\n - m7i.16xlarge\n - m7i.24xlarge\n - m7i.48xlarge\n - m7i-flex.xlarge\n - m7i-flex.2xlarge\n - m7i-flex.4xlarge\n - m7i-flex.8xlarge\n - m7i-flex.12xlarge\n - m7i-flex.16xlarge\n - m7a.xlarge\n - m7a.2xlarge\n - m7a.4xlarge\n - m7a.8xlarge\n - m7a.12xlarge\n - m7a.16xlarge\n - m7a.24xlarge\n - m7a.32xlarge\n - m7a.48xlarge\n - m8a.xlarge\n - m8a.2xlarge\n - m8a.4xlarge\n - m8a.8xlarge\n - m8a.12xlarge\n - m8a.16xlarge\n - m8a.24xlarge\n - m8a.48xlarge\n - m8i.xlarge\n - m8i.2xlarge\n - m8i.4xlarge\n - m8i.8xlarge\n - m8i.12xlarge\n - m8i.16xlarge\n - m8i.24xlarge\n - m8i.32xlarge\n - m8i.48xlarge\n - m8i.96xlarge\n - m8i-flex.xlarge\n - m8i-flex.2xlarge\n - m8i-flex.4xlarge\n - m8i-flex.8xlarge\n - m8i-flex.12xlarge\n - m8i-flex.16xlarge\n - r3.xlarge\n - r3.2xlarge\n - r3.4xlarge\n - r3.8xlarge\n - r4.xlarge\n - r4.2xlarge\n - r4.4xlarge\n - r4.8xlarge\n - r4.16xlarge\n - r5.xlarge\n - r5.2xlarge\n - r5.4xlarge\n - r5.8xlarge\n - r5.12xlarge\n - r5.16xlarge\n - r5.24xlarge\n - r5a.xlarge\n - r5a.2xlarge\n - r5a.4xlarge\n - r5a.8xlarge\n - r5a.12xlarge\n - r5a.16xlarge\n - r5a.24xlarge\n - r5ad.xlarge\n - r5ad.2xlarge\n - r5ad.4xlarge\n - r5ad.8xlarge\n - r5ad.12xlarge\n - r5ad.16xlarge\n - r5ad.24xlarge\n - r5b.xlarge\n - r5b.2xlarge\n - r5b.4xlarge\n - r5b.8xlarge\n - r5b.12xlarge\n - r5b.16xlarge\n - r5b.24xlarge\n - r5d.xlarge\n - r5d.2xlarge\n - r5d.4xlarge\n - r5d.8xlarge\n - r5d.12xlarge\n - r5d.16xlarge\n - r5d.24xlarge\n - r5dn.xlarge\n - r5dn.2xlarge\n - r5dn.4xlarge\n - r5dn.8xlarge\n - r5dn.12xlarge\n - r5dn.16xlarge\n - r5dn.24xlarge\n - r5n.xlarge\n - r5n.2xlarge\n - r5n.4xlarge\n - r5n.8xlarge\n - r5n.12xlarge\n - r5n.16xlarge\n - r5n.24xlarge\n - r6a.xlarge\n - r6a.2xlarge\n - r6a.4xlarge\n - r6a.8xlarge\n - r6a.12xlarge\n - r6a.16xlarge\n - r6a.24xlarge\n - r6a.32xlarge\n - r6a.48xlarge\n - r6i.xlarge\n - r6i.2xlarge\n - r6i.4xlarge\n - r6i.8xlarge\n - r6i.12xlarge\n - r6i.16xlarge\n - r6i.24xlarge\n - r6i.32xlarge\n - r6id.xlarge\n - r6id.2xlarge\n - r6id.4xlarge\n - r6id.8xlarge\n - r6id.12xlarge\n - r6id.16xlarge\n - r6id.24xlarge\n - r6id.32xlarge\n - r7i.xlarge\n - r7i.2xlarge\n - r7i.4xlarge\n - r7i.8xlarge\n - r7i.12xlarge\n - r7i.16xlarge\n - r7i.24xlarge\n - r7i.48xlarge\n - r7iz.xlarge\n - r7iz.2xlarge\n - r7iz.4xlarge\n - r7iz.8xlarge\n - r7iz.12xlarge\n - r7iz.16xlarge\n - r7iz.32xlarge\n - r7a.xlarge\n - r7a.2xlarge\n - r7a.4xlarge\n - r7a.8xlarge\n - r7a.12xlarge\n - r7a.16xlarge\n - r7a.24xlarge\n - r7a.32xlarge\n - r7a.48xlarge\n - r8a.xlarge\n - r8a.2xlarge\n - r8a.4xlarge\n - r8a.8xlarge\n - r8a.12xlarge\n - r8a.16xlarge\n - r8a.24xlarge\n - r8a.48xlarge\n - r8i.xlarge\n - r8i.2xlarge\n - r8i.4xlarge\n - r8i.8xlarge\n - r8i.12xlarge\n - r8i.16xlarge\n - r8i.24xlarge\n - r8i.32xlarge\n - r8i.48xlarge\n - r8i.96xlarge\n - r8i-flex.xlarge\n - r8i-flex.2xlarge\n - r8i-flex.4xlarge\n - r8i-flex.8xlarge\n - r8i-flex.12xlarge\n - r8i-flex.16xlarge\n - x1.16xlarge\n - x1.32xlarge\n - x1e.xlarge\n - x1e.2xlarge\n - x1e.4xlarge\n - x1e.8xlarge\n - x1e.16xlarge\n - x1e.32xlarge\n - x2idn.16xlarge\n - x2idn.24xlarge\n - x2idn.32xlarge\n - x2iedn.xlarge\n - x2iedn.2xlarge\n - x2iedn.4xlarge\n - x2iedn.8xlarge\n - x2iedn.16xlarge\n - x2iedn.24xlarge\n - x2iedn.32xlarge\n - x2iezn.2xlarge\n - x2iezn.4xlarge\n - x2iezn.6xlarge\n - x2iezn.8xlarge\n - x2iezn.12xlarge\n - d2.xlarge\n - d2.2xlarge\n - d2.4xlarge\n - d2.8xlarge\n - d3.xlarge\n - d3.2xlarge\n - d3.4xlarge\n - d3.8xlarge\n - d3en.xlarge\n - d3en.2xlarge\n - d3en.4xlarge\n - d3en.6xlarge\n - d3en.8xlarge\n - d3en.12xlarge\n - dl1.24xlarge\n - h1.2xlarge\n - h1.4xlarge\n - h1.8xlarge\n - h1.16xlarge\n - inf1.xlarge\n - inf1.2xlarge\n - inf1.6xlarge\n - inf1.24xlarge\n - trn1.2xlarge\n - trn1.32xlarge\n - u-3tb1.56xlarge\n - u-6tb1.56xlarge\n - u-6tb1.112xlarge\n - u-9tb1.112xlarge\n - u-12tb1.112xlarge\n - u-18tb1.112xlarge\n - vt1.3xlarge\n - vt1.6xlarge\n - vt1.24xlarge\n - z1d.xlarge\n - z1d.2xlarge\n - z1d.3xlarge\n - z1d.6xlarge\n - z1d.12xlarge\n - -------------- Bring-Your-Own-License Only --------------\n - c3.large\n - c4.large\n - c5.metal\n - c5.large\n - c5a.large\n - c5ad.large\n - c5d.metal\n - c5d.large\n - c5n.large\n - c5n.metal\n - c6a.large\n - c6a.metal\n - c6i.large\n - c6i.metal\n - c6id.large\n - c6id.metal\n - c7i.large\n - c7i.metal-24xl\n - c7i.metal-48xl\n - c7i-flex.large\n - c7a.medium\n - c7a.large\n - c7a.metal-48xl\n - c8i.large\n - c8i.metal-48xl\n - c8i.metal-96xl\n - c8i-flex.large\n - i3.large\n - i3.metal\n - i3en.large\n - i3en.metal\n - i4i.large\n - i4i.metal\n - i7ie.large\n - i7ie.metal-24xl\n - i7ie.metal-48xl\n - m3.large\n - m3.medium\n - m4.large\n - m5.metal\n - m5.large\n - m5a.large\n - m5ad.large\n - m5d.metal\n - m5d.large\n - m5zn.large\n - m5zn.metal\n - m5n.large\n - m5n.metal\n - m5dn.large\n - m5dn.metal\n - m6a.large\n - m6a.metal\n - m6i.large\n - m6i.metal\n - m6id.large\n - m6id.metal\n - m7i.large\n - m7i.metal-24xl\n - m7i.metal-48xl\n - m7i-flex.large\n - m7a.medium\n - m7a.large\n - m7a.metal-48xl\n - m8a.medium\n - m8a.large\n - m8a.metal-24xl\n - m8a.metal-48xl\n - m8i.large\n - m8i.metal-48xl\n - m8i.metal-96xl\n - m8i-flex.large\n - r3.large\n - r4.large\n - r5.metal\n - r5.large\n - r5a.large\n - r5d.metal\n - r5ad.large\n - r5d.large\n - r5dn.large\n - r5dn.metal\n - r5b.large\n - r5b.metal\n - r5n.large\n - r5n.metal\n - r6a.large\n - r6a.metal\n - r6i.large\n - r6i.metal\n - r6id.large\n - r6id.metal\n - r7i.large\n - r7i.metal-24xl\n - r7i.metal-48xl\n - r7iz.large\n - r7iz.metal-16xl\n - r7iz.metal-32xl\n - r7a.medium\n - r7a.large\n - r7a.metal-48xl\n - r8a.medium\n - r8a.large\n - r8a.metal-24xl\n - r8a.metal-48xl\n - r8i.large\n - r8i.metal-48xl\n - r8i.metal-96xl\n - r8i-flex.large\n - t2.2xlarge\n - t2.large\n - t2.medium\n - t2.micro\n - t2.nano\n - t2.small\n - t2.xlarge\n - t3.2xlarge\n - t3.large\n - t3.medium\n - t3.micro\n - t3.nano\n - t3.small\n - t3.xlarge\n - t3a.2xlarge\n - t3a.large\n - t3a.medium\n - t3a.micro\n - t3a.nano\n - t3a.small\n - t3a.xlarge\n - x2idn.metal\n - x2iedn.metal\n - x2iezn.metal\n - z1d.metal\n - z1d.large\n SpotPrice:\n Description: Spot price for instances in USD/Hour - Optional/advanced\n Type: Number\n MinValue: '0'\n MaxValue: '2'\n Default: '0'\n KeyName:\n Description: Name of an existing EC2 KeyPair to enable SSH access to the instance\n Type: String\n NumberOfZones:\n Description: Total number of Availability Zones, which can be 1 or 3. Load balancer type depends on the number of zones selected. Select 3 zones for Application Load Balancer (OR) Select 1 zone for Classic Load Balancer.\n Type: Number\n AllowedValues:\n - 1\n - 3\n Default: 3\n NodesPerZone:\n Description: Total number of nodes per Zone. Set to 0 to shutdown/hibernate\n Type: Number\n MinValue: '0'\n MaxValue: '20'\n Default: '1'\n AZ:\n Description: The Availability Zones for VPC subnets. Accept either 1 zone or 3 zones. In the order of Subnet 1, Subnet 2 and Subnet 3 (if applicable).\n Type: 'List<AWS::EC2::AvailabilityZone::Name>'\n LogSNS:\n Description: SNS Topic for logging - optional/advanced.\n Type: String\n Default: none\n # network configuration\n VPC:\n Description: ID of an existing Virtual Private Cloud (VPC)\n Type: 'AWS::EC2::VPC::Id'\n PublicSubnet1:\n Description: The public subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet2:\n Description: The public subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PublicSubnet3:\n Description: The public subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three public subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet1:\n Description: The private subnet 1 in the VPC. This subnet must reside within the first selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet2:\n Description: The private subnet 2 in the VPC. This subnet must reside within the second selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n PrivateSubnet3:\n Description: The private subnet 3 in the VPC. This subnet must reside within the third selected Availability Zone (AZ). You must provide values for all three private subnets. If you only select one AZ, the second and third subnets will be ignored.\n Type: 'AWS::EC2::Subnet::Id'\n ExternalAccessCidrIP:\n Description: A CIDR IP range to allow external access from\n Type: String\n Default: 54.76.254.148/32\n ECSSecurityGroup:\n Description: the security group the ECS cluster is in\n Type: 'AWS::EC2::SecurityGroup::Id'\n\n # marklogic configuration\n AdminUser:\n Description: The MarkLogic administrator username\n Type: String\n AdminPass:\n Description: The MarkLogic administrator password\n Type: String\n NoEcho: 'true'\n AllowedPattern: >-\n ^(?!.*[*]).*$\n ConstraintDescription: Admin password must contain any characters except asterisk (*).\n Licensee:\n Description: The MarkLogic Licensee or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\n LicenseKey:\n Description: The MarkLogic License Key or 'none'. Provide none/none to choose \"Pay as you Go\"/Enterprise version. Provide valid Licensee/Licensekey to choose BYOL/developer version.\n Type: String\n Default: none\nConditions:\n UseLogSNS: !Not [!Equals [!Ref LogSNS, \"none\"]]\n UseSpot: !Not\n - !Equals\n - !Ref SpotPrice\n - 0\n #MultiZone (3 zones) and SingleZone conditions used for the conditional resource creation based on number of zones selected.\n MultiZone:\n !Not [!Equals [!Ref NumberOfZones, 1]]\n SingleZone: !Equals [!Ref NumberOfZones, 1]\n PAYG:\n !Or [ !And [!Equals [!Ref LicenseKey, ''], !Equals [!Ref Licensee, '']], !And [!Equals [!Ref LicenseKey, 'none'], !Equals [!Ref Licensee, 'none']] ]\n UseVolumeEncryption: !Equals [!Ref VolumeEncryption, 'enable']\n HasCustomEBSKey: !Not [!Equals [!Ref VolumeEncryptionKey, '']]\n GP3: !Equals [!Ref VolumeType, 'gp3']\nMappings:\n Variable:\n LambdaPackageBucket:\n base: 'ml-db-lambda-'\n TemplateUrl:\n base: 'https://s3.amazonaws.com/marklogic-db-template-releases'\n S3Directory:\n base: '12.0.1'\n LicenseRegion2AMI:\n us-east-1:\n PAYGAl2023: ami-0198b8931e9597271\n BYOLAl2023: ami-0a8536507241f95b0\n us-east-2:\n PAYGAl2023: ami-0877b64dae8264415\n BYOLAl2023: ami-082cc98b2c01e486a\n us-west-1:\n PAYGAl2023: ami-07890fc78f4ddfa20\n BYOLAl2023: ami-05c9a962410c2821b\n us-west-2:\n PAYGAl2023: ami-0577eb149c9e0f53f\n BYOLAl2023: ami-0262dd8d014bf71ba\n eu-central-1:\n PAYGAl2023: ami-06348556399c8ab69\n BYOLAl2023: ami-00cb5a3527e7c0d11\n eu-west-1:\n PAYGAl2023: ami-0fa7bc44cd9ab1f85\n BYOLAl2023: ami-0bc2b4d46367806b0\n ap-south-1:\n PAYGAl2023: ami-0f481ba0a6819ced6\n BYOLAl2023: ami-00b59374107e5efb6\n ap-southeast-1:\n PAYGAl2023: ami-0c373c6c8a2316c80\n BYOLAl2023: ami-0b9bd265ef165a07b\n ap-southeast-2:\n PAYGAl2023: ami-0c65a907408226a3e\n BYOLAl2023: ami-02bad1ef2c6d4a91a\n ap-northeast-1:\n PAYGAl2023: ami-0254bc4adaf13e3b9\n BYOLAl2023: ami-07e8b312b1016bf67\n ap-northeast-2:\n PAYGAl2023: ami-05995b5f5807873d7\n BYOLAl2023: ami-0afd77ba0d7a0c129\n sa-east-1:\n PAYGAl2023: ami-05ec8fee12de236a5\n BYOLAl2023: ami-09d883ea308449555\n eu-west-2:\n PAYGAl2023: ami-0f5cff9d243f31521\n BYOLAl2023: ami-0588d104a52fbc326\n ca-central-1:\n PAYGAl2023: ami-0f34d118b23b51bf5\n BYOLAl2023: ami-0c78eccd03e957005\n eu-west-3:\n PAYGAl2023: ami-01fa9155eb17992c5\n BYOLAl2023: ami-0637199acc5327534\nResources:\n ManagedEniStack:\n Type: AWS::CloudFormation::Stack\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n NodesPerZone: !Ref NodesPerZone\n NumberOfZones: !Ref NumberOfZones\n Subnets: !If [MultiZone, !Join [',', [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]], !Ref PrivateSubnet1]\n ParentStackName: !Ref 'AWS::StackName'\n ParentStackId: !Ref 'AWS::StackId'\n SecurityGroup: !Ref InstanceSecurityGroup\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-managedeni.template']]\n TimeoutInMinutes: 5\n NodeMgrLambdaStack:\n Type: AWS::CloudFormation::Stack\n DependsOn: ManagedEniStack\n Properties:\n NotificationARNs:\n - !If\n - UseLogSNS\n - !Ref LogSNS\n - !Ref 'AWS::NoValue'\n Parameters:\n S3Bucket: !Join [ \"\", [!FindInMap [Variable,\"LambdaPackageBucket\",\"base\"], !Ref 'AWS::Region']]\n S3Directory: !FindInMap [Variable,\"S3Directory\",\"base\"]\n TemplateURL: !Join ['/', [!FindInMap [Variable,\"TemplateUrl\",\"base\"],!FindInMap [Variable,\"S3Directory\",\"base\"],'ml-nodemanager.template']]\n TimeoutInMinutes: 5\n MarklogicVolume1:\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [0, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupA-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c81032f7-b0ec-47ca-a236-e24d57b49ae3\n MarklogicVolume2:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [1, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupB-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: ddb55ae1-a00b-42ed-addd-5e03e4a2764b\n MarklogicVolume3:\n Condition: MultiZone\n Type: 'AWS::EC2::Volume'\n Properties:\n AvailabilityZone: !Select [2, !Ref AZ]\n Size: !Ref VolumeSize\n Tags:\n - Key: Name\n Value: MarkLogic-GroupC-Host1-Volume0\n VolumeType: !Ref VolumeType\n Iops: !If [GP3, !Ref VolumeIOPS, !Ref 'AWS::NoValue']\n Throughput: !If [GP3, !Ref VolumeThroughput, !Ref 'AWS::NoValue']\n Encrypted: !If [UseVolumeEncryption, 'true', 'false']\n KmsKeyId: !If [HasCustomEBSKey, !Ref VolumeEncryptionKey, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 9094a65e-9d01-4c4c-9586-c33720e2cc9c\n MarkLogicDDBTable:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n AttributeDefinitions:\n - AttributeName: node\n AttributeType: S\n KeySchema:\n - KeyType: HASH\n AttributeName: node\n ProvisionedThroughput:\n WriteCapacityUnits: '10'\n ReadCapacityUnits: '10'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e7190602-c2de-47ab-81e7-1315f8c01e2d\n #AutoScalingGroup used for SingleZone deployments that is connected to Classic Load Balancer.\n MarkLogicServerGroup:\n Condition: SingleZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup1:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet1\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp1\n Version: !GetAtt LaunchTemp1.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 31621dd0-4b18-4dcd-b443-db9cef64ebb1\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup2:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet2\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp2\n Version: !GetAtt LaunchTemp2.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 87d75478-787a-41d5-bb21-9de6fe4b662e\n #AutoScalingGroup used for MultiZone deployments (3 zones) that is connected to Application Load Balancer via 9 TargetGroups.\n #All of the instances in this AutoScalingGroup will be registered to all 9 TargetGroups.\n MarkLogicServerGroup3:\n Condition: MultiZone\n Type: 'AWS::AutoScaling::AutoScalingGroup'\n DependsOn:\n - ManagedEniStack\n - NodeMgrLambdaStack\n - AlbTargetGroup1\n - AlbTargetGroup2\n - AlbTargetGroup3\n - AlbTargetGroup4\n - AlbTargetGroup5\n - AlbTargetGroup6\n - AlbTargetGroup7 \n - AlbTargetGroup8\n - AlbTargetGroup9\n - MarklogicExternal8011\n - MarklogicInternal8011\n Properties:\n VPCZoneIdentifier:\n - !Ref PrivateSubnet3\n LaunchTemplate: \n LaunchTemplateId: !Ref LaunchTemp3\n Version: !GetAtt LaunchTemp3.LatestVersionNumber\n MinSize: '0'\n MaxSize: !Ref NodesPerZone\n DesiredCapacity: !Ref NodesPerZone\n Cooldown: '300'\n HealthCheckType: EC2\n HealthCheckGracePeriod: '300'\n NotificationConfiguration: !If\n - UseLogSNS\n - TopicARN: !Ref LogSNS\n NotificationTypes:\n - 'autoscaling:EC2_INSTANCE_LAUNCH'\n - 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'\n - 'autoscaling:EC2_INSTANCE_TERMINATE'\n - 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'\n - !Ref 'AWS::NoValue'\n Tags:\n - Key: marklogic:stack:name\n Value: !Ref 'AWS::StackName'\n PropagateAtLaunch: 'true'\n - Key: marklogic:stack:id\n Value: !Ref 'AWS::StackId'\n PropagateAtLaunch: 'true'\n LifecycleHookSpecificationList:\n - LifecycleTransition: 'autoscaling:EC2_INSTANCE_LAUNCHING'\n LifecycleHookName: NodeManager\n HeartbeatTimeout: 4800\n NotificationTargetARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrSnsArn]\n RoleARN: !GetAtt [NodeMgrLambdaStack, Outputs.NodeMgrIamArn]\n TargetGroupARNs:\n - !Ref AlbTargetGroup1\n - !Ref AlbTargetGroup2\n - !Ref AlbTargetGroup3\n - !Ref AlbTargetGroup4\n - !Ref AlbTargetGroup5\n - !Ref AlbTargetGroup6\n - !Ref AlbTargetGroup7\n - !Ref AlbTargetGroup8\n - !Ref AlbTargetGroup9\n - !Ref MarklogicExternal8011\n - !Ref MarklogicInternal8011\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: bbd8314a-6e59-4102-9ed5-232739dd0dfa\n InstanceSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref ElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n - IpProtocol: tcp\n FromPort: '7999'\n ToPort: '7999'\n SourceSecurityGroupId: !Ref InternalElbSecurityGroup\n InstanceSecurityGroupIngress:\n Type: 'AWS::EC2::SecurityGroupIngress'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n IpProtocol: tcp\n FromPort: '0'\n ToPort: '65355'\n GroupId: !Ref InstanceSecurityGroup\n SourceSecurityGroupId: !Ref InstanceSecurityGroup\n InternalElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Allow access from ECS clsuter to internal ALB for marklogic cluster.\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n SourceSecurityGroupId: !Ref ECSSecurityGroup\n ElbSecurityGroup:\n Type: 'AWS::EC2::SecurityGroup'\n Properties:\n GroupDescription: Enable SSH access and HTTP access on the inbound port\n VpcId: !Ref VPC\n SecurityGroupIngress:\n - IpProtocol: tcp\n FromPort: '22'\n ToPort: '22'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7998'\n ToPort: '7998'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '8000'\n ToPort: '8011'\n CidrIp: !Ref ExternalAccessCidrIP\n - IpProtocol: tcp\n FromPort: '7997'\n ToPort: '7997'\n CidrIp: !Ref ExternalAccessCidrIP\n LaunchTemp1:\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume1\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeA#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=1\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 2efb8cfb-df53-401d-8ff2-34af0dd25993\n LaunchTemp2:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume2\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeB#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: c8296a50-a29e-4646-aa74-8f1b735a9a3f\n LaunchTemp3:\n Condition: MultiZone\n Type: 'AWS::EC2::LaunchTemplate'\n DependsOn:\n - InstanceSecurityGroup\n Properties:\n LaunchTemplateData:\n BlockDeviceMappings:\n - DeviceName: /dev/xvda\n Ebs:\n VolumeSize: 40\n - DeviceName: /dev/sdf\n NoDevice: true\n Ebs: {}\n KeyName: !Ref KeyName\n ImageId: !If [PAYG, !FindInMap [LicenseRegion2AMI,!Ref 'AWS::Region',\"PAYGAl2023\"], !FindInMap [LicenseRegion2AMI, !Ref 'AWS::Region', \"BYOLAl2023\"]]\n UserData: !Base64\n 'Fn::Join':\n - ''\n - - MARKLOGIC_CLUSTER_NAME=\n - !Ref MarkLogicDDBTable\n - |+\n\n - MARKLOGIC_EBS_VOLUME=\n - !Ref MarklogicVolume3\n - ',:'\n - !Ref VolumeSize\n - '::'\n - !Ref VolumeType\n - ':'\n - !If\n - GP3\n - !Ref VolumeIOPS\n - ''\n - ':'\n - !If\n - GP3\n - !Ref VolumeThroughput\n - ''\n - |\n :,*\n - |\n MARKLOGIC_NODE_NAME=NodeC#\n - MARKLOGIC_ADMIN_USERNAME=\n - !Ref AdminUser\n - |+\n\n - MARKLOGIC_ADMIN_PASSWORD=\n - !Ref AdminPass\n - |+\n\n - |\n MARKLOGIC_CLUSTER_MASTER=0\n - MARKLOGIC_LICENSEE=\n - !Ref Licensee\n - |+\n\n - MARKLOGIC_LICENSE_KEY=\n - !Ref LicenseKey\n - |+\n\n - MARKLOGIC_LOG_SNS=\n - !Ref LogSNS\n - |+\n\n - MARKLOGIC_AWS_SWAP_SIZE=\n - 32\n - |+\n\n - !If\n - UseVolumeEncryption\n - !Join\n - ''\n - - 'MARKLOGIC_EBS_KEY='\n - !If\n - HasCustomEBSKey\n - !Ref VolumeEncryptionKey\n - 'default'\n - ''\n\n SecurityGroupIds:\n - !Ref InstanceSecurityGroup\n InstanceType: !Ref InstanceType\n IamInstanceProfile: \n Name: !Ref IAMRole\n MetadataOptions:\n HttpTokens: required\n InstanceMarketOptions: !If\n - UseSpot\n - MarketType: spot \n SpotOptions: \n MaxPrice: !Ref SpotPrice\n - !Ref 'AWS::NoValue'\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: 7fa68c90-39bc-4874-ad20-8cd8c974ed52\n #Application Load Balancer description for MultiZone deployments (3 zones).\n Alb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - ElbSecurityGroup\n Properties: \n SecurityGroups: \n - !Ref ElbSecurityGroup\n Subnets:\n - !Ref PublicSubnet1\n - !If [MultiZone, !Ref PublicSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PublicSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 9 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n AlbTargetGroup1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8000\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8001\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8002\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8003\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8004\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8005\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8006\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8007\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n AlbTargetGroup9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8008\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n MarklogicExternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type\n Value: lb_cookie\n - Key: stickiness.lb_cookie.duration_seconds\n Value: 3600\n - Key: deregistration_delay.timeout_seconds\n Value: 60\n VpcId: !Ref VPC\n #Descriptions of the 9 Listeners for MultiZone deployments (3 zones). Each Listener connects Application Load Balancer to a TargetGroup with a particular port.\n AlbListener1:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup1\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup1\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8000\n Protocol: HTTP\n AlbListener2:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup2\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup2\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8001\n Protocol: HTTP\n AlbListener3:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup3\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup3\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8002\n Protocol: HTTP\n AlbListener4:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup4\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup4\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8003\n Protocol: HTTP\n AlbListener5:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup5\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup5\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8004\n Protocol: HTTP\n AlbListener6:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup6\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup6\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8005\n Protocol: HTTP\n AlbListener7:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup7\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup7\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8006\n Protocol: HTTP\n AlbListener8:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup8\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup8\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8007\n Protocol: HTTP\n AlbListener9:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - AlbTargetGroup9\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref AlbTargetGroup9\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8008\n Protocol: HTTP\n MarklogicExternal8011Listener:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::Listener\"\n DependsOn:\n - Alb\n - MarklogicExternal8011\n Properties:\n DefaultActions:\n - TargetGroupArn: !Ref MarklogicExternal8011\n Type: forward\n LoadBalancerArn: !Ref Alb\n Port: 8011\n Protocol: HTTP\n #Application Load Balancer description for MultiZone deployments (3 zones).\n InternalAlb:\n Condition: MultiZone\n Type: AWS::ElasticLoadBalancingV2::LoadBalancer\n DependsOn:\n - InternalElbSecurityGroup\n Properties: \n Scheme: internal\n SecurityGroups: \n - !Ref InternalElbSecurityGroup\n Subnets:\n - !Ref PrivateSubnet1\n - !If [MultiZone, !Ref PrivateSubnet2, !Ref 'AWS::NoValue']\n - !If [MultiZone, !Ref PrivateSubnet3, !Ref 'AWS::NoValue']\n Metadata:\n 'AWS::CloudFormation::Designer':\n id: e188e71e-5f01-4816-896e-9bd30b9a96c1\n #Descriptions of the 1 TargetGroups for MultiZone deployments (3 zones). TargetGroups route requests to registered targets.\n #Health checks are performed on each TargetGroup.\n MarklogicInternal8011:\n Condition: MultiZone\n Type: \"AWS::ElasticLoadBalancingV2::TargetGroup\"\n Properties:\n HealthCheckIntervalSeconds: 10\n HealthCheckTimeoutSeconds: 5\n HealthyThresholdCount: 3\n HealthCheckPort: 7997\n UnhealthyThresholdCount: 5\n Port: 8011\n Protocol: HTTP\n TargetGroupAttributes:\n - Key: stickiness.enabled\n Value: true\n - Key: stickiness.type"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"status": "success",
|
||
"timestamp": "2026-01-22T17:55:17.807Z",
|
||
"resultDisplay": "Read lines 1-2000 of 2027 from mlcluster.template",
|
||
"displayName": "ReadFile",
|
||
"description": "Reads and returns the content of a specified file. If the file is large, the content will be truncated. The tool's response will clearly indicate if truncation has occurred and will provide details on how to read more of the file using the 'offset' and 'limit' parameters. Handles text, images (PNG, JPG, GIF, WEBP, SVG, BMP), audio files (MP3, WAV, AIFF, AAC, OGG, FLAC), and PDF files. For text files, it can read specific line ranges.",
|
||
"renderOutputAsMarkdown": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "5c154ab7-3208-44e0-b7b7-c539198bdc5a",
|
||
"timestamp": "2026-01-22T17:55:23.879Z",
|
||
"type": "gemini",
|
||
"content": "I have successfully ported the infrastructure changes from the `dxw-11` branch to the `master` branch within the `mlcluster.template` file. \n\nKey improvements ported include:\n- **Enhanced Security**: Restricted `ElbSecurityGroup` access to a configurable `ExternalAccessCidrIP` and updated `InstanceSecurityGroup` to only allow traffic from internal and external load balancers.\n- **Internal Load Balancing**: Added an `InternalAlb` along with an `InternalElbSecurityGroup` to facilitate secure internal cluster communication.\n- **Port 8011 Support**: Added target groups and listeners for port `8011` on both internal and external load balancers.\n- **Updated Defaults**: Increased the default `VolumeSize` to 50GB and updated the `VolumeType` to `gp3`.\n- **Improved Metadata**: Clarified the relationship between Availability Zones and load balancer types in the parameter descriptions.\n\nThe `master` branch's newer features, such as the expanded list of supported EC2 instance types and the use of Launch Templates, have been preserved.",
|
||
"thoughts": [
|
||
{
|
||
"subject": "Confirming File Changes",
|
||
"description": "I've successfully migrated the modifications from the `dxw-11` template to the `master` template. My attention is now fixed on verifying the `URL` output section. Expect a thorough review of the URL generation logic before I sign off.",
|
||
"timestamp": "2026-01-22T17:55:21.522Z"
|
||
},
|
||
{
|
||
"subject": "Verifying Output Logic",
|
||
"description": "The file migration is complete, and the `URL` output section has been confirmed as accurate following the porting from the `dxw-11` template. I've re-evaluated the URL generation logic within the `master` template and find it aligns with the infrastructure changes. All is in order.",
|
||
"timestamp": "2026-01-22T17:55:22.712Z"
|
||
}
|
||
],
|
||
"tokens": {
|
||
"input": 132643,
|
||
"output": 232,
|
||
"cached": 0,
|
||
"thoughts": 167,
|
||
"tool": 0,
|
||
"total": 133042
|
||
},
|
||
"model": "gemini-3-flash-preview"
|
||
},
|
||
{
|
||
"id": "be95c4b7-6742-4878-8726-86fd4136a491",
|
||
"timestamp": "2026-01-22T17:56:04.764Z",
|
||
"type": "user",
|
||
"content": "exit"
|
||
},
|
||
{
|
||
"id": "c9825259-c0ab-4ce9-beb8-937e91e1841b",
|
||
"timestamp": "2026-01-22T17:56:29.415Z",
|
||
"type": "info",
|
||
"content": "Request cancelled."
|
||
}
|
||
],
|
||
"summary": "Port template changes from dxw-11 to master"
|
||
} |