2024-11-16 16:29:27 +00:00
|
|
|
---
|
|
|
|
tags: [AWS, IaC]
|
|
|
|
created: Saturday, November 16, 2024
|
|
|
|
---
|
|
|
|
|
|
|
|
# Terraform
|
|
|
|
|
|
|
|
## Authentication
|
|
|
|
|
|
|
|
Terraform will default to the currently active AWS user providing you have your
|
|
|
|
[AWS credentials](/zk/AWS_CLI.md) set-up.
|
|
|
|
|
|
|
|
## Creating resources
|
|
|
|
|
|
|
|
> Resources are specified in the `main.tf` file.
|
|
|
|
|
|
|
|
Create a new S3 bucket:
|
|
|
|
|
|
|
|
```hcl
|
|
|
|
resource "aws_s3_bucket" "my_new_bucket" {
|
|
|
|
bucket = "my-new-bucket"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
At this point the resource doesn't exist so there is no ARN or ID. When the
|
|
|
|
resource is created (through `terraform apply`) Terraform receives this info
|
|
|
|
from AWS and store it in a state file.
|
|
|
|
|
|
|
|
This info can be retrieved with `terraform show`, e.g:
|
|
|
|
|
|
|
|
```
|
|
|
|
resource "aws_s3_bucket" "my_new_bucket" {
|
|
|
|
id = "my-new-bucket"
|
|
|
|
arn = "arn:aws:s3:::my-new-bucket"
|
|
|
|
bucket = "my-new-bucket"
|
|
|
|
bucket_domain_name = "my-new-bucket.s3.amazonaws.com"
|
|
|
|
}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
## Standard sequence
|
|
|
|
|
|
|
|
Make your `terraform` directory, then `cd` and:
|
|
|
|
|
|
|
|
### Initialise project
|
|
|
|
|
|
|
|
```
|
|
|
|
terraform init
|
|
|
|
```
|
|
|
|
|
|
|
|
This will create the file `.terraform.lock.hcl` which should be committed. Stuff
|
|
|
|
in `.terraform/` can be git-ignored.
|
|
|
|
|
|
|
|
### Check changes
|
|
|
|
|
|
|
|
```
|
|
|
|
terraform plan
|
|
|
|
```
|
|
|
|
|
|
|
|
Providing you have written a `main.tf`. The command will list the proposed
|
|
|
|
changes to your resources.
|
|
|
|
|
|
|
|
### Apply changes
|
|
|
|
|
|
|
|
```
|
|
|
|
terraform apply
|
|
|
|
```
|
|
|
|
|
|
|
|
### Destroy the resource
|
|
|
|
|
|
|
|
Typically when you want to do a clean recreate.
|
|
|
|
|
|
|
|
```
|
|
|
|
terraform destoy
|
|
|
|
```
|
2024-11-17 12:01:24 +00:00
|
|
|
|
|
|
|
## Run with debug/logger
|
|
|
|
|
|
|
|
```
|
|
|
|
TF_LOG=DEBUG terraform apply
|
|
|
|
```
|
|
|
|
|
|
|
|
Or use with other Terraform command, e.g. `destroy`, `refresh` - whatever is
|
|
|
|
causing the problem.
|