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:
@@ -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:
|
paths:
|
||||||
- "terraform/aws-iac/**"
|
- "terraform/aws-iac/**"
|
||||||
jobs:
|
jobs:
|
||||||
terraform-apply:
|
opentofu-apply:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -21,15 +21,15 @@ jobs:
|
|||||||
- name: Setup environment
|
- name: Setup environment
|
||||||
uses: ./.github/actions/setup-env
|
uses: ./.github/actions/setup-env
|
||||||
|
|
||||||
- name: Setup Terraform environment
|
- name: Setup OpenTofu environment
|
||||||
uses: ./.github/actions/setup-terraform-env
|
uses: ./.github/actions/setup-opentofu-env
|
||||||
|
|
||||||
- name: Terraform Init and Apply
|
- name: OpenTofu Init and Apply
|
||||||
env:
|
env:
|
||||||
BW_PROJECT_ID: ${{ secrets.BW_PROJECT_ID }}
|
BW_PROJECT_ID: ${{ secrets.BW_PROJECT_ID }}
|
||||||
BW_ORGANIZATION_ID: ${{ secrets.BW_ORGANIZATION_ID }}
|
BW_ORGANIZATION_ID: ${{ secrets.BW_ORGANIZATION_ID }}
|
||||||
BW_ACCESS_TOKEN: ${{ secrets.BW_ACCESS_TOKEN }}
|
BW_ACCESS_TOKEN: ${{ secrets.BW_ACCESS_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
cd terraform/aws-iac
|
cd terraform/aws-iac
|
||||||
sectool -f ../../sectool.json exec terraform init
|
sectool -f ../../sectool.json exec tofu init
|
||||||
sectool -f ../../sectool.json exec terraform apply --auto-approve
|
sectool -f ../../sectool.json exec tofu apply --auto-approve
|
||||||
|
|||||||
@@ -42,3 +42,4 @@ drafts/*
|
|||||||
.molecule
|
.molecule
|
||||||
*.auto.tfvars
|
*.auto.tfvars
|
||||||
dev/*
|
dev/*
|
||||||
|
.ansible
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
bcrypt
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY
|
||||||
|
AWS_SECRET_ACCESS_KEY=$AWS_SECRET_KEY
|
||||||
@@ -1 +0,0 @@
|
|||||||
../../repository.vault
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
terraform {
|
terraform {
|
||||||
backend "s3" {
|
backend "s3" {
|
||||||
bucket = "a13labs.infra"
|
bucket = "a13labs.infra.eu"
|
||||||
key = "aws-alarms.tfstate"
|
key = "aws.core.infra.tfstate"
|
||||||
region = "us-east-1"
|
region = "eu-west-1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
locals {
|
locals {
|
||||||
region = "us-east-1"
|
region = "eu-west-1"
|
||||||
billing_alarm_limit = 20
|
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,4 +1,4 @@
|
|||||||
variable "region" {
|
variable "region" {
|
||||||
description = "AWS Default region"
|
description = "AWS Default region"
|
||||||
default = "us-east-1"
|
default = "eu-west-1"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
terraform {
|
|
||||||
required_version = ">= 0.13"
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user