{"id":8019,"date":"2024-07-02T14:55:42","date_gmt":"2024-07-02T12:55:42","guid":{"rendered":"https:\/\/www.credativ.de\/?p=8019"},"modified":"2024-07-02T13:22:11","modified_gmt":"2024-07-02T11:22:11","slug":"instaclustr-managed-postgres-with-terraform-part-1","status":"publish","type":"post","link":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/","title":{"rendered":"Instaclustr Managed Postgres with Terraform Part 1"},"content":{"rendered":"<p><a href=\"https:\/\/www.terraform.io\/\">Hashicorp Terraform<\/a> is a well-known infrastructure automation tool mostly targeting cloud deployments. <a href=\"https:\/\/www.instaclustr.com\/\">Instaclustr<\/a> (a part of NetApp\u2019s CloudOps division and credativ\u2019s parent company) provides a managed service for various data stores, including PostgreSQL. Provisioning managed clusters is possible via the <a href=\"https:\/\/console2.instaclustr.com\/\">Instaclustr console<\/a>, a <a href=\"https:\/\/www.instaclustr.com\/support\/api-integrations\/api-reference\/provisioning-api\/\">REST API<\/a> or through the <a href=\"https:\/\/registry.terraform.io\/providers\/instaclustr\/instaclustr\/latest\">Instaclustr Terraform Provider<\/a>.<\/p>\n<p>In this first part of a blog series, it is shown how a Postgres cluster can be provisioned using the Instaclustr Terraform Provider, including whitelisting the IP address and finally connecting to it via the <code>psql<\/code> command-line client.<\/p>\n<h2 id=\"initial-setup\">Initial Setup<\/h2>\n<p>The general requirement is having an account for the Instaclustr Managed service. The web console is located at <a class=\"uri\" href=\"https:\/\/console2.instaclustr.com\/\">https:\/\/console2.instaclustr.com\/<\/a>. Next, a provisioning API key needs to be created if not available already, as explained <a href=\"https:\/\/www.instaclustr.com\/support\/documentation\/console-features\/api-keys\/\">here<\/a>.<\/p>\n<p>Terraform providers are usually defined and configured in a file called <code>provider.tf<\/code>. For the Instaclustr Terraform provider, this means adding it to the list of required providers and setting the API key mentioned above:<\/p>\n<pre class=\"hcl\"><code>terraform {\r\n  required_providers {\r\n    instaclustr = {\r\n      source  = \"instaclustr\/instaclustr\"\r\n      version = \"&gt;= 2.0.0, &lt; 3.0.0\"\r\n    }\r\n  }\r\n}\r\n\r\nvariable \"ic_username\" {\r\n  type = string\r\n}\r\nvariable \"ic_api_key\" {\r\n  type = string\r\n}\r\n\r\nprovider \"instaclustr\" {\r\n    terraform_key = \"Instaclustr-Terraform ${var.ic_username}:${var.ic_api_key}\"\r\n}<\/code><\/pre>\n<p>Here, <code>ic_username<\/code> and <code>ic_api_key<\/code> are defined as variables. They should be set in a <code>terraform.tfvars<\/code> file in the same directory<\/p>\n<pre><code>ic_username       = \"username\"\r\nic_api_key        = \"0db87a8bd1[...]\"<\/code><\/pre>\n<p>As the final preparatory step, Terraform needs to be initialized, installing the provider:<\/p>\n<pre><code>$ terraform init\r\n\r\nInitializing the backend...\r\n\r\nInitializing provider plugins...\r\n- Finding instaclustr\/instaclustr versions matching \"&gt;= 2.0.0, &lt; 3.0.0\"...\r\n- Installing instaclustr\/instaclustr v2.0.136...\r\n- Installed instaclustr\/instaclustr v2.0.136 (self-signed, key ID 58D5F4E6CBB68583)\r\n\r\n[...]\r\n\r\nTerraform has been successfully initialized!<\/code><\/pre>\n<h2 id=\"defining-resources\">Defining Resources<\/h2>\n<p>Terraform resources define infrastructure objects, in our case a managed PostgreSQL cluster. Customarily, they are defined in a <code>main.tf<\/code> file, but any other file name can be chosen:<\/p>\n<pre class=\"hcl\"><code>resource \"instaclustr_postgresql_cluster_v2\" \"main\" {\r\n  name                    = \"username-test1\"\r\n  postgresql_version      = \"16.2.0\"\r\n  private_network_cluster = false\r\n  sla_tier                = \"NON_PRODUCTION\"\r\n  synchronous_mode_strict = false\r\n  data_centre {\r\n    name                         = \"AWS_VPC_US_EAST_1\"\r\n    cloud_provider               = \"AWS_VPC\"\r\n    region                       = \"US_EAST_1\"\r\n    node_size                    = \"PGS-DEV-t4g.small-5\"\r\n    number_of_nodes              = \"2\"\r\n    network                      = \"10.4.0.0\/16\"\r\n    client_to_cluster_encryption = true\r\n    intra_data_centre_replication {\r\n      replication_mode           = \"ASYNCHRONOUS\"\r\n    }\r\n    inter_data_centre_replication {\r\n      is_primary_data_centre = true\r\n    }\r\n  }\r\n}<\/code><\/pre>\n<p>The above defines a 2-node cluster named <code>username-test1<\/code> (and referred to internally as <code>main<\/code> by Terraform) in the AWS <code>US_EAST_1<\/code> region with <code>PGS-DEV-t4g.small-5<\/code> instance sizes (2 vCores, 2 GB RAM, 5 GB data disk) for the nodes. Test\/developer instance sizes for the other cloud providers would be:<\/p>\n<table>\n<colgroup>\n<col style=\"width: 17%;\" \/>\n<col style=\"width: 17%;\" \/>\n<col style=\"width: 35%;\" \/>\n<col style=\"width: 11%;\" \/>\n<col style=\"width: 8%;\" \/>\n<col style=\"width: 9%;\" \/> <\/colgroup>\n<thead>\n<tr class=\"header\">\n<th>Cloud Provider<\/th>\n<th>Default Region<\/th>\n<th>Instance Size<\/th>\n<th>Data Disk<\/th>\n<th>RAM<\/th>\n<th>CPU<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"odd\">\n<td><code>AWS_VPC<\/code><\/td>\n<td><code>US_EAST_1<\/code><\/td>\n<td><code>PGS-DEV-t4g.small-5<\/code><\/td>\n<td>5 GB<\/td>\n<td>2 GB<\/td>\n<td>2 Cores<\/td>\n<\/tr>\n<tr class=\"even\">\n<td><code>AWS_VPC<\/code><\/td>\n<td><code>US_EAST_1<\/code><\/td>\n<td><code>PGS-DEV-t4g.medium-30<\/code><\/td>\n<td>30 GB<\/td>\n<td>4 GB<\/td>\n<td>2 Cores<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td><code>AZURE_AZ<\/code><\/td>\n<td><code>CENTRAL_US<\/code><\/td>\n<td><code>PGS-DEV-Standard_DS1_v2-5-an<\/code><\/td>\n<td>5 GB<\/td>\n<td>3.5 GB<\/td>\n<td>1 Core<\/td>\n<\/tr>\n<tr class=\"even\">\n<td><code>AZURE_AZ<\/code><\/td>\n<td><code>CENTRAL_US<\/code><\/td>\n<td><code>PGS-DEV-Standard_DS1_v2-30-an<\/code><\/td>\n<td>30 GB<\/td>\n<td>3.5 GB<\/td>\n<td>1 Core<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td><code>GCP<\/code><\/td>\n<td><code>us-west1<\/code><\/td>\n<td><code>PGS-DEV-n2-standard-2-5<\/code><\/td>\n<td>5 GB<\/td>\n<td>8 GB<\/td>\n<td>2 Cores<\/td>\n<\/tr>\n<tr class=\"even\">\n<td><code>GCP<\/code><\/td>\n<td><code>us-west1<\/code><\/td>\n<td><code>PGS-DEV-n2-standard-2-30<\/code><\/td>\n<td>30 GB<\/td>\n<td>8 GB<\/td>\n<td>2 Core<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Other instance sizes or regions can be looked up in the console or in the section <code>node_size<\/code> of the <a href=\"https:\/\/registry.terraform.io\/providers\/instaclustr\/instaclustr\/latest\/docs\/resources\/postgresql_cluster_v2#nested-schema-for-data_centre\">Instaclustr Terraform Provider documentation<\/a>.<\/p>\n<h2 id=\"running-terraform\">Running Terraform<\/h2>\n<p>Before letting Terraform provision the defined resources, it is best-practice to run <code>terraform plan<\/code>. This lets Terraform plan the provisioning as a dry-run, and makes it possible to review the expected actions before creating any actual infrastructure:<\/p>\n<pre><code>$ terraform plan\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are\r\nindicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # instaclustr_postgresql_cluster_v2.main will be created\r\n  + resource \"instaclustr_postgresql_cluster_v2\" \"main\" {\r\n      + current_cluster_operation_status = (known after apply)\r\n      + default_user_password            = (sensitive value)\r\n      + description                      = (known after apply)\r\n      + id                               = (known after apply)\r\n      + name                             = \"username-test1\"\r\n      + pci_compliance_mode              = (known after apply)\r\n      + postgresql_version               = \"16.2.0\"\r\n      + private_network_cluster          = false\r\n      + sla_tier                         = \"NON_PRODUCTION\"\r\n      + status                           = (known after apply)\r\n      + synchronous_mode_strict          = false\r\n\r\n      + data_centre {\r\n          + client_to_cluster_encryption     = true\r\n          + cloud_provider                   = \"AWS_VPC\"\r\n          + custom_subject_alternative_names = (known after apply)\r\n          + id                               = (known after apply)\r\n          + name                             = \"AWS_VPC_US_EAST_1\"\r\n          + network                          = \"10.4.0.0\/16\"\r\n          + node_size                        = \"PGS-DEV-t4g.small-5\"\r\n          + number_of_nodes                  = 2\r\n          + provider_account_name            = (known after apply)\r\n          + region                           = \"US_EAST_1\"\r\n          + status                           = (known after apply)\r\n\r\n          + intra_data_centre_replication {\r\n              + replication_mode = \"ASYNCHRONOUS\"\r\n            }\r\n        }\r\n    }\r\n\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n[...]\r\n<\/code><\/pre>\n<p>When the planned output looks reasonable, it can be applied via <code>terraform apply<\/code>:<\/p>\n<pre><code>$ terraform apply\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are\r\nindicated with the following symbols:\r\n  + create\r\n[...]\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n\r\nDo you want to perform these actions?\r\n  Terraform will perform the actions described above.\r\n  Only 'yes' will be accepted to approve.\r\n\r\n  Enter a value: yes\r\n\r\ninstaclustr_postgresql_cluster_v2.main: Creating...\r\ninstaclustr_postgresql_cluster_v2.main: Still creating... [10s elapsed]\r\n[...]\r\ninstaclustr_postgresql_cluster_v2.main: Creation complete after 5m37s [id=704e1c20-bda6-410c-b95b-8d22ef3f5a04]\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.<\/code><\/pre>\n<p>That is it! The PostgreSQL cluster is now up and running after barely 5 minutes.<\/p>\n<h2 id=\"ip-whitelisting\">IP Whitelisting<\/h2>\n<p>In order to access the PostgreSQL cluster, firewall rules need to be defined for IP-whitelisting. In general, any network address block can be defined, but in order to allow access from the host running Terraform, a firewall rule for the local public IP address can be set via a service like <a href=\"https:\/\/icanhazip.com\">icanhazip.com<\/a>, appending to <code>main.tf<\/code>:<\/p>\n<pre class=\"hcl\"><code>data \"http\" \"myip\" {\r\n  url = \"https:\/\/ipecho.net\/plain\"\r\n}\r\n\r\nresource \"instaclustr_cluster_network_firewall_rules_v2\" \"main\" {\r\n  cluster_id = resource.instaclustr_postgresql_cluster_v2.main.id\r\n\r\n  firewall_rule {\r\n    network = \"${chomp(data.http.myip.response_body)}\/32\"\r\n    type    = \"POSTGRESQL\"\r\n  }\r\n}<\/code><\/pre>\n<p>The usage of the <code>http<\/code> Terraform module also needs an update to the <code>providers.tf<\/code> file, adding it to the list of required providers:<\/p>\n<pre class=\"hcl\"><code>terraform {\r\n  required_providers {\r\n    instaclustr = {\r\n      source  = \"instaclustr\/instaclustr\"\r\n      version = \"&gt;= 2.0.0, &lt; 3.0.0\"\r\n    }\r\n    http = {\r\n      source = \"hashicorp\/http\"\r\n      version = \"3.4.3\"\r\n    }\r\n  }\r\n}<\/code><\/pre>\n<p>And a subsequent re-run of <code>terraform init<\/code>, followed by <code>terraform apply<\/code>:<\/p>\n<pre><code>$ terraform init\r\n\r\nInitializing the backend...\r\n\r\nInitializing provider plugins...\r\n- Reusing previous version of instaclustr\/instaclustr from the dependency lock file\r\n- Finding hashicorp\/http versions matching \"3.4.3\"...\r\n- Using previously-installed instaclustr\/instaclustr v2.0.136\r\n- Installing hashicorp\/http v3.4.3...\r\n- Installed hashicorp\/http v3.4.3 (signed by HashiCorp)\r\n\r\n[...]\r\nTerraform has been successfully initialized!\r\n[...]\r\n\r\n$ terraform apply\r\n\r\ndata.http.myip: Reading...\r\ninstaclustr_postgresql_cluster_v2.main: Refreshing state... [id=704e1c20-bda6-410c-b95b-8d22ef3f5a04]\r\ndata.http.myip: Read complete after 1s [id=https:\/\/ipv4.icanhazip.com]\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are\r\nindicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # instaclustr_cluster_network_firewall_rules_v2.main will be created\r\n  + resource \"instaclustr_cluster_network_firewall_rules_v2\" \"main\" {\r\n      + cluster_id = \"704e1c20-bda6-410c-b95b-8d22ef3f5a04\"\r\n      + id         = (known after apply)\r\n      + status     = (known after apply)\r\n\r\n      + firewall_rule {\r\n          + deferred_reason = (known after apply)\r\n          + id              = (known after apply)\r\n          + network         = \"123.134.145.5\/32\"\r\n          + type            = \"POSTGRESQL\"\r\n        }\r\n    }\r\n\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n\r\nDo you want to perform these actions?\r\n  Terraform will perform the actions described above.\r\n  Only 'yes' will be accepted to approve.\r\n\r\n  Enter a value: yes\r\n\r\ninstaclustr_cluster_network_firewall_rules_v2.main: Creating...\r\ninstaclustr_cluster_network_firewall_rules_v2.main: Creation complete after 2s [id=704e1c20-bda6-410c-b95b-8d22ef3f5a04]\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.<\/code><\/pre>\n<h2 id=\"connecting-to-the-cluster\">Connecting to the Cluster<\/h2>\n<p>In order to connect to the newly-provisioned Postgres cluster, we need the public IP addresses of the nodes, and the password of the administrative database user, <code>icpostgresql<\/code>. Those are retrieved and stored in the Terraform state by the Instaclustr Terraform provider, by default in a local file <code>terraform.tfstate<\/code>. To secure the password, one can change the password after initial connection, secure the host Terraform is run from, or <a href=\"https:\/\/developer.hashicorp.com\/terraform\/language\/settings\/backends\/remote\">store the Terraform state remotely<\/a>.<\/p>\n<p>The combined connection string can be setup as an output variable in a <code>outputs.tf<\/code> file:<\/p>\n<pre class=\"hcl\"><code>output \"connstr\" {\r\n  value = format(\"host=%s user=icpostgresql password=%s dbname=postgres target_session_attrs=read-write\",\r\n          join(\",\", [for node in instaclustr_postgresql_cluster_v2.main.data_centre[0].nodes:\r\n               format(\"%s\", node.public_address)]),\r\n                      instaclustr_postgresql_cluster_v2.main.default_user_password\r\n                )\r\n  sensitive = true\r\n}<\/code><\/pre>\n<p>After another <code>terraform apply<\/code> to set the output variable, it is possible to connect to the PostgreSQL cluster without having to type or paste the default password via:<\/p>\n<pre><code>$ psql \"$(terraform output -raw connstr)\"\r\npsql (16.3 (Debian 16.3-1.pgdg120+1), server 16.2 (Debian 16.2-1.pgdg110+2))\r\nSSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)\r\nType \"help\" for help.\r\n\r\npostgres=&gt; <\/code><\/pre>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>In this first part, the provisioning of an Instaclustr Managed PostgreSQL cluster with Terraform was demonstrated. In the next part of this blog series, we plan to present a Terraform module that makes it even easier to provision PostgreSQL clusters. We will also check out which input variables can be set to further customize the managed PostgreSQL cluster.<\/p>\n<p>Instaclustr offers a 30-day free trial for its managed service which allows to provision clusters with development instance sizes, so you can <a href=\"https:\/\/console2.instaclustr.com\/signup\">signup<\/a> and try the above yourself today!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hashicorp Terraform is a well-known infrastructure automation tool mostly targeting cloud deployments. Instaclustr (a part of NetApp\u2019s CloudOps division and credativ\u2019s parent company) provides a managed service for various data stores, including PostgreSQL. Provisioning managed clusters is possible via the Instaclustr console, a REST API or through the Instaclustr Terraform Provider. In this first part [&hellip;]<\/p>\n","protected":false},"author":37,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1708,1951],"tags":[1725,1801,1952],"class_list":["post-8019","post","type-post","status-publish","format-standard","hentry","category-postgresql-en","category-terraform","tag-instaclustr-en","tag-postgresql-en","tag-terraform"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Instaclustr Managed Postgres with Terraform Part 1 - credativ\u00ae<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Instaclustr Managed Postgres with Terraform Part 1\" \/>\n<meta property=\"og:description\" content=\"Hashicorp Terraform is a well-known infrastructure automation tool mostly targeting cloud deployments. Instaclustr (a part of NetApp\u2019s CloudOps division and credativ\u2019s parent company) provides a managed service for various data stores, including PostgreSQL. Provisioning managed clusters is possible via the Instaclustr console, a REST API or through the Instaclustr Terraform Provider. In this first part [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"credativ\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/credativDE\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-02T12:55:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/07\/Portfolio-Loesungen.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"550\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Michael Banck\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@credativde\" \/>\n<meta name=\"twitter:site\" content=\"@credativde\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Banck\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/\"},\"author\":{\"name\":\"Michael Banck\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/038c79105ce9b5fd885631da3f806698\"},\"headline\":\"Instaclustr Managed Postgres with Terraform Part 1\",\"datePublished\":\"2024-07-02T12:55:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/\"},\"wordCount\":669,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"keywords\":[\"Instaclustr\",\"PostgreSQL\u00ae\",\"Terraform\"],\"articleSection\":[\"PostgreSQL\u00ae\",\"Terraform\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/#respond\"]}],\"copyrightYear\":\"2024\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/\",\"name\":\"Instaclustr Managed Postgres with Terraform Part 1 - credativ\u00ae\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\"},\"datePublished\":\"2024-07-02T12:55:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Instaclustr Managed Postgres with Terraform Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"name\":\"credativ GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Organization\",\"Place\"],\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\",\"name\":\"credativ\u00ae\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"logo\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/#local-main-organization-logo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/#local-main-organization-logo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/credativDE\\\/\",\"https:\\\/\\\/x.com\\\/credativde\",\"https:\\\/\\\/mastodon.social\\\/@credativde\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/credativ-gmbh\",\"https:\\\/\\\/www.instagram.com\\\/credativ\\\/\"],\"description\":\"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\\\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.\",\"legalName\":\"credativ GmbH\",\"foundingDate\":\"2025-03-01\",\"duns\":\"316387060\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"11\",\"maxValue\":\"50\"},\"address\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/#local-main-place-address\"},\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":\"51.1732374\",\"longitude\":\"6.392010099999999\"},\"telephone\":[\"+4921619174200\",\"08002733284\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"telephone\":\"08002733284\",\"email\":\"vertrieb@credativ.de\"},\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\"opens\":\"09:00\",\"closes\":\"17:00\"},{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Saturday\",\"Sunday\"],\"opens\":\"00:00\",\"closes\":\"00:00\"}],\"email\":\"info@credativ.de\",\"areaServed\":\"D-A-CH\",\"vatID\":\"DE452151696\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/038c79105ce9b5fd885631da3f806698\",\"name\":\"Michael Banck\",\"description\":\"Michael Banck ist seit 2009 Mitarbeiter der credativ GmbH, sowie seit 2001 Mitglied des Debian Projekts und auch in weiteren Open Source Projekten aktiv. Als Mitglied des Datenbank-Teams von credativ hat er in den letzten Jahren verschiedene Kunden bei der L\u00f6sung von Problemen mit und dem t\u00e4glichen Betrieb von PostgreSQL\u00ae, sowie bei der Einf\u00fchrung von Hochverf\u00fcgbarkeits-L\u00f6sungen im Bereich Datenbanken unterst\u00fctzt und beraten.\"},{\"@type\":\"PostalAddress\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/#local-main-place-address\",\"streetAddress\":\"Hennes-Weisweiler-Allee 23\",\"addressLocality\":\"M\u00f6nchengladbach\",\"postalCode\":\"41179\",\"addressRegion\":\"Deutschland\",\"addressCountry\":\"DE\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/instaclustr-managed-postgres-with-terraform-part-1\\\/#local-main-organization-logo\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"caption\":\"credativ\u00ae\"}]}<\/script>\n<meta name=\"geo.placename\" content=\"M\u00f6nchengladbach\" \/>\n<meta name=\"geo.position\" content=\"51.1732374;6.392010099999999\" \/>\n<meta name=\"geo.region\" content=\"Germany\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Instaclustr Managed Postgres with Terraform Part 1 - credativ\u00ae","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/","og_locale":"en_US","og_type":"article","og_title":"Instaclustr Managed Postgres with Terraform Part 1","og_description":"Hashicorp Terraform is a well-known infrastructure automation tool mostly targeting cloud deployments. Instaclustr (a part of NetApp\u2019s CloudOps division and credativ\u2019s parent company) provides a managed service for various data stores, including PostgreSQL. Provisioning managed clusters is possible via the Instaclustr console, a REST API or through the Instaclustr Terraform Provider. In this first part [&hellip;]","og_url":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/","og_site_name":"credativ\u00ae","article_publisher":"https:\/\/www.facebook.com\/credativDE\/","article_published_time":"2024-07-02T12:55:42+00:00","og_image":[{"width":800,"height":550,"url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/07\/Portfolio-Loesungen.jpg","type":"image\/jpeg"}],"author":"Michael Banck","twitter_card":"summary_large_image","twitter_creator":"@credativde","twitter_site":"@credativde","twitter_misc":{"Written by":"Michael Banck","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/#article","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/"},"author":{"name":"Michael Banck","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/038c79105ce9b5fd885631da3f806698"},"headline":"Instaclustr Managed Postgres with Terraform Part 1","datePublished":"2024-07-02T12:55:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/"},"wordCount":669,"commentCount":0,"publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"keywords":["Instaclustr","PostgreSQL\u00ae","Terraform"],"articleSection":["PostgreSQL\u00ae","Terraform"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/#respond"]}],"copyrightYear":"2024","copyrightHolder":{"@id":"https:\/\/www.credativ.de\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/","url":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/","name":"Instaclustr Managed Postgres with Terraform Part 1 - credativ\u00ae","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/#website"},"datePublished":"2024-07-02T12:55:42+00:00","breadcrumb":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.credativ.de\/en\/"},{"@type":"ListItem","position":2,"name":"Instaclustr Managed Postgres with Terraform Part 1"}]},{"@type":"WebSite","@id":"https:\/\/www.credativ.de\/en\/#website","url":"https:\/\/www.credativ.de\/en\/","name":"credativ GmbH","description":"","publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.credativ.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Organization","Place"],"@id":"https:\/\/www.credativ.de\/en\/#organization","name":"credativ\u00ae","url":"https:\/\/www.credativ.de\/en\/","logo":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/#local-main-organization-logo"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/#local-main-organization-logo"},"sameAs":["https:\/\/www.facebook.com\/credativDE\/","https:\/\/x.com\/credativde","https:\/\/mastodon.social\/@credativde","https:\/\/www.linkedin.com\/company\/credativ-gmbh","https:\/\/www.instagram.com\/credativ\/"],"description":"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.","legalName":"credativ GmbH","foundingDate":"2025-03-01","duns":"316387060","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"11","maxValue":"50"},"address":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/#local-main-place-address"},"geo":{"@type":"GeoCoordinates","latitude":"51.1732374","longitude":"6.392010099999999"},"telephone":["+4921619174200","08002733284"],"contactPoint":{"@type":"ContactPoint","telephone":"08002733284","email":"vertrieb@credativ.de"},"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"09:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":["Saturday","Sunday"],"opens":"00:00","closes":"00:00"}],"email":"info@credativ.de","areaServed":"D-A-CH","vatID":"DE452151696"},{"@type":"Person","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/038c79105ce9b5fd885631da3f806698","name":"Michael Banck","description":"Michael Banck ist seit 2009 Mitarbeiter der credativ GmbH, sowie seit 2001 Mitglied des Debian Projekts und auch in weiteren Open Source Projekten aktiv. Als Mitglied des Datenbank-Teams von credativ hat er in den letzten Jahren verschiedene Kunden bei der L\u00f6sung von Problemen mit und dem t\u00e4glichen Betrieb von PostgreSQL\u00ae, sowie bei der Einf\u00fchrung von Hochverf\u00fcgbarkeits-L\u00f6sungen im Bereich Datenbanken unterst\u00fctzt und beraten."},{"@type":"PostalAddress","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/#local-main-place-address","streetAddress":"Hennes-Weisweiler-Allee 23","addressLocality":"M\u00f6nchengladbach","postalCode":"41179","addressRegion":"Deutschland","addressCountry":"DE"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/instaclustr-managed-postgres-with-terraform-part-1\/#local-main-organization-logo","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","caption":"credativ\u00ae"}]},"geo.placename":"M\u00f6nchengladbach","geo.position":{"lat":"51.1732374","long":"6.392010099999999"},"geo.region":"Germany"},"_links":{"self":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/8019","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/users\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/comments?post=8019"}],"version-history":[{"count":0,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/8019\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media?parent=8019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/categories?post=8019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/tags?post=8019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}