From 87e8f0f0f70a6a911464371792f13051f38814d5 Mon Sep 17 00:00:00 2001 From: prajin-op Date: Wed, 21 Aug 2024 15:54:45 +0530 Subject: [PATCH 1/3] chore: sample for S3 as terraform backend --- released/terraform-be/README.md | 38 +++++++++---------- released/terraform-be/s3asbackend/backend.tf | 9 +++++ released/terraform-be/s3asbackend/main.tf | 26 +++++++++++++ released/terraform-be/s3asbackend/provider.tf | 8 ++++ .../terraform-be/s3asbackend/variables.tf | 32 ++++++++++++++++ 5 files changed, 92 insertions(+), 21 deletions(-) create mode 100644 released/terraform-be/s3asbackend/backend.tf create mode 100644 released/terraform-be/s3asbackend/main.tf create mode 100644 released/terraform-be/s3asbackend/provider.tf create mode 100644 released/terraform-be/s3asbackend/variables.tf diff --git a/released/terraform-be/README.md b/released/terraform-be/README.md index e2ba32ff..a89583b1 100644 --- a/released/terraform-be/README.md +++ b/released/terraform-be/README.md @@ -1,21 +1,17 @@ -# Terraform Remote Backend Configuration - -In Terraform, a *backend* determines where the state data files are stored. This state data is crucial for tracking the resources managed by Terraform. There are different configuration options to define these backends. They are described in the [Terraform documentation](https://developer.hashicorp.com/terraform/language/settings/backends/configuration). - -The default configuration is the [local backend](https://developer.hashicorp.com/terraform/language/settings/backends/local) namely the local file system. However, this is not recommended for productive usage due to the lack of options to collaborate and securely store the state. Hence, it is common to use a remote backend. - -## Available Backends - -In general, Terraform supports a lot of generic and vendor-specific backends out of the box. You find an overview of the available backends in the [Terraform documentation](https://developer.hashicorp.com/terraform/language/settings#configuring-a-terraform-backend). - -These built-in backends serve different purposes, from acting as remote disks for state files to supporting state locking, which helps prevent conflicts and ensures consistency during operations. It is important to note that you cannot load additional backends as plugins; only the listed built-in backends are available. - -In the following section we will walk through different configurations. - -### Local Backend - -As mentioned the default backend stores state as a local file on disk. It is suitable for single-user environments e.g. when developing new configurations. You find more details in the [Terraform documentation](https://developer.hashicorp.com/terraform/language/settings/backends/local). - -### Kubernetes Backend - -The [Kubernetes backend](https://developer.hashicorp.com/terraform/language/settings/backends/kubernetes) stores state in a Kubernetes secret and supports state locking using a Lease resource. It allows for secure and collaborative state management in Kubernetes environments. You find a sample technical setup in the directory [k8sasbackend](./k8sasbackend/README.md) +# Backend as S3 + +The Terraform S3 [backend](https://developer.hashicorp.com/terraform/language/settings/backends/s3) allows you to store the Terraform state files in an Amazon S3 bucket, providing a centralized, reliable, and durable storage solution. + +## Example Configuration + +```terraform +terraform { + backend "s3" { + bucket = "" + key = "terraform/state" + region = "" + encrypt = true + acl = "bucket-owner-full-control" + } +} +``` \ No newline at end of file diff --git a/released/terraform-be/s3asbackend/backend.tf b/released/terraform-be/s3asbackend/backend.tf new file mode 100644 index 00000000..7d6f72b0 --- /dev/null +++ b/released/terraform-be/s3asbackend/backend.tf @@ -0,0 +1,9 @@ +terraform { + backend "s3" { + bucket = "btpterraformbackend" + key = "terraform/state" + region = "eu-north-1" + encrypt = true + acl = "bucket-owner-full-control" + } +} \ No newline at end of file diff --git a/released/terraform-be/s3asbackend/main.tf b/released/terraform-be/s3asbackend/main.tf new file mode 100644 index 00000000..a394938f --- /dev/null +++ b/released/terraform-be/s3asbackend/main.tf @@ -0,0 +1,26 @@ +############################################################################################### +# Creation of subaccount +############################################################################################### +resource "random_uuid" "uuid" {} + +resource "btp_subaccount" "project" { + name = var.subaccount_name + subdomain = "${var.subaccount_name}-${random_uuid.uuid.result}" + region = lower(var.region) +} + +###################################################################### +# Add entitlement for BAS, Subscribe BAS and add roles +###################################################################### +resource "btp_subaccount_entitlement" "bas" { + subaccount_id = btp_subaccount.project.id + service_name = "sapappstudio" + plan_name = var.bas_plan_name +} + +resource "btp_subaccount_subscription" "bas-subscribe" { + subaccount_id = btp_subaccount.project.id + app_name = "sapappstudio" + plan_name = var.bas_plan_name + depends_on = [btp_subaccount_entitlement.bas] +} diff --git a/released/terraform-be/s3asbackend/provider.tf b/released/terraform-be/s3asbackend/provider.tf new file mode 100644 index 00000000..3a9d1b84 --- /dev/null +++ b/released/terraform-be/s3asbackend/provider.tf @@ -0,0 +1,8 @@ +terraform { + required_providers { + btp = { + source = "sap/btp" + version = "~> 1.5.0" + } + } +} diff --git a/released/terraform-be/s3asbackend/variables.tf b/released/terraform-be/s3asbackend/variables.tf new file mode 100644 index 00000000..323f062c --- /dev/null +++ b/released/terraform-be/s3asbackend/variables.tf @@ -0,0 +1,32 @@ +###################################################################### +# Customer account setup +###################################################################### +# subaccount +variable "globalaccount" { + type = string + description = "The globalaccount subdomain." +} +# subaccount +variable "subaccount_name" { + type = string + description = "The subaccount name." +} +# Region +variable "region" { + type = string + description = "The region where the project account shall be created in." + default = "us10" +} +# CLI server +variable "cli_server_url" { + type = string + description = "The BTP CLI server URL." + default = "https://cli.btp.cloud.sap" +} + +# Plan_name update +variable "bas_plan_name" { + description = "BAS plan" + type = string + default = "standard-edition" #For production use of Business Application Studio, upgrade the plan from the `free-tier` to the appropriate plan e.g standard-edition +} From 3436a6ee01cc8a85d59966826a2b20fa2872554f Mon Sep 17 00:00:00 2001 From: prajin-op Date: Wed, 21 Aug 2024 16:00:34 +0530 Subject: [PATCH 2/3] chore: Update documentation fixes --- released/terraform-be/README.md | 38 ++++++++++++--------- released/terraform-be/s3asbackend/README.md | 17 +++++++++ 2 files changed, 38 insertions(+), 17 deletions(-) create mode 100644 released/terraform-be/s3asbackend/README.md diff --git a/released/terraform-be/README.md b/released/terraform-be/README.md index a89583b1..735997fb 100644 --- a/released/terraform-be/README.md +++ b/released/terraform-be/README.md @@ -1,17 +1,21 @@ -# Backend as S3 - -The Terraform S3 [backend](https://developer.hashicorp.com/terraform/language/settings/backends/s3) allows you to store the Terraform state files in an Amazon S3 bucket, providing a centralized, reliable, and durable storage solution. - -## Example Configuration - -```terraform -terraform { - backend "s3" { - bucket = "" - key = "terraform/state" - region = "" - encrypt = true - acl = "bucket-owner-full-control" - } -} -``` \ No newline at end of file +# Terraform Remote Backend Configuration + +In Terraform, a *backend* determines where the state data files are stored. This state data is crucial for tracking the resources managed by Terraform. There are different configuration options to define these backends. They are described in the [Terraform documentation](https://developer.hashicorp.com/terraform/language/settings/backends/configuration). + +The default configuration is the [local backend](https://developer.hashicorp.com/terraform/language/settings/backends/local) namely the local file system. However, this is not recommended for productive usage due to the lack of options to collaborate and securely store the state. Hence, it is common to use a remote backend. + +## Available Backends + +In general, Terraform supports a lot of generic and vendor-specific backends out of the box. You find an overview of the available backends in the [Terraform documentation](https://developer.hashicorp.com/terraform/language/settings#configuring-a-terraform-backend). + +These built-in backends serve different purposes, from acting as remote disks for state files to supporting state locking, which helps prevent conflicts and ensures consistency during operations. It is important to note that you cannot load additional backends as plugins; only the listed built-in backends are available. + +In the following section we will walk through different configurations. + +### Local Backend + +As mentioned the default backend stores state as a local file on disk. It is suitable for single-user environments e.g. when developing new configurations. You find more details in the [Terraform documentation](https://developer.hashicorp.com/terraform/language/settings/backends/local). + +### Kubernetes Backend + +The [Kubernetes backend](https://developer.hashicorp.com/terraform/language/settings/backends/kubernetes) stores state in a Kubernetes secret and supports state locking using a Lease resource. It allows for secure and collaborative state management in Kubernetes environments. You find a sample technical setup in the directory [k8sasbackend](./k8sasbackend/README.md) \ No newline at end of file diff --git a/released/terraform-be/s3asbackend/README.md b/released/terraform-be/s3asbackend/README.md new file mode 100644 index 00000000..a89583b1 --- /dev/null +++ b/released/terraform-be/s3asbackend/README.md @@ -0,0 +1,17 @@ +# Backend as S3 + +The Terraform S3 [backend](https://developer.hashicorp.com/terraform/language/settings/backends/s3) allows you to store the Terraform state files in an Amazon S3 bucket, providing a centralized, reliable, and durable storage solution. + +## Example Configuration + +```terraform +terraform { + backend "s3" { + bucket = "" + key = "terraform/state" + region = "" + encrypt = true + acl = "bucket-owner-full-control" + } +} +``` \ No newline at end of file From abf2d16d89586b35f95349d8d737af1b9e74d4e3 Mon Sep 17 00:00:00 2001 From: prajin-op Date: Wed, 21 Aug 2024 16:02:54 +0530 Subject: [PATCH 3/3] fix: fixes for fmt errors --- released/terraform-be/s3asbackend/backend.tf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/released/terraform-be/s3asbackend/backend.tf b/released/terraform-be/s3asbackend/backend.tf index 7d6f72b0..5608ec56 100644 --- a/released/terraform-be/s3asbackend/backend.tf +++ b/released/terraform-be/s3asbackend/backend.tf @@ -1,9 +1,9 @@ terraform { backend "s3" { - bucket = "btpterraformbackend" - key = "terraform/state" - region = "eu-north-1" - encrypt = true - acl = "bucket-owner-full-control" + bucket = "btpterraformbackend" + key = "terraform/state" + region = "eu-north-1" + encrypt = true + acl = "bucket-owner-full-control" } } \ No newline at end of file