The root folder of this repo shows an example of Terraform code that uses the
couchbase-cluster
module to deploy a Couchbase cluster in AWS. The cluster
consists of one Auto Scaling Group (ASG) that runs all Couchbase services and Sync Gateway:
This example also deploys a Load Balancer in front of the Couchbase cluster using the load-balancer
module.
To see an example of the Couchbase services and Sync Gateway deployed in separate clusters, see the couchbase-cluster-mds
example. For
more info on how the Couchbase cluster works, check out the
couchbase-cluster documentation.
Quick start
To deploy a Couchbase Cluster:
git clone this repo to your computer.
Optional: build a custom Couchbase AMI. See the
couchbase-ami example
documentation for instructions. Make sure to note down the ID of the AMI.
Open the variables.tf file in the root of this repo, set the environment variables specified at the top of the
file, and fill in any other variables that don't have a default. If you built a custom AMI, put its ID into the
ami_id variable. If you didn't, this example will use public AMIs that Gruntwork has published, which are fine for
testing/learning, but not recommended for production use.
Run terraform init in the root folder of this repo.
Run terraform apply in the root folder of this repo.
{"treedata":{"name":"root","toggled":true,"children":[{"name":".circleci","children":[{"name":"config.yml","path":".circleci/config.yml","sha":"193cb67012263437903101c15897eb82471f70fc"},{"name":"publish-amis.sh","path":".circleci/publish-amis.sh","sha":"abb6cf0e36e53f65074d47170f147d06036f5797"}]},{"name":".gitignore","path":".gitignore","sha":"85435101db88fb540a38f4b6dfa03ffd79d97633"},{"name":".pre-commit-config.yaml","path":".pre-commit-config.yaml","sha":"1142c08a1fb176570e5470375e110838234ebfa4"},{"name":".pre-commit-hooks.yaml","path":".pre-commit-hooks.yaml","sha":"92462242c5c4a3aa0f5d5f5b19a81811c71e4b49"},{"name":"CODEOWNERS","path":"CODEOWNERS","sha":"28333bea0519ace338740140eff651c08cbf27d7"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","sha":"de3aa54eede67b6eddf1776e08f8441973f57fc1"},{"name":"LICENSE","path":"LICENSE","sha":"7a4a3ea2424c09fbe48d455aed1eaa94d9124835"},{"name":"NOTICE","path":"NOTICE","sha":"77030eb8f10190ffd42c28bb41922f8c91b089a1"},{"name":"README.md","path":"README.md","sha":"ddbfff5345200723a3881695f9e8fd3cd6d4bb77"},{"name":"_docs","children":[{"name":"couchbase-multi-cluster-architecture.png","path":"_docs/couchbase-multi-cluster-architecture.png","sha":"60ec0e7cca94e2400662b7ed8565833b84f142be"},{"name":"couchbase-multi-datacenter-replication-architecture.png","path":"_docs/couchbase-multi-datacenter-replication-architecture.png","sha":"d19384e42f436e9a96ae112853e679208d8cc513"},{"name":"couchbase-multi-datacenter-replication-architecture.psd","path":"_docs/couchbase-multi-datacenter-replication-architecture.psd","sha":"9750878217d877c6fed0d70c57d4e4f1ed732a4a"},{"name":"couchbase-single-cluster-architecture.png","path":"_docs/couchbase-single-cluster-architecture.png","sha":"448144c58bddc5bf46c096289344d66733bc7592"}]},{"name":"examples","children":[{"name":"couchbase-ami","children":[{"name":"README.md","path":"examples/couchbase-ami/README.md","sha":"db19908786e1f925f14a63e9f74e12be68ecea41"},{"name":"couchbase.json","path":"examples/couchbase-ami/couchbase.json","sha":"2071002cbd823dbdca82d0fa2df41d5edabd993d"},{"name":"sync_gateway.json","path":"examples/couchbase-ami/sync_gateway.json","sha":"067df37d31d51feae93105d11ed8d1539f7c6e3a"}]},{"name":"couchbase-cluster-mds","children":[{"name":"README.md","path":"examples/couchbase-cluster-mds/README.md","sha":"ad316fdc85a5687e6310614d1d48f6fa9dcc33bc"},{"name":"local-test","children":[{"name":".env","path":"examples/couchbase-cluster-mds/local-test/.env","sha":"fb429afef6ea74aa33abe5e4319b3538a2bd7263"},{"name":"docker-compose.yml","path":"examples/couchbase-cluster-mds/local-test/docker-compose.yml","sha":"791983d4ac39cc4ff6f7f613e1d78976287f6dbf"}]},{"name":"main.tf","path":"examples/couchbase-cluster-mds/main.tf","sha":"cd89e4c4b2139134ceefcc709a00543e843adf54"},{"name":"outputs.tf","path":"examples/couchbase-cluster-mds/outputs.tf","sha":"4a60475339777bdbf95b6045d7d2e956c2dbe927"},{"name":"user-data","children":[{"name":"user-data-couchbase-data-nodes.sh","path":"examples/couchbase-cluster-mds/user-data/user-data-couchbase-data-nodes.sh","sha":"feb4ae958397c19ded82e21fb60578fbb1ac19e3"},{"name":"user-data-couchbase-index-query-search-nodes.sh","path":"examples/couchbase-cluster-mds/user-data/user-data-couchbase-index-query-search-nodes.sh","sha":"c13d780c95601b1bfa157d65329312866a18f3ff"},{"name":"user-data-sync-gateway.sh","path":"examples/couchbase-cluster-mds/user-data/user-data-sync-gateway.sh","sha":"99aa5e77cfff2774bd0020d51ea6ba77a49a3674"}]},{"name":"variables.tf","path":"examples/couchbase-cluster-mds/variables.tf","sha":"779b652d4ae2bee64e852131b9ca85f39f0bdfd8"}]},{"name":"couchbase-cluster-simple-dns-tls","children":[{"name":"README.md","path":"examples/couchbase-cluster-simple-dns-tls/README.md","sha":"d2e537222684a472713c29292f4160f811b3ed62"},{"name":"local-test","children":[{"name":".env","path":"examples/couchbase-cluster-simple-dns-tls/local-test/.env","sha":"fb429afef6ea74aa33abe5e4319b3538a2bd7263"},{"name":"docker-compose.yml","path":"examples/couchbase-cluster-simple-dns-tls/local-test/docker-compose.yml","sha":"e8980454ea06f365ee92df93aaf6b007c20437cf"}]},{"name":"main.tf","path":"examples/couchbase-cluster-simple-dns-tls/main.tf","sha":"21623b967fa4e0f2224d89cec5ea8d4a9a67d028"},{"name":"outputs.tf","path":"examples/couchbase-cluster-simple-dns-tls/outputs.tf","sha":"bf8c18b332125a2e0e68e210b26fa48dd6594039"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/couchbase-cluster-simple-dns-tls/user-data/user-data.sh","sha":"bf62d443d7e8226ee7630d5807b3e4be533151f8"}]},{"name":"variables.tf","path":"examples/couchbase-cluster-simple-dns-tls/variables.tf","sha":"c4b4418dc839693bd8dbde269a82ac31ef03ce7c"}]},{"name":"couchbase-cluster-simple","children":[{"name":"README.md","path":"examples/couchbase-cluster-simple/README.md","sha":"e4126f146380b68bca8e2075b3579c32d564a2f5","toggled":true},{"name":"local-test","children":[{"name":".env","path":"examples/couchbase-cluster-simple/local-test/.env","sha":"fb429afef6ea74aa33abe5e4319b3538a2bd7263"},{"name":"docker-compose.yml","path":"examples/couchbase-cluster-simple/local-test/docker-compose.yml","sha":"e8980454ea06f365ee92df93aaf6b007c20437cf"}]},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/couchbase-cluster-simple/user-data/user-data.sh","sha":"f5107d31dd228a3268a894f86978fa30abc29d20"}]}],"toggled":true},{"name":"couchbase-multi-datacenter-replication","children":[{"name":"README.md","path":"examples/couchbase-multi-datacenter-replication/README.md","sha":"e7b299a03d14f1ff713fc57363d6c9e250bbc1ed"},{"name":"local-test","children":[{"name":".env","path":"examples/couchbase-multi-datacenter-replication/local-test/.env","sha":"6112e2bcb38259397b81257ebbf422ebaccec068"},{"name":"docker-compose.yml","path":"examples/couchbase-multi-datacenter-replication/local-test/docker-compose.yml","sha":"12db84e3008f3498f58fe6bb64afcf4d69448410"}]},{"name":"main.tf","path":"examples/couchbase-multi-datacenter-replication/main.tf","sha":"5773fad2e489d3cefd5a2e03de92c83a886c1263"},{"name":"outputs.tf","path":"examples/couchbase-multi-datacenter-replication/outputs.tf","sha":"b176beecefad8213f0c8d953cb1451deb827dba8"},{"name":"user-data","children":[{"name":"user-data-primary.sh","path":"examples/couchbase-multi-datacenter-replication/user-data/user-data-primary.sh","sha":"71a34464aaee5f324190f9fa60f620769a9923a8"},{"name":"user-data-replica.sh","path":"examples/couchbase-multi-datacenter-replication/user-data/user-data-replica.sh","sha":"aa410fd045f04a9788a7b09fa5fb2c03970a5f0e"}]},{"name":"variables.tf","path":"examples/couchbase-multi-datacenter-replication/variables.tf","sha":"99c18d0b5dcda11b3999a3cae808f80944be9255"}]},{"name":"local-mocks","children":[{"name":"README.md","path":"examples/local-mocks/README.md","sha":"4c6d80b3998e1027f5c2a4c71715772b81830b31"},{"name":"aws.sh","path":"examples/local-mocks/aws.sh","sha":"20408cfe23eb7a3cf2451fbb7d8214a0b746b1cc"},{"name":"entrypoint.sh","path":"examples/local-mocks/entrypoint.sh","sha":"51c897ba4b159e58381eb23b760c84696dc9b681"},{"name":"mount-volume.sh","path":"examples/local-mocks/mount-volume.sh","sha":"c9fa0b283e7ce1a0b1652dc4565bfe2740dcc820"}]}],"toggled":true},{"name":"main.tf","path":"main.tf","sha":"1868c0ad8ffa0ce7ebbe695d733820e3ea188426"},{"name":"modules","children":[{"name":"couchbase-cluster","children":[{"name":"README.md","path":"modules/couchbase-cluster/README.md","sha":"bb1edabb679a103375a61ed16fa0ad6f63991a50"},{"name":"main.tf","path":"modules/couchbase-cluster/main.tf","sha":"ed88c06cd25e6926b9b228a1eb66a35b52880070"},{"name":"outputs.tf","path":"modules/couchbase-cluster/outputs.tf","sha":"43f4b8d33b580deface276e3f49680e26daf7b7c"},{"name":"variables.tf","path":"modules/couchbase-cluster/variables.tf","sha":"188c2383e0211961663d26d98216ac3dd0a76418"}]},{"name":"couchbase-commons","children":[{"name":"README.md","path":"modules/couchbase-commons/README.md","sha":"f1367ace90480981e5dceba2c7cb84f6878a1fb8"},{"name":"couchbase-common.sh","path":"modules/couchbase-commons/couchbase-common.sh","sha":"6ef25a60dabe4182d0805d115a6fed1cba5422a0"},{"name":"couchbase-rally-point","path":"modules/couchbase-commons/couchbase-rally-point","sha":"103bc2dbc4b2a7d51b56f08eb186ce2f00b323c7"},{"name":"mount-volume.sh","path":"modules/couchbase-commons/mount-volume.sh","sha":"3767b9a3ea78e4fa1f48f29866dcef430a5fa9fe"}]},{"name":"couchbase-iam-policies","children":[{"name":"README.md","path":"modules/couchbase-iam-policies/README.md","sha":"922154296ebbb41e9343b0ead8fb469007944048"},{"name":"main.tf","path":"modules/couchbase-iam-policies/main.tf","sha":"e29f3ca8e36f743680465589e7a154d986a28367"},{"name":"variables.tf","path":"modules/couchbase-iam-policies/variables.tf","sha":"26ac224bac34cf635bff250be92515b7b6f97070"}]},{"name":"couchbase-server-security-group-rules","children":[{"name":"README.md","path":"modules/couchbase-server-security-group-rules/README.md","sha":"208e46d7c9647c61941dd77b212009fab3d16fd5"},{"name":"main.tf","path":"modules/couchbase-server-security-group-rules/main.tf","sha":"5d0f320b8f97d6f9855e748495c8e27315d47522"},{"name":"outputs.tf","path":"modules/couchbase-server-security-group-rules/outputs.tf","sha":"4c5c8af8a2fb065200fdc7090a9c1b5cd226d5d6"},{"name":"variables.tf","path":"modules/couchbase-server-security-group-rules/variables.tf","sha":"1f00f38fc9e89210f0ca8bc2189d6615a9e4481b"}]},{"name":"install-couchbase-server","children":[{"name":"README.md","path":"modules/install-couchbase-server/README.md","sha":"c61cfa9d91a6fdaf8b269dbe9e00018addb74786"},{"name":"disable-thp","path":"modules/install-couchbase-server/disable-thp","sha":"2ead9b6e580a16712375f207ba4261884157f88e"},{"name":"install-couchbase-server","path":"modules/install-couchbase-server/install-couchbase-server","sha":"ebee490745cf82f243b3521a6f723a50c76ac57d"}]},{"name":"install-sync-gateway","children":[{"name":"README.md","path":"modules/install-sync-gateway/README.md","sha":"abf0948beecb4ab06a9d55c402d8c1b444d95c6d"},{"name":"install-sync-gateway","path":"modules/install-sync-gateway/install-sync-gateway","sha":"4b1d60c9e73bc5d10801bb80949708efe8f0b311"}]},{"name":"load-balancer-target-group","children":[{"name":"README.md","path":"modules/load-balancer-target-group/README.md","sha":"b71f21e4aa7c506b9a4df23919e2e844609c6b73"},{"name":"main.tf","path":"modules/load-balancer-target-group/main.tf","sha":"e466de27ac669e03b3e6074a3e5d3c7ca5beb2e8"},{"name":"outputs.tf","path":"modules/load-balancer-target-group/outputs.tf","sha":"c66bcfb9097a75d942502aa134cdc1809e108e28"},{"name":"variables.tf","path":"modules/load-balancer-target-group/variables.tf","sha":"d0bbba3368e012a21a9254b54606dab54f44a20f"}]},{"name":"load-balancer","children":[{"name":"README.md","path":"modules/load-balancer/README.md","sha":"c3e457f41ef1b3797e96bd395931b4b86d8763f7"},{"name":"main.tf","path":"modules/load-balancer/main.tf","sha":"b2125b3f14f65a38814e1babddca7ca321701064"},{"name":"outputs.tf","path":"modules/load-balancer/outputs.tf","sha":"74124a4d0972376f7756ba927604637536b4a7b6"},{"name":"variables.tf","path":"modules/load-balancer/variables.tf","sha":"990d99f7ef2bc15d0656b66c8640e01393f9d10b"}]},{"name":"run-couchbase-server","children":[{"name":"README.md","path":"modules/run-couchbase-server/README.md","sha":"e76309c1cec9658a928bc868a21efac02312e72f"},{"name":"run-couchbase-server","path":"modules/run-couchbase-server/run-couchbase-server","sha":"625f642186f6d10e1e2e7870da264a462bc18554"}]},{"name":"run-replication","children":[{"name":"README.md","path":"modules/run-replication/README.md","sha":"70b7aa50e06d1c390b2f7921e8293c4e45de4fae"},{"name":"run-replication","path":"modules/run-replication/run-replication","sha":"419c2f1cca183fd2f1fd9a94a11ba587609edded"}]},{"name":"run-sync-gateway","children":[{"name":"README.md","path":"modules/run-sync-gateway/README.md","sha":"0a0d2c6391c30545d5e80fb1f34b568c6231cee4"},{"name":"run-sync-gateway","path":"modules/run-sync-gateway/run-sync-gateway","sha":"8f827839afe57bd36a4a6c35ef2a169fa6992054"}]},{"name":"sync-gateway-security-group-rules","children":[{"name":"README.md","path":"modules/sync-gateway-security-group-rules/README.md","sha":"f5e50b67844506d15a277e3578105dc3a1225c95"},{"name":"main.tf","path":"modules/sync-gateway-security-group-rules/main.tf","sha":"87028ff2de4562224ec2d20986acbe1eb4faaeee"},{"name":"outputs.tf","path":"modules/sync-gateway-security-group-rules/outputs.tf","sha":"20655ee9c7729f093241ec28e31b197e7d4fbdca"},{"name":"variables.tf","path":"modules/sync-gateway-security-group-rules/variables.tf","sha":"cf39a81712ec01fc36b9f83dd7e62226b1d08a60"}]}]},{"name":"outputs.tf","path":"outputs.tf","sha":"4138cc3c41b0d5ebf4ce088431332550eb503e10"},{"name":"test","children":[{"name":"Gopkg.lock","path":"test/Gopkg.lock","sha":"42577e372ee9d685a77d83537a631f1d6c18fdf5"},{"name":"Gopkg.toml","path":"test/Gopkg.toml","sha":"4925cde6b22bd6697a2f5fb81a86ba60628786a5"},{"name":"README.md","path":"test/README.md","sha":"36e97d94c441e302871e22126004113f3ffb84d1"},{"name":"couchbase_helpers.go","path":"test/couchbase_helpers.go","sha":"43bddbac0885037fcadcdcf81ccafdeeabe16a37"},{"name":"couchbase_multi_cluster_test.go","path":"test/couchbase_multi_cluster_test.go","sha":"3f4ce22c64179b7c04710e7903dc616722215131"},{"name":"couchbase_multi_datacenter_replication_test.go","path":"test/couchbase_multi_datacenter_replication_test.go","sha":"cdb6df8391670b38cb7185d97f3522eabba7cee4"},{"name":"couchbase_single_cluster_dns_tls_test.go","path":"test/couchbase_single_cluster_dns_tls_test.go","sha":"0fd10dc7be5d802ad648fec8d486f81d681ebfc0"},{"name":"couchbase_single_cluster_test.go","path":"test/couchbase_single_cluster_test.go","sha":"4defb9cda7c5b2d0077849b4869d6c72c0876456"},{"name":"docker_compose_test.go","path":"test/docker_compose_test.go","sha":"29c79d54d53f5858a9ad3713ff80d1799d63a9f3"},{"name":"terratest_helpers.go","path":"test/terratest_helpers.go","sha":"29cc6e09e083f421dbfc153990b3d3fe9cc8cf76"}]},{"name":"variables.tf","path":"variables.tf","sha":"e463cef71c94336b5f14de9f3ddc1cdf7d4edaec"}]},"detailsContent":"<h1 class=\"preview__body--title\" id=\"couchbase-single-cluster-example\">Couchbase Single Cluster Example</h1><div class=\"preview__body--border\"></div><p>The root folder of this repo shows an example of Terraform code that uses the\n<a href=\"/repos/v0.2.2/terraform-aws-couchbase/modules/couchbase-cluster\" class=\"preview__body--description--blue\">couchbase-cluster</a>\nmodule to deploy a <a href=\"https://www.couchbase.com/\" class=\"preview__body--description--blue\" target=\"_blank\">Couchbase</a> cluster in <a href=\"https://aws.amazon.com/\" class=\"preview__body--description--blue\" target=\"_blank\">AWS</a>. The cluster\nconsists of one Auto Scaling Group (ASG) that runs all Couchbase services and Sync Gateway:</p>\n<p><img src=\"/repos/images/v0.2.2/terraform-aws-couchbase/_docs/couchbase-single-cluster-architecture.png?raw=true\" alt=\"Couchbase single-cluster architecture\" class=\"preview__body--diagram\"></p>\n<p>This example also deploys a Load Balancer in front of the Couchbase cluster using the <a href=\"/repos/v0.2.2/terraform-aws-couchbase/modules/load-balancer\" class=\"preview__body--description--blue\">load-balancer\nmodule</a>.</p>\n<p>You will need to create an <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html\" class=\"preview__body--description--blue\" target=\"_blank\">Amazon Machine Image (AMI)</a>\nthat has Couchbase installed, which you can do using the <a href=\"/repos/v0.2.2/terraform-aws-couchbase/examples/couchbase-ami\" class=\"preview__body--description--blue\">couchbase-ami\nexample</a>).</p>\n<p>To see an example of the Couchbase services and Sync Gateway deployed in separate clusters, see the <a href=\"/repos/v0.2.2/terraform-aws-couchbase/examples/couchbase-cluster-mds\" class=\"preview__body--description--blue\">couchbase-cluster-mds\nexample</a>. For\nmore info on how the Couchbase cluster works, check out the\n<a href=\"/repos/v0.2.2/terraform-aws-couchbase/modules/couchbase-cluster\" class=\"preview__body--description--blue\">couchbase-cluster</a> documentation.</p>\n<h2 class=\"preview__body--subtitle\" id=\"quick-start\">Quick start</h2>\n<p>To deploy a Couchbase Cluster:</p>\n<ol>\n<li><code>git clone</code> this repo to your computer.</li>\n<li>Optional: build a custom Couchbase AMI. See the\n<a href=\"/repos/v0.2.2/terraform-aws-couchbase/examples/couchbase-ami\" class=\"preview__body--description--blue\">couchbase-ami example</a>\ndocumentation for instructions. Make sure to note down the ID of the AMI.</li>\n<li>Install <a href=\"https://www.terraform.io/\" class=\"preview__body--description--blue\" target=\"_blank\">Terraform</a>.</li>\n<li>Open the <code>variables.tf</code> file in the root of this repo, set the environment variables specified at the top of the\nfile, and fill in any other variables that don't have a default. If you built a custom AMI, put its ID into the\n<code>ami_id</code> variable. If you didn't, this example will use public AMIs that Gruntwork has published, which are fine for\ntesting/learning, but not recommended for production use.</li>\n<li>Run <code>terraform init</code> in the root folder of this repo.</li>\n<li>Run <code>terraform apply</code> in the root folder of this repo.</li>\n</ol>\n<h2 class=\"preview__body--subtitle\" id=\"connecting-to-the-cluster\">Connecting to the cluster</h2>\n<p>Check out <a href=\"/repos/v0.2.2/terraform-aws-couchbase/modules/couchbase-cluster#how-do-you-connect-to-the-couchbase-cluster\" class=\"preview__body--description--blue\">How do you connect to the Couchbase\ncluster</a>\ndocumentation. To log into the Couchbase Web Console, use the username and password from the <code>cluster_username</code>\nand <code>cluster_password</code> vars in\n<a href=\"/repos/v0.2.2/terraform-aws-couchbase/examples/couchbase-cluster-simple/user-data/user-data.sh\" class=\"preview__body--description--blue\">user-data.sh</a>.</p>\n<p>Note that booting up and rebalancing a Couchbase cluster can take 5 - 10 minutes, depending on the number and types of\ninstances.</p>\n","repoName":"terraform-aws-couchbase","repoRef":"v0.2.2","serviceDescriptor":{"serviceName":"Couchbase","serviceRepoName":"terraform-aws-couchbase","serviceRepoOrg":"gruntwork-io","cloudProviders":["aws"],"description":"Deploy a Couchbase cluster. Supports automatic bootstrapping, Sync Gateway, Web Console UI, cross-region replication, and auto healing.","imageUrl":"couchbase.png","licenseType":"open-source","technologies":["Terraform","Bash"],"compliance":[],"tags":[""]},"serviceCategoryName":"NoSQL","fileName":"README.md","filePath":"/examples/couchbase-cluster-simple","title":"Repo Browser: Couchbase","description":"Browse the repos in the Gruntwork Infrastructure as Code Library."}