An open API service indexing awesome lists of open source software.

https://github.com/sourcefuse/terraform-aws-arc-eks

Repo for managing the EKS Terraform Module.
https://github.com/sourcefuse/terraform-aws-arc-eks

Last synced: 12 days ago
JSON representation

Repo for managing the EKS Terraform Module.

Awesome Lists containing this project

README

          

![Module Structure](./static/banner.png)

# [terraform-aws-arc-eks](https://github.com/sourcefuse/terraform-aws-arc-eks)

[![All Contributors](https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square)](#contributors-)

Latest Release Last Updated ![Terraform](https://img.shields.io/badge/terraform-%235835CC.svg?style=for-the-badge&logo=terraform&logoColor=white) ![GitHub Actions](https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge&logo=githubactions&logoColor=white)

[![Quality gate](https://sonarcloud.io/api/project_badges/quality_gate?project=sourcefuse_terraform-aws-arc-eks)](https://sonarcloud.io/summary/new_code?id=sourcefuse_terraform-aws-arc-eks)

[![Known Vulnerabilities](https://github.com/sourcefuse/terraform-aws-ref-arch-eks/actions/workflows/snyk.yaml/badge.svg)](https://github.com/sourcefuse/terraform-aws-ref-arch-eks/actions/workflows/snyk.yaml)

## Overview

SourceFuse AWS Reference Architecture (ARC) Terraform module provisions a EKS (Elastic Kubernetes Service) cluster with support for multiple operational modes and integrations:

- **EKS Cluster Creation**: Automates the setup of the EKS control plane and associated IAM roles, VPC configurations, and security groups.

- **EKS Auto Mode Support**: Enables simplified node management with AWS-managed node groups and automatic provisioning.

- **Karpenter Installation**: Optionally installs and configures Karpenter, a flexible autoscaler that dynamically launches compute based on pod requirements.

- **Fargate Support**: Allows deployment of serverless workloads on AWS Fargate by creating the required Fargate profiles and IAM roles.

- **EKS Capabilities**: Supports the latest EKS capabilities including ArgoCD for GitOps, ACK (AWS Controllers for Kubernetes) for managing AWS services directly from Kubernetes, and KRO (Kubernetes Resource Operator) for simplified resource management.

This module helps streamline EKS provisioning while offering flexibility in compute optionsβ€”ideal for both production and cost-optimized environments.

For more information about this repository and its usage, please see [Terraform AWS ARC EKS Module Usage Guide](docs/module-usage-guide/README.md).

![arc_eks_hla](./static/arc_eks_hla.png)

## Usage
See `examples` directory for usage examples, including configurations for `auto-mode`, `fargate-profile`, `karpenter`, `nodegroup`, and `eks-capabilities`. Below is the example for a simple EKS cluster creation.
```hcl
module "eks_cluster" {
source = "sourcefuse/arc-eks/aws"
version = "5.0.16"
namespace = var.namespace
environment = var.environment
kubernetes_version = var.kubernetes_version
name = "${var.namespace}-${var.environment}-cluster"
vpc_config = local.vpc_config
access_config = local.access_config
enable_oidc_provider = false
envelope_encryption = local.envelope_encryption
kubernetes_network_config = local.kubernetes_network_config
}
```

## Requirements

| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.6.0 |
| [aws](#requirement\_aws) | >= 6.0.0 |
| [helm](#requirement\_helm) | 2.12.1 |
| [kubernetes](#requirement\_kubernetes) | = 2.24.0 |
| [null](#requirement\_null) | >= 2.0 |
| [tls](#requirement\_tls) | >= 3.1.0, != 4.0.0 |

## Providers

| Name | Version |
|------|---------|
| [aws](#provider\_aws) | 6.35.1 |
| [helm](#provider\_helm) | 2.12.1 |
| [kubernetes](#provider\_kubernetes) | 2.24.0 |
| [tls](#provider\_tls) | 4.2.1 |

## Modules

| Name | Source | Version |
|------|--------|---------|
| [kms](#module\_kms) | sourcefuse/arc-kms/aws | 1.0.11 |

## Resources

| Name | Type |
|------|------|
| [aws_eks_access_entry.auto_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_access_entry) | resource |
| [aws_eks_access_entry.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_access_entry) | resource |
| [aws_eks_access_policy_association.auto_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_access_policy_association) | resource |
| [aws_eks_access_policy_association.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_access_policy_association) | resource |
| [aws_eks_addon.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_addon) | resource |
| [aws_eks_capability.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_capability) | resource |
| [aws_eks_cluster.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_cluster) | resource |
| [aws_eks_fargate_profile.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_fargate_profile) | resource |
| [aws_eks_node_group.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_node_group) | resource |
| [aws_iam_instance_profile.karpenter_instance_profile](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_instance_profile) | resource |
| [aws_iam_openid_connect_provider.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_openid_connect_provider) | resource |
| [aws_iam_policy.iam](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy) | resource |
| [aws_iam_policy.kms](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy) | resource |
| [aws_iam_role.auto](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role.eks_fargate_profile](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role.eks_node_group](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role.karpenter_controller_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role.karpenter_node_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role_policy.ec2_fleet](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |
| [aws_iam_role_policy.karpenter_controller](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |
| [aws_iam_role_policy_attachment.eks_cluster_policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_iam_role_policy_attachment.fargate](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_iam_role_policy_attachment.iam](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_iam_role_policy_attachment.karpenter_node_policy_attachment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_iam_role_policy_attachment.kms](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_iam_role_policy_attachment.node_AmazonEC2ContainerRegistryPullOnly](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_iam_role_policy_attachment.node_polcies](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_iam_role_policy_attachment.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_security_group_rule.cluster_ingress_rules](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |
| [helm_release.karpenter](https://registry.terraform.io/providers/hashicorp/helm/2.12.1/docs/resources/release) | resource |
| [kubernetes_config_map.aws_auth](https://registry.terraform.io/providers/hashicorp/kubernetes/2.24.0/docs/resources/config_map) | resource |
| [kubernetes_config_map_v1_data.aws_auth](https://registry.terraform.io/providers/hashicorp/kubernetes/2.24.0/docs/resources/config_map_v1_data) | resource |
| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |
| [aws_iam_policy_document.ec2_fleet](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
| [aws_iam_policy_document.iam](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
| [aws_region.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region) | data source |
| [tls_certificate.this](https://registry.terraform.io/providers/hashicorp/tls/latest/docs/data-sources/certificate) | data source |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [access\_config](#input\_access\_config) | Access configuration for the cluster.
- `authentication_mode`: One of "API" or "API\_AND\_CONFIG\_MAP"
- `bootstrap_cluster_creator_admin_permissions`: Grant creator admin access
- `aws_auth_config_map`: (optional) Config for aws-auth ConfigMap
- `eks_access_entries`: (optional) List of principals and their policy associations |

object({
authentication_mode = optional(string, "API")
bootstrap_cluster_creator_admin_permissions = optional(bool, false)

aws_auth_config_map = optional(object({
create = optional(bool, false)
manage = optional(bool, false)
roles = optional(list(any), [])
users = optional(list(any), [])
accounts = optional(list(string), [])
}), {})

eks_access_entries = optional(list(object({
principal_arn = optional(string)
policy_arns = optional(list(string))
access_scope = optional(object({
type = string
namespaces = optional(list(string))
}))
})), [])
})
|
{
"authentication_mode": "API",
"bootstrap_cluster_creator_admin_permissions": false
}
| no |
| [additional\_cluster\_security\_group\_rules](#input\_additional\_cluster\_security\_group\_rules) | List of ingress security group rules to apply to the EKS cluster security group |
list(object({
from_port = number
to_port = number
protocol = string
cidr_blocks = optional(list(string), [])
ipv6_cidr_blocks = optional(list(string), [])
description = optional(string)
}))
| `[]` | no |
| [additional\_node\_group\_policy\_arns](#input\_additional\_node\_group\_policy\_arns) | Optional additional policies to attach to node group role | `list(string)` | `[]` | no |
| [auto\_mode\_config](#input\_auto\_mode\_config) | (optional) EKS automates routine cluster tasks for compute, storage, and networking.
When a new pod can't fit onto existing nodes, EKS creates a new node.
EKS combines cluster infrastructure managed by AWS with integrated Kubernetes capabilities to meet application compute needs. |
object({
enable = optional(bool, false)
node_pools = optional(list(string), ["general-purpose", "system"])
node_role_arn = optional(string, null)
})
|
{
"enable": false
}
| no |
| [bootstrap\_self\_managed\_addons\_enabled](#input\_bootstrap\_self\_managed\_addons\_enabled) | (optional) Install default unmanaged add-ons, such as aws-cni, kube-proxy, and CoreDNS during cluster creation. If false, you must manually install desired add-ons. Changing this value will force a new cluster to be created. | `bool` | `true` | no |
| [eks\_additional\_policy\_arns](#input\_eks\_additional\_policy\_arns) | Optional additional policy ARNs that user wants to attach | `list(string)` | `[]` | no |
| [eks\_addons](#input\_eks\_addons) | Map of EKS Add-ons to create |
map(object({
addon_version = optional(string)
service_account_role_arn = optional(string)
resolve_conflicts_on_update = optional(string)
resolve_conflicts_on_create = optional(string)
}))
| `{}` | no |
| [eks\_capabilities\_config](#input\_eks\_capabilities\_config) | Configuration for EKS Capabilities (ArgoCD, ACK, KRO).
This enables the latest EKS capabilities features for enhanced cluster functionality.

- enable: Whether to enable EKS capabilities
- capabilities: List of capability configurations

Each capability object may include:
- name: Unique identifier for the capability
- capability\_name: The AWS EKS capability name (e.g., "ArgoCD", "ACK-EC2", "KRO")
- type: Capability type (ARGOCD, ACK, KRO)
- role\_arn: (Required) IAM role ARN for the capability
- delete\_propagation\_policy: (Optional) Delete propagation policy (default: "RETAIN")
- argocd\_config: (Optional) Configuration for ArgoCD capability

Note: ACK and KRO capabilities don't require additional configuration beyond role\_arn. |
object({
enable = bool
capabilities = list(object({
name = string
capability_name = string
type = string
role_arn = string
delete_propagation_policy = optional(string, "RETAIN")

# ArgoCD specific configuration
argocd_config = optional(object({
namespace = optional(string, "argocd")

# AWS IAM Identity Center configuration (required by provider)
aws_idc = object({
idc_instance_arn = string
idc_region = optional(string)
})

# Network access configuration
network_access = optional(object({
vpce_ids = optional(list(string))
}), null)

# RBAC role mappings
rbac_role_mapping = optional(list(object({
role = string # Valid values: ADMIN, EDITOR, VIEWER
identity = list(object({
id = string
type = string # Valid values: SSO_USER, SSO_GROUP
}))
})), [])
}), null)
}))
})
|
{
"capabilities": [],
"enable": false
}
| no |
| [eks\_policy\_arns](#input\_eks\_policy\_arns) | List of IAM policy ARNs to attach to the EKS role | `list(string)` |
[
"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy",
"arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy",
"arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy",
"arn:aws:iam::aws:policy/AmazonEKSNetworkingPolicy",
"arn:aws:iam::aws:policy/AmazonEKSComputePolicy",
"arn:aws:iam::aws:policy/AmazonEKSBlockStoragePolicy",
"arn:aws:iam::aws:policy/AmazonEKSLoadBalancingPolicy"
]
| no |
| [enable\_arc\_zonal\_shift](#input\_enable\_arc\_zonal\_shift) | (optional) Whether to enable ARC Zonal shift , it shift application traffic away from an impaired Availability Zone (AZ) in your EKS cluster. | `bool` | `false` | no |
| [enable\_oidc\_provider](#input\_enable\_oidc\_provider) | Whether to enable OIDC provider | `bool` | `true` | no |
| [enabled\_cluster\_log\_types](#input\_enabled\_cluster\_log\_types) | A list of the desired control plane logging to enable. Valid values [`api`, `audit`, `authenticator`, `controllerManager`, `scheduler`] | `list(string)` | `[]` | no |
| [envelope\_encryption](#input\_envelope\_encryption) | Whether to enable Envelope encryption |
object({
enable = optional(bool, true)
kms_deletion_window_in_days = optional(number, 10)
resources = optional(list(string), ["secrets"])
key_arn = optional(string, null) // if null it created new KMS key
})
|
{
"enable": true,
"resources": [
"secrets"
]
}
| no |
| [environment](#input\_environment) | ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT' | `string` | n/a | yes |
| [fargate\_profile\_config](#input\_fargate\_profile\_config) | Combined configuration for the EKS Fargate profile, including IAM policies. |
object({
enable = bool
fargate_profile_name = optional(string)
pod_execution_role_arn = optional(string)
subnet_ids = optional(list(string))
selectors = optional(list(object({
namespace = string
labels = optional(map(string))
})))
tags = optional(map(string), {})
policy_arns = optional(list(string), ["arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy"])
additional_policy_arns = optional(list(string), [])
})
|
{
"enable": false
}
| no |
| [karpenter\_config](#input\_karpenter\_config) | Configuration for Karpenter |
object({
enable = bool
name = optional(string)
namespace = optional(string, "karpenter")
create_namespace = optional(bool)
version = optional(string, "0.36.0")
helm_repository = optional(string, "oci://public.ecr.aws/karpenter")
chart = optional(string)
additional_karpenter_node_role_policies = optional(list(string), [])
helm_release_values = optional(any)
helm_release_set_values = optional(list(object({
name = string
value = string
})), [])
})
|
{
"enable": false
}
| no |
| [kubernetes\_network\_config](#input\_kubernetes\_network\_config) | Configuration block for Kubernetes network.

- `service_ipv4_cidr`: Optional custom CIDR block for Kubernetes service IPs. Must be within 10.0.0.0/8, 172.16.0.0/12, or 192.168.0.0/16 and have a netmask between /12 and /24.
- `ip_family`: The IP family to assign (ipv4 or ipv6). Default is ipv4. |
object({
ipv4_cidr = optional(string, null)
ip_family = optional(string, "ipv4")
})
|
{
"ip_family": "ipv4"
}
| no |
| [kubernetes\_version](#input\_kubernetes\_version) | Desired Kubernetes master version | `string` | n/a | yes |
| [name](#input\_name) | EKS Cluster name | `string` | n/a | yes |
| [namespace](#input\_namespace) | Namespace your resource belongs to.
Usually an abbreviation of your organization name, e.g. 'example' or 'arc', to help ensure generated IDs are globally unique" | `string` | n/a | yes |
| [node\_group\_config](#input\_node\_group\_config) | Configuration for EKS managed node groups.

- enable: Controls whether EKS node groups should be created.
- config: A map of node group configurations, where each key is an identifier for a node group.
Each node group object may include:

- node\_group\_name: (Optional) Custom name for the node group. If not specified, a default will be used.
- node\_role\_arn: (Optional) ARN of the IAM role for the node group.
- release\_version: (Optional) AMI version for the node group.
- scaling\_config: Required settings for desired, minimum, and maximum node counts.
- taints: (Optional) List of taints applied to nodes, each with a key, value (optional), and effect.
- update\_config: (Optional) Configuration for rolling updates, such as max unavailable nodes.
- remote\_access: (Optional) SSH access configuration, including key name and allowed source security group IDs.
- launch\_template: (Optional) Launch template settings, including ID, name, and version.
- node\_repair\_config: (Optional) Node auto-repair configuration (e.g., self-healing).
- instance\_types: (Optional) List of EC2 instance types to use (default is ["t3.medium"]).
- ami\_type: (Optional) AMI type (e.g., "AL2\_x86\_64", "BOTTLEROCKET\_x86\_64").
- disk\_size: (Optional) Size in GiB of the root EBS volume.
- capacity\_type: (Optional) Capacity type ("ON\_DEMAND" or "SPOT"), defaults to "ON\_DEMAND".
- labels: (Optional) Key-value map of Kubernetes labels to apply to the nodes.
- ignore\_desired\_size: (Optional) If true, the desired size will be ignored during updates (default: false).
- subnet\_ids: Required list of subnet IDs where the node group will be deployed.
- kubernetes\_version: (Optional) Kubernetes version to use for the node group. |
object({
enable = bool
config = map(object({
node_group_name = optional(string)
node_role_arn = optional(string)
release_version = optional(string)
scaling_config = object({
desired_size = number
max_size = number
min_size = number
})
taints = optional(list(object({
key = string
value = optional(string)
effect = string
})), [])
update_config = optional(object({
max_unavailable = optional(number)
max_unavailable_percentage = optional(number)
}))
remote_access = optional(object({
ec2_ssh_key = string
source_security_group_ids = list(string)
}))
launch_template = optional(object({
id = optional(string)
name = optional(string)
version = string
}))
node_repair_config = optional(object({
enabled = bool
}))
instance_types = optional(list(string), ["t3.medium"])
ami_type = optional(string)
disk_size = optional(number)
capacity_type = optional(string, "ON_DEMAND")
labels = optional(map(string), {})
ignore_desired_size = optional(bool, false)
subnet_ids = list(string)
kubernetes_version = optional(string)
}))
})
|
{
"config": {},
"enable": false
}
| no |
| [node\_group\_policy\_arns](#input\_node\_group\_policy\_arns) | Default policies for EKS node group | `list(string)` |
[
"arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy",
"arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy",
"arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
]
| no |
| [tags](#input\_tags) | Tags for EKS resources | `map(string)` | `{}` | no |
| [upgrade\_policy](#input\_upgrade\_policy) | (optional) Support type to use for the cluster. If the cluster is set to EXTENDED, it will enter extended support at the end of standard support.
If the cluster is set to STANDARD, it will be automatically upgraded at the end of standard support.
Valid values are EXTENDED, STANDARD"

STANDARD - This option supports the Kubernetes version for 14 months after the release date. There is no additional cost. When standard support ends, your cluster will be auto upgraded to the next version.
EXTENDED - This option supports the Kubernetes version for 26 months after the release date. The extended support period has an additional hourly cost that begins after the standard support period ends. When extended support ends, your cluster will be auto upgraded to the next version. | `string` | `"STANDARD"` | no |
| [vpc\_config](#input\_vpc\_config) | Configuration block for VPC settings:
- security\_group\_ids: List of security group IDs associated with the VPC.
- subnet\_ids: List of subnet IDs where resources will be deployed.
- endpoint\_private\_access: Enable or disable private access to the cluster endpoint.
- endpoint\_public\_access: Enable or disable public access to the cluster endpoint.
- public\_access\_cidrs: CIDR blocks that can access the public endpoint (if enabled). |
object({
security_group_ids = optional(list(string), [])
subnet_ids = list(string)
endpoint_private_access = optional(bool, false)
endpoint_public_access = optional(bool, true)
public_access_cidrs = optional(list(string), ["0.0.0.0/0"])
})
| n/a | yes |

## Outputs

| Name | Description |
|------|-------------|
| [arn](#output\_arn) | The Amazon Resource Name (ARN) of the EKS cluster |
| [auto\_mode\_node\_role\_arn](#output\_auto\_mode\_node\_role\_arn) | ARN of Auto mode node role |
| [certificate\_authority\_data](#output\_certificate\_authority\_data) | The base64-encoded certificate data required to communicate with the EKS cluster |
| [eks\_capabilities](#output\_eks\_capabilities) | EKS capabilities information |
| [eks\_cluster\_id](#output\_eks\_cluster\_id) | The unique identifier of the EKS cluster |
| [eks\_cluster\_security\_group\_id](#output\_eks\_cluster\_security\_group\_id) | The ID of the security group associated with the EKS cluster's control plane |
| [endpoint](#output\_endpoint) | The endpoint for the EKS cluster API server |
| [name](#output\_name) | The name of the EKS cluster |
| [oidc\_provider\_url](#output\_oidc\_provider\_url) | The OIDC identity provider URL for the EKS cluster (without the https:// prefix) |

## Kubernetes dashboard
To view the dashboard, run the following commands:

```shell
aws eks update-kubeconfig --name refarch-dev-primary-k8s-cluster --region us-east-1
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-dashboard-viewer | awk '{print $1}') #Copy the token from the output
kubectl proxy
```

Then navigate to:

```text
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login
```

and use the copied token to login
## Development

### Prerequisites

- [terraform](https://learn.hashicorp.com/terraform/getting-started/install#installing-terraform)
- [terraform-docs](https://github.com/segmentio/terraform-docs)
- [pre-commit](https://pre-commit.com/#install)
- [golang](https://golang.org/doc/install#install)
- [golint](https://github.com/golang/lint#installation)

### Configurations

- Configure pre-commit hooks
```sh
pre-commit install
```

- Configure golang deps for tests
```sh
> go get github.com/gruntwork-io/terratest/modules/terraform
> go get github.com/stretchr/testify/assert
```
### Git commits

while Contributing or doing git commit please specify the breaking change in your commit message whether its major,minor or patch

For Example

```sh
git commit -m "your commit message #major"
```
By specifying this , it will bump the version and if you dont specify this in your commit message then by default it will consider patch and will bump that accordingly

### Tests

- Tests are available in `test` directory

- In the test directory, run the below command
```sh
go test
```

## Authors

This project is authored by below people

- SourceFuse ARC Team

## Contributors ✨

Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):



vijay-stephen
vijay-stephen

πŸ’» πŸš‡ πŸ“– 🚧 πŸ§‘β€πŸ«
Shubham Sinha
Shubham Sinha

πŸ’» πŸš‡ πŸ“– 🚧 πŸ§‘β€πŸ«
Travis Saucier
Travis Saucier

πŸ’» πŸš‡ πŸ“– 🚧 πŸ§‘β€πŸ«
Mayank Sharma
Mayank Sharma

πŸ’» πŸš‡ πŸ“– 🚧 πŸ§‘β€πŸ«

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!