Add OpenTofu setup and configuration for AWS infrastructure

- Create action for setting up OpenTofu environment
- Update Terraform workflow to use OpenTofu for infrastructure management
- Modify backend configuration for S3 with new bucket and region
- Add S3 bucket resources with lifecycle configuration
- Update local variables and remove deprecated files
- Include required Python packages for OpenTofu
This commit is contained in:
2025-04-25 16:37:01 +02:00
parent 41ee9e0618
commit e9c492d149
12 changed files with 85 additions and 17 deletions
+15
View File
@@ -0,0 +1,15 @@
name: Setup OpenTofu Environment
description: Prepare the environment for A13labs CI/CD pipelines
runs:
using: "composite"
steps:
- name: Setup OpenTofu
uses: opentofu/setup-opentofu@v1
with:
terraform_version: 1.9.1
- name: Install required python packages
shell: bash
run: |
python3 -m pip install -r requirements/opentofu.txt
@@ -9,7 +9,7 @@ on:
paths:
- "terraform/aws-iac/**"
jobs:
terraform-apply:
opentofu-apply:
runs-on: ubuntu-latest
steps:
@@ -21,15 +21,15 @@ jobs:
- name: Setup environment
uses: ./.github/actions/setup-env
- name: Setup Terraform environment
uses: ./.github/actions/setup-terraform-env
- name: Setup OpenTofu environment
uses: ./.github/actions/setup-opentofu-env
- name: Terraform Init and Apply
- name: OpenTofu Init and Apply
env:
BW_PROJECT_ID: ${{ secrets.BW_PROJECT_ID }}
BW_ORGANIZATION_ID: ${{ secrets.BW_ORGANIZATION_ID }}
BW_ACCESS_TOKEN: ${{ secrets.BW_ACCESS_TOKEN }}
run: |
cd terraform/aws-iac
sectool -f ../../sectool.json exec terraform init
sectool -f ../../sectool.json exec terraform apply --auto-approve
sectool -f ../../sectool.json exec tofu init
sectool -f ../../sectool.json exec tofu apply --auto-approve
+1
View File
@@ -42,3 +42,4 @@ drafts/*
.molecule
*.auto.tfvars
dev/*
.ansible
+1
View File
@@ -0,0 +1 @@
bcrypt
+2
View File
@@ -0,0 +1,2 @@
AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY
AWS_SECRET_ACCESS_KEY=$AWS_SECRET_KEY
-1
View File
@@ -1 +0,0 @@
../../repository.vault
+3 -3
View File
@@ -1,7 +1,7 @@
terraform {
backend "s3" {
bucket = "a13labs.infra"
key = "aws-alarms.tfstate"
region = "us-east-1"
bucket = "a13labs.infra.eu"
key = "aws.core.infra.tfstate"
region = "eu-west-1"
}
}
+51
View File
@@ -0,0 +1,51 @@
resource "aws_s3_bucket" "infra_bucket" {
bucket = "a13labs.infra.eu"
force_destroy = true
}
resource "aws_s3_bucket_public_access_block" "infra_bucket" {
bucket = aws_s3_bucket.infra_bucket.id
block_public_acls = true
ignore_public_acls = true
block_public_policy = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_versioning" "infra_bucket" {
bucket = aws_s3_bucket.infra_bucket.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_lifecycle_configuration" "infra_bucket" {
bucket = aws_s3_bucket.infra_bucket.id
rule {
id = "clenaup"
status = "Enabled"
filter {
prefix = "/"
}
expiration {
days = 30
}
}
}
import {
id = "a13labs.infra.eu"
to = aws_s3_bucket.infra_bucket
}
import {
id = "a13labs.infra.eu"
to = aws_s3_bucket_public_access_block.infra_bucket
}
import {
id = "a13labs.infra.eu"
to = aws_s3_bucket_versioning.infra_bucket
}
+5 -2
View File
@@ -1,5 +1,8 @@
locals {
region = "us-east-1"
region = "eu-west-1"
billing_alarm_limit = 20
billing_alarm_emails = "c.alexandre.pires@gmail.com"
billing_alarm_emails = "c.alexandre.pires@alexpires.me"
account_id = data.aws_caller_identity.current.account_id
}
data "aws_caller_identity" "current" {}
+1 -1
View File
@@ -1,4 +1,4 @@
variable "region" {
description = "AWS Default region"
default = "us-east-1"
default = "eu-west-1"
}
-1
View File
@@ -1 +0,0 @@
-3
View File
@@ -1,3 +0,0 @@
terraform {
required_version = ">= 0.13"
}