Skip to content

Commit 0c7213f

Browse files
committed
docs(index): fix missing attribut remote-state and move doc
1 parent 790eb3f commit 0c7213f

File tree

2 files changed

+74
-42
lines changed

2 files changed

+74
-42
lines changed

docs/guides/backend_guide.md

Lines changed: 72 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
page_title: "Using Backend Guide"
33
---
44

5-
# Terraform Backend
5+
## Configuring a Terraform Backend with PostgreSQL and State Locking
66

7-
This page describes how to configure a backend by adding the backend block to your configuration with the Terraform Scaleway Provider.
7+
This guide explains how to configure a remote backend using the Terraform Scaleway Provider with PostgreSQL, enabling remote state management with locking.
88

99
Terraform provides the option to set up a [“backend”](https://developer.hashicorp.com/terraform/language/backend) of the `state` data files.
1010

@@ -13,7 +13,7 @@ This option allows you to handle the state and the way certain operations are ex
1313
Backends can store the state remotely and protect it with locks to prevent corruption;
1414
it makes it possible for a team to work with ease, or, for instance, to run Terraform within a pipeline.
1515

16-
## Create your database
16+
### Create your database
1717

1818
You can create your database resource using terraform itself .
1919

@@ -60,19 +60,19 @@ and deploy it:
6060
terraform plan -out "planfile" ; terraform apply -input=false -auto-approve "planfile"
6161
```
6262

63-
## Configuring the PostgreSQL Connection String
63+
### Configuring the PostgreSQL Connection String
6464

6565
We choose to set our environment variable for the connection string for this guide. Please check the [secret section](#secrets) for more details.
6666

6767
```shell
6868
export PG_CONN_STR=postgres://<user>:<pass>@localhost:<port>/terraform_backend?sslmode=disable
6969
```
7070

71-
## Secrets
71+
### Secrets
7272

7373
Hashicorp offers several methods to keep your secrets. Please check the Terraform [partial configuration](https://developer.hashicorp.com/terraform/language/backend#partial-configuration) for this topic.
7474

75-
## Create your infrastructure with the Scaleway provider
75+
### Create your infrastructure with the Scaleway provider
7676

7777
```hcl
7878
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -126,7 +126,7 @@ AND TABLE_NAME = 'states';
126126
....
127127
```
128128

129-
## Multiple Workplaces
129+
### Multiple Workplaces
130130

131131
You can configure several `states` on your database using a different `schema_name`.
132132

@@ -145,7 +145,7 @@ terraform {
145145
}
146146
```
147147

148-
## Migrating the state
148+
### Migrating the state
149149

150150
Considering you have already running infrastructure you want to use the `backend` option.
151151

@@ -159,15 +159,15 @@ Answer the prompt `yes`, and your state will migrate.
159159
$ terraform init -backend-config="conn_str=${PG_CONN_STR}" -migrate-state
160160
```
161161

162-
## What about locking?
162+
### What about locking?
163163

164164
Most of the remote [backends](https://developer.hashicorp.com/terraform/language/backend#backend-types) natively support locking. To run terraform apply, Terraform will automatically acquire a lock;
165165
if someone else is already running apply, they will already have the lock, and you will have to wait.
166166
You can run apply with the `-lock-timeout=<TIME>` parameter to tell Terraform to wait up to TIME for a lock to be released (e.g., `-lock-timeout=10m` will wait for 10 minutes).
167167

168168
The Lock method prevents opening the state file while already in use.
169169

170-
## Share configuration
170+
### Share configuration
171171

172172
You can also share the configuration using the different [data sources](https://www.terraform.io/language/state/remote-state-data).
173173
This is useful when working on the same infrastructure or the same team.
@@ -177,3 +177,65 @@ data "scaleway_rdb_instance" "mybackend" {
177177
name = "your-database-name"
178178
}
179179
```
180+
## Alternative: Store Terraform State in Scaleway Object Storage (Without Locking)
181+
182+
[Scaleway object storage](https://www.scaleway.com/en/object-storage/) can be used to store your Terraform state.
183+
However, this backend does not support state locking, which is critical when multiple users or automated processes might access the same state concurrently.
184+
Configure your backend as:
185+
186+
```
187+
terraform {
188+
backend "s3" {
189+
bucket = "terraform-state"
190+
key = "my_state.tfstate"
191+
region = "fr-par"
192+
endpoint = "https://s3.fr-par.scw.cloud"
193+
access_key = "my-access-key"
194+
secret_key = "my-secret-key"
195+
skip_credentials_validation = true
196+
force_path_style = true
197+
skip_region_validation = true
198+
# Need terraform>=1.6.1
199+
skip_requesting_account_id = true
200+
}
201+
}
202+
```
203+
204+
Warning: This backend does not offer locking. If you're working in a team or running Terraform in CI/CD pipelines, using object storage without locking can lead to state corruption.
205+
206+
### Securing credentials
207+
208+
To avoid hardcoding secrets in your Terraform configuration, use one of the following secure methods:
209+
210+
#### Environment Variables
211+
212+
Set the credentials in your shell environment using the AWS-compatible variable names:
213+
214+
```shell
215+
export AWS_ACCESS_KEY_ID=$SCW_ACCESS_KEY
216+
export AWS_SECRET_ACCESS_KEY=$SCW_SECRET_KEY
217+
```
218+
219+
This approach is simple and works well for scripts, local development, and CI pipelines.
220+
221+
#### AWS Credentials Files
222+
223+
Store your credentials in:
224+
- `~/.aws/credentials` – for secrets
225+
- `~/.aws/config` – for configuration like profiles or regions
226+
-
227+
Example ~/.aws/credentials file:
228+
229+
```
230+
[default]
231+
aws_access_key_id = YOUR_SCW_ACCESS_KEY
232+
aws_secret_access_key = YOUR_SCW_SECRET_KEY
233+
```
234+
235+
This method is ideal for managing multiple profiles or persisting configuration across sessions.
236+
237+
Both methods are compatible with Terraform’s S3 backend, which also works with Scaleway Object Storage.
238+
239+
For full details, see the official [Terraform S3 backend documentation] (https://developer.hashicorp.com/terraform/language/backend/s3#access_key)
240+
For example configuration files, refer to the [Object Storage documentation] (https://www.scaleway.com/en/docs/object-storage/api-cli/object-storage-aws-cli/)
241+

docs/index.md

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -221,39 +221,9 @@ In addition to [generic provider arguments](https://www.terraform.io/docs/config
221221
| `region` | `SCW_DEFAULT_REGION` | The [region](./guides/regions_and_zones.md#regions) that will be used as default value for all resources. (`fr-par` if none specified) | |
222222
| `zone` | `SCW_DEFAULT_ZONE` | The [zone](./guides/regions_and_zones.md#zones) that will be used as default value for all resources. (`fr-par-1` if none specified) | |
223223

224-
## Store terraform state on Scaleway S3-compatible object storage
224+
## Store terraform state
225225

226-
[Scaleway object storage](https://www.scaleway.com/en/object-storage/) can be used to store your Terraform state.
227-
Configure your backend as:
228-
229-
```
230-
terraform {
231-
backend "s3" {
232-
bucket = "terraform-state"
233-
key = "my_state.tfstate"
234-
region = "fr-par"
235-
endpoint = "https://s3.fr-par.scw.cloud"
236-
access_key = "my-access-key"
237-
secret_key = "my-secret-key"
238-
skip_credentials_validation = true
239-
force_path_style = true
240-
skip_region_validation = true
241-
# Need terraform>=1.6.1
242-
skip_requesting_account_id = true
243-
}
244-
}
245-
```
246-
247-
Be careful as no locking mechanism are yet supported.
248-
Using scaleway object storage as terraform backend is not suitable if you work in a team with a risk of simultaneous access to the same plan.
249-
250-
Note: For security reason it's not recommended to store secrets in terraform files.
251-
If you want to configure the backend with environment var, you need to use `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` [source](https://www.terraform.io/docs/backends/types/s3.html#access_key).
252-
253-
```bash
254-
export AWS_ACCESS_KEY_ID=$SCW_ACCESS_KEY
255-
export AWS_SECRET_ACCESS_KEY=$SCW_SECRET_KEY
256-
```
226+
For detailed instructions and best practices, see the full [Backend guide](guides/backend_guide.md)
257227

258228
## Custom User-Agent Information
259229

0 commit comments

Comments
 (0)