Categorygithub.com/kamuridesu/tf-backend-go
modulepackage
0.0.1
Repository: https://github.com/kamuridesu/tf-backend-go.git
Documentation: pkg.go.dev

# README

TF Backend Go

A jump to the sky turns to a Rider Kick

Intro

A simple HTTP backend to store Terraform/OpenTofu state information using SQLite or Postgres as database. It also works as an AWS Lambda Serverless service using API Gateway as HTTP frontend and DynamoDB as storage.

Build

Linux

CGO_ENABLED=1 go build -ldflags='-s -w -extldflags "-static"' -o tf-backend

Lambda

Just run the build.sh script to generate the main.zip file. In case you want to run the commands yourself:

CGO_ENABLED=0 go build -ldflags='-s -w -extldflags "-static"' -o bootstrap  # Build project
zip main.zip bootstrap  # Stores it into a main.zip file
rm bootstrap  # removes the executable file

In case you're using Windows, just follow this documentation: https://docs.aws.amazon.com/lambda/latest/dg/golang-package.html#golang-package-windows

AWS Setup

Lambda

Create a new Lambda Function, give it the name you want and as for the runtime select Amazon Linux 2023. Choose the arch compatible with your build and click Create Function.

Then, in Configurations -> Environment Variables, add these following variables:

ACCESS_KEY=
SECRET_ACCESS_KEY=
AUTH_USERS=

The access key and secret access key should be created on AWS. Just follow the docs. For the AUTH_USERS env it should be in this format: USER:PASSWORD;USER2:PASSWORD2

Then just upload the .zip file containing the executable.

API Gateway

New API gateway

Click Create API, then HTTP API. Add Lambda integration and search for the Lambda Function you created. Select it and give it a name.

Then create a route that starts with / and another that starts with /{proxy+}, the later will be used to give a name to the Terraform State. The method for all routes should be ANY.

After creating the routes just integrate it with the Lambda Function you created. Get the URL clicking on Deploy -> Stages.

Existing API Gateway

If you already has an API Gateway, just setup it to use {proxy+} in a route and integrate it to the lambda function. Remember, the method should be ANY.

DynamoDB

Create a new table called tfstates with Name as Partition Key and Locked as Sort Key. Leave the other options as default.

Routes

  • tfstates/:name -> route for Terraform Operations

# Packages

No description provided by the author

# Variables

No description provided by the author