Table of Contents

May 13, 2024 ยท View on GitHub

Maintained Terraform License: MIT

Table of Contents


Introduction

This is a template for Terraform modules.

It is part of our XOAP Automation Forces Open Source community library to give you a quick start into Infrastructure as Code deployments with Terraform.

We have a lot of Terraform modules that are Open Source and maintained by the XOAP staff.

Please check the links for more info, including usage information and full documentation:


Guidelines

We are using the following guidelines to write code and make it easier for everyone to follow a destinctive guideline. Please check these links before starting to work on changes.

Contributor Covenant

Git Naming Conventions are an important part of the development process. They descrtibe how Branched, Commit Messages, Pull Requests and Tags should look like to make the easily understandebla for everybody in the development chain.

Git Naming Conventions

he Conventional Commits specification is a lightweight convention on top of commit messages. It provides an easy set of rules for creating an explicit commit history; which makes it easier to write automated tools on top of.

Conventional Commits

The better a Pull Request description is, the better a review can understand and decide on how to review the changes. This improves implementation speed and reduces communication between the requester and the reviewer resulting in much less overhead.

Wiriting A Great Pull Request Description

Versioning is a crucial part for Terraform Stacks and Modules. Without version tags you cannot clearly create a stable environment and be sure that your latest changes won't crash your production environment (sure it still can happen, but we are trying our best to implement everything that we can to reduce the risk)

Semantic Versioning

Naming Conventions for Terraform resources must be used.

Terraform Naming Conventions


Usage

Installation

For the first ime using this template necessary tools need to be installed. A script for PowerShell Core is provided under ./build/init.ps1

This script will install following dependencies:

This script configures:

  • global git template under ~/.git-template
  • global pre-commit hooks for prepare-commit-msg and commit-msg under ~/.git-template/hooks
  • github actions:
    • linting and checks for pull requests from dev to master/main
    • automatic tagging and release creation on pushes to master/main
    • dependabot updates

It currently supports the automated installation for macOS. Support for Windows and Linux will be available soon.

Synchronisation

We provided a script under ./build/sync_template.ps1 to fetch the latest changes from this template repository. Please be aware that this is mainly a copy operation which means all your current changes have to be committed first and after running the script you have to merge this changes into your codebase.

Configuration


Requirements

NameVersion
terraform>=1.1.6
aws>= 4.8.0

Providers

NameVersion
aws>= 4.8.0

Modules

NameSourceVersion
this_labelgit::github.com/xoap-io/terraform-aws-misc-labelv0.1.1

Resources

NameType
aws_s3_bucket.thisresource
aws_s3_bucket_acl.thisresource
aws_s3_bucket_cors_configuration.thisresource
aws_s3_bucket_logging.thisresource
aws_s3_bucket_ownership_controls.thisresource
aws_s3_bucket_policy.thisresource
aws_s3_bucket_public_access_block.thisresource
aws_s3_bucket_server_side_encryption_configuration.thisresource
aws_s3_bucket_versioning.thisresource
aws_s3_bucket_website_configuration.thisresource
aws_caller_identity.thisdata source

Inputs

NameDescriptionTypeDefaultRequired
aclDefault ACL to use when uploading filesstring"private"no
bucket_policyBucket policy statement to usestring""no
contextDefault environmental context
object({
organization = string
environment = string
account = string
product = string
tags = map(string)
})
n/ayes
cors_allowed_headerAllowed headers for corslist(string)[]no
cors_allowed_methodsAllowed method for CORS accesslist(string)[]no
cors_allowed_originsAllowed origins for CORSlist(string)[]no
cors_exposed_headerHeaders which are exposed through CORS requestslist(string)[]no
disable_public_accessDisables or enabled the public access blockbooltrueno
error_documentError page document in S3 bucketstring"404.html"no
index_documentIndex page document in S3 bucketstring"index.html"no
is_loggingDetermines if the bucket is intended for logging purposesboolfalseno
kms_arnKMS Key to usestringn/ayes
logging_bucketTarget bucket for loggingstringn/ayes
nameName of the bucket to createstringn/ayes
origin_pathPath in S3 bucket for hosted files, with leading slashstring"/"no
routing_rulesA json array containing routing rules describing redirect behavior and when redirects are appliedmap(string)
{
"/": "index.html"
}
no
versioningEnables or disables bucket versioningbooltrueno
website_enabledEnables or disabled static website functionalityboolfalseno

Outputs

NameDescription
arnARN of the created S3 bucket
domain_nameRegional domain name of the created S3 bucket
idID of the created S3 bucket
website_domainWebsite domain of the created S3 bucket if hosting is enabled
website_endpointWebsite endpoint of the created S3 bucket if hosting is enabled