{"id":13505610,"url":"https://github.com/terraform-aws-modules/terraform-aws-atlantis","last_synced_at":"2025-05-16T05:03:10.941Z","repository":{"id":37718457,"uuid":"134884578","full_name":"terraform-aws-modules/terraform-aws-atlantis","owner":"terraform-aws-modules","description":"Terraform module to deploy Atlantis on AWS Fargate 🇺🇦","archived":false,"fork":false,"pushed_at":"2024-10-11T15:57:28.000Z","size":440,"stargazers_count":530,"open_issues_count":1,"forks_count":357,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-04-13T19:50:01.670Z","etag":null,"topics":["atlantis","aws","aws-fargate","terraform-module"],"latest_commit_sha":null,"homepage":"https://registry.terraform.io/modules/terraform-aws-modules/atlantis/aws","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/terraform-aws-modules.png","metadata":{"funding":{"github":["antonbabenko"],"custom":"https://www.paypal.me/antonbabenko"},"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-25T17:13:14.000Z","updated_at":"2025-04-10T15:52:31.000Z","dependencies_parsed_at":"2023-02-14T01:35:33.272Z","dependency_job_id":"9fd22e94-9dd0-4fc3-8474-348701e97979","html_url":"https://github.com/terraform-aws-modules/terraform-aws-atlantis","commit_stats":{"total_commits":285,"total_committers":76,"mean_commits":3.75,"dds":0.6526315789473685,"last_synced_commit":"0ee2a20432d43d40c0a0921bca5a6131e531d562"},"previous_names":[],"tags_count":122,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terraform-aws-modules%2Fterraform-aws-atlantis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terraform-aws-modules%2Fterraform-aws-atlantis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terraform-aws-modules%2Fterraform-aws-atlantis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terraform-aws-modules%2Fterraform-aws-atlantis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/terraform-aws-modules","download_url":"https://codeload.github.com/terraform-aws-modules/terraform-aws-atlantis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254471028,"owners_count":22076582,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atlantis","aws","aws-fargate","terraform-module"],"created_at":"2024-08-01T00:01:10.629Z","updated_at":"2025-05-16T05:03:10.886Z","avatar_url":"https://github.com/terraform-aws-modules.png","language":"HCL","funding_links":["https://github.com/sponsors/antonbabenko","https://www.paypal.me/antonbabenko"],"categories":["Community Modules","HCL"],"sub_categories":["Miscellaneous"],"readme":"# Atlantis on AWS Fargate Terraform Module\n\n[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md)\n\n[Atlantis](https://www.runatlantis.io/) is tool which provides unified workflow for collaborating on Terraform through GitHub, GitLab and Bitbucket Cloud.\n\n\u003e Before using Atlantis and the code in this repository, please make sure that you have read and understood the security implications described in [the official Atlantis documentation](https://www.runatlantis.io/docs/security.html).\n\n## Usage\n\nGitHub is shown below in usage examples; however, any git provider supported by Atlantis can be used by simply using the correct Atlantis environment variables and configuring the respective webhook for the given git provider.\n\nSee the [Supplemental Docs](https://github.com/terraform-aws-modules/terraform-aws-atlantis/blob/master/docs/README.md) for additional details on integrating with git providers.\n\n### GitHub Complete\n\nThe Atlantis module creates all resources required to run Atlantis on AWS Fargate.\n\n```hcl\nmodule \"atlantis\" {\n  source  = \"terraform-aws-modules/atlantis/aws\"\n\n  name = \"atlantis\"\n\n  # ECS Container Definition\n  atlantis = {\n    environment = [\n      {\n        name  = \"ATLANTIS_GH_USER\"\n        value = \"myuser\"\n      },\n      {\n        name  = \"ATLANTIS_REPO_ALLOWLIST\"\n        value = \"github.com/terraform-aws-modules/*\"\n      },\n    ]\n    secrets = [\n      {\n        name      = \"ATLANTIS_GH_TOKEN\"\n        valueFrom = \"arn:aws:secretsmanager:eu-west-1:111122223333:secret:aes256-7g8H9i\"\n      },\n      {\n        name      = \"ATLANTIS_GH_WEBHOOK_SECRET\"\n        valueFrom = \"arn:aws:secretsmanager:eu-west-1:111122223333:secret:aes192-4D5e6F\"\n      },\n    ]\n  }\n\n  # ECS Service\n  service = {\n    task_exec_secret_arns = [\n      \"arn:aws:secretsmanager:eu-west-1:111122223333:secret:aes256-7g8H9i\",\n      \"arn:aws:secretsmanager:eu-west-1:111122223333:secret:aes192-4D5e6F\",\n    ]\n    # Provide Atlantis permission necessary to create/destroy resources\n    tasks_iam_role_policies = {\n      AdministratorAccess = \"arn:aws:iam::aws:policy/AdministratorAccess\"\n    }\n  }\n  service_subnets = [\"subnet-xyzde987\", \"subnet-slkjf456\", \"subnet-qeiru789\"]\n  vpc_id          = \"vpc-1234556abcdef\"\n\n  # ALB\n  alb_subnets             = [\"subnet-abcde012\", \"subnet-bcde012a\", \"subnet-fghi345a\"]\n  certificate_domain_name = \"example.com\"\n  route53_zone_id         = \"Z2ES7B9AZ6SHAE\"\n\n  tags = {\n    Environment = \"dev\"\n    Terraform   = \"true\"\n  }\n}\n```\n\n### GitHub Separate\n\nThe Atlantis module creates most of resources required to run Atlantis on AWS Fargate, except for the ECS Cluster and ALB. This allows you to integrate Atlantis with your existing AWS infrastructure.\n\n```hcl\nmodule \"atlantis\" {\n  source  = \"terraform-aws-modules/atlantis/aws\"\n\n  name = \"atlantis\"\n\n  # Existing cluster\n  create_cluster = false\n  cluster_arn    = \"arn:aws:ecs:eu-west-1:123456789012:cluster/default\"\n\n  # Existing ALB\n  create_alb            = false\n  alb_target_group_arn  = \"arn:aws:elasticloadbalancing:eu-west-1:1234567890:targetgroup/bluegreentarget1/209a844cd01825a4\"\n  alb_security_group_id = \"sg-12345678\"\n\n  # ECS Container Definition\n  atlantis = {\n    environment = [\n      {\n        name  = \"ATLANTIS_GH_USER\"\n        value = \"myuser\"\n      },\n      {\n        name  = \"ATLANTIS_REPO_ALLOWLIST\"\n        value = \"github.com/terraform-aws-modules/*\"\n      },\n    ]\n    secrets = [\n      {\n        name      = \"ATLANTIS_GH_TOKEN\"\n        valueFrom = \"arn:aws:secretsmanager:eu-west-1:111122223333:secret:aes256-7g8H9i\"\n      },\n      {\n        name      = \"ATLANTIS_GH_WEBHOOK_SECRET\"\n        valueFrom = \"arn:aws:secretsmanager:eu-west-1:111122223333:secret:aes192-4D5e6F\"\n      },\n    ]\n  }\n\n  # ECS Service\n  service = {\n    task_exec_secret_arns = [\n      \"arn:aws:secretsmanager:eu-west-1:111122223333:secret:aes256-7g8H9i\",\n      \"arn:aws:secretsmanager:eu-west-1:111122223333:secret:aes192-4D5e6F\",\n    ]\n    # Provide Atlantis permission necessary to create/destroy resources\n    tasks_iam_role_policies = {\n      AdministratorAccess = \"arn:aws:iam::aws:policy/AdministratorAccess\"\n    }\n  }\n  service_subnets = [\"subnet-xyzde987\", \"subnet-slkjf456\", \"subnet-qeiru789\"]\n  vpc_id          = \"vpc-1234556abcdef\"\n\n  tags = {\n    Environment = \"dev\"\n    Terraform   = \"true\"\n  }\n}\n```\n\n### Utilize EFS for Persistent Storage\n\nYou can enable EFS to ensure that any plan outputs are persisted to EFS in the event that the Atlantis Task is replaced:\n\n```hcl\n```hcl\nmodule \"atlantis\" {\n  source  = \"terraform-aws-modules/atlantis/aws\"\n\n  # Truncated for brevity ...\n\n  # EFS\n  enable_efs = true\n  efs = {\n    mount_targets = {\n      \"eu-west-1a\" = {\n        subnet_id = \"subnet-xyzde987\"\n      }\n      \"eu-west-1b\" = {\n        subnet_id = \"subnet-slkjf456\"\n      }\n      \"eu-west-1c\" = {\n        subnet_id = \"subnet-qeiru789\"\n      }\n    }\n  }\n}\n```\n\n### Supply Atlantis server configuration\n\n`server-atlantis.yaml`\n\n```yaml\nrepos:\n  - id: /.*/\n    allow_custom_workflows: true\n    allowed_overrides:\n      - apply_requirements\n      - workflow\n    apply_requirements:\n      - approved\n    workflow: default\n```\n\n`main.tf`\n\n```hcl\nmodule \"atlantis\" {\n  source  = \"terraform-aws-modules/atlantis/aws\"\n\n  # ...\n\n  atlantis = {\n    environment = [\n      {\n        name : \"ATLANTIS_REPO_CONFIG_JSON\",\n        value : jsonencode(yamldecode(file(\"${path.module}/server-atlantis.yaml\"))),\n      },\n    ]\n  }\n}\n```\n\n## Examples\n\n- [Complete Atlantis with GitHub webhook](https://github.com/terraform-aws-modules/terraform-aws-atlantis/tree/master/examples/github-complete)\n- [Separate Atlantis with GitHub webhook](https://github.com/terraform-aws-modules/terraform-aws-atlantis/tree/master/examples/github-separate)\n\n\u003c!-- BEGIN_TF_DOCS --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | \u003e= 1.0 |\n\n## Providers\n\nNo providers.\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_acm\"\u003e\u003c/a\u003e [acm](#module\\_acm) | terraform-aws-modules/acm/aws | 5.0.0 |\n| \u003ca name=\"module_alb\"\u003e\u003c/a\u003e [alb](#module\\_alb) | terraform-aws-modules/alb/aws | 9.1.0 |\n| \u003ca name=\"module_ecs_cluster\"\u003e\u003c/a\u003e [ecs\\_cluster](#module\\_ecs\\_cluster) | terraform-aws-modules/ecs/aws//modules/cluster | 5.11.0 |\n| \u003ca name=\"module_ecs_service\"\u003e\u003c/a\u003e [ecs\\_service](#module\\_ecs\\_service) | terraform-aws-modules/ecs/aws//modules/service | 5.11.0 |\n| \u003ca name=\"module_efs\"\u003e\u003c/a\u003e [efs](#module\\_efs) | terraform-aws-modules/efs/aws | 1.3.1 |\n\n## Resources\n\nNo resources.\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_alb\"\u003e\u003c/a\u003e [alb](#input\\_alb) | Map of values passed to ALB module definition. See the [ALB module](https://github.com/terraform-aws-modules/terraform-aws-alb) for full list of arguments supported | `any` | `{}` | no |\n| \u003ca name=\"input_alb_https_default_action\"\u003e\u003c/a\u003e [alb\\_https\\_default\\_action](#input\\_alb\\_https\\_default\\_action) | Default action for the ALB https listener | `any` | \u003cpre\u003e{\u003cbr/\u003e  \"forward\": {\u003cbr/\u003e    \"target_group_key\": \"atlantis\"\u003cbr/\u003e  }\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_alb_security_group_id\"\u003e\u003c/a\u003e [alb\\_security\\_group\\_id](#input\\_alb\\_security\\_group\\_id) | ID of an existing security group that will be used by ALB. Required if `create_alb` is `false` | `string` | `\"\"` | no |\n| \u003ca name=\"input_alb_subnets\"\u003e\u003c/a\u003e [alb\\_subnets](#input\\_alb\\_subnets) | List of subnets to place ALB in. Required if `create_alb` is `true` | `list(string)` | `[]` | no |\n| \u003ca name=\"input_alb_target_group_arn\"\u003e\u003c/a\u003e [alb\\_target\\_group\\_arn](#input\\_alb\\_target\\_group\\_arn) | ARN of an existing ALB target group that will be used to route traffic to the Atlantis service. Required if `create_alb` is `false` | `string` | `\"\"` | no |\n| \u003ca name=\"input_atlantis\"\u003e\u003c/a\u003e [atlantis](#input\\_atlantis) | Map of values passed to Atlantis container definition. See the [ECS container definition module](https://github.com/terraform-aws-modules/terraform-aws-ecs/tree/master/modules/container-definition) for full list of arguments supported | `any` | `{}` | no |\n| \u003ca name=\"input_atlantis_gid\"\u003e\u003c/a\u003e [atlantis\\_gid](#input\\_atlantis\\_gid) | GID of the atlantis user | `number` | `1000` | no |\n| \u003ca name=\"input_atlantis_uid\"\u003e\u003c/a\u003e [atlantis\\_uid](#input\\_atlantis\\_uid) | UID of the atlantis user | `number` | `100` | no |\n| \u003ca name=\"input_certificate_arn\"\u003e\u003c/a\u003e [certificate\\_arn](#input\\_certificate\\_arn) | ARN of certificate issued by AWS ACM. If empty, a new ACM certificate will be created and validated using Route53 DNS | `string` | `\"\"` | no |\n| \u003ca name=\"input_certificate_domain_name\"\u003e\u003c/a\u003e [certificate\\_domain\\_name](#input\\_certificate\\_domain\\_name) | Route53 domain name to use for ACM certificate. Route53 zone for this domain should be created in advance. Specify if it is different from value in `route53_zone_name` | `string` | `\"\"` | no |\n| \u003ca name=\"input_cluster\"\u003e\u003c/a\u003e [cluster](#input\\_cluster) | Map of values passed to ECS cluster module definition. See the [ECS cluster module](https://github.com/terraform-aws-modules/terraform-aws-ecs/tree/master/modules/cluster) for full list of arguments supported | `any` | `{}` | no |\n| \u003ca name=\"input_cluster_arn\"\u003e\u003c/a\u003e [cluster\\_arn](#input\\_cluster\\_arn) | ARN of an existing ECS cluster where resources will be created. Required when `create_cluster` is `false` | `string` | `\"\"` | no |\n| \u003ca name=\"input_create\"\u003e\u003c/a\u003e [create](#input\\_create) | Controls if resources should be created (affects nearly all resources) | `bool` | `true` | no |\n| \u003ca name=\"input_create_alb\"\u003e\u003c/a\u003e [create\\_alb](#input\\_create\\_alb) | Determines whether to create an ALB or not | `bool` | `true` | no |\n| \u003ca name=\"input_create_certificate\"\u003e\u003c/a\u003e [create\\_certificate](#input\\_create\\_certificate) | Determines whether to create an ACM certificate or not. If `false`, `certificate_arn` must be provided | `bool` | `true` | no |\n| \u003ca name=\"input_create_cluster\"\u003e\u003c/a\u003e [create\\_cluster](#input\\_create\\_cluster) | Whether to create an ECS cluster or not | `bool` | `true` | no |\n| \u003ca name=\"input_create_route53_records\"\u003e\u003c/a\u003e [create\\_route53\\_records](#input\\_create\\_route53\\_records) | Determines whether to create Route53 `A` and `AAAA` records for the loadbalancer | `bool` | `true` | no |\n| \u003ca name=\"input_efs\"\u003e\u003c/a\u003e [efs](#input\\_efs) | Map of values passed to EFS module definition. See the [EFS module](https://github.com/terraform-aws-modules/terraform-aws-efs) for full list of arguments supported | `any` | `{}` | no |\n| \u003ca name=\"input_enable_efs\"\u003e\u003c/a\u003e [enable\\_efs](#input\\_enable\\_efs) | Determines whether to create and utilize an EFS filesystem | `bool` | `false` | no |\n| \u003ca name=\"input_name\"\u003e\u003c/a\u003e [name](#input\\_name) | Common name to use on all resources created unless a more specific name is provided | `string` | `\"atlantis\"` | no |\n| \u003ca name=\"input_route53_record_name\"\u003e\u003c/a\u003e [route53\\_record\\_name](#input\\_route53\\_record\\_name) | Name of Route53 record to create ACM certificate in and main A-record. If null is specified, var.name is used instead. Provide empty string to point root domain name to ALB. | `string` | `null` | no |\n| \u003ca name=\"input_route53_zone_id\"\u003e\u003c/a\u003e [route53\\_zone\\_id](#input\\_route53\\_zone\\_id) | Route53 zone ID to use for ACM certificate and Route53 records | `string` | `\"\"` | no |\n| \u003ca name=\"input_service\"\u003e\u003c/a\u003e [service](#input\\_service) | Map of values passed to ECS service module definition. See the [ECS service module](https://github.com/terraform-aws-modules/terraform-aws-ecs/tree/master/modules/service) for full list of arguments supported | `any` | `{}` | no |\n| \u003ca name=\"input_service_subnets\"\u003e\u003c/a\u003e [service\\_subnets](#input\\_service\\_subnets) | List of subnets to place ECS service within | `list(string)` | `[]` | no |\n| \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags) | A map of tags to add to all resources | `map(string)` | `{}` | no |\n| \u003ca name=\"input_validate_certificate\"\u003e\u003c/a\u003e [validate\\_certificate](#input\\_validate\\_certificate) | Determines whether to validate ACM certificate using Route53 DNS. If `false`, certificate will be created but not validated | `bool` | `true` | no |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | ID of the VPC where the resources will be provisioned | `string` | `\"\"` | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_alb\"\u003e\u003c/a\u003e [alb](#output\\_alb) | ALB created and all of its associated outputs |\n| \u003ca name=\"output_cluster\"\u003e\u003c/a\u003e [cluster](#output\\_cluster) | ECS cluster created and all of its associated outputs |\n| \u003ca name=\"output_efs\"\u003e\u003c/a\u003e [efs](#output\\_efs) | EFS created and all of its associated outputs |\n| \u003ca name=\"output_service\"\u003e\u003c/a\u003e [service](#output\\_service) | ECS service created and all of its associated outputs |\n| \u003ca name=\"output_url\"\u003e\u003c/a\u003e [url](#output\\_url) | URL of Atlantis |\n\u003c!-- END_TF_DOCS --\u003e\n\n## Authors\n\nModule is maintained by [Anton Babenko](https://github.com/antonbabenko) with help from [these awesome contributors](https://github.com/terraform-aws-modules/terraform-aws-atlantis/graphs/contributors).\n\n## License\n\nApache 2 Licensed. See [LICENSE](https://github.com/terraform-aws-modules/terraform-aws-atlantis/tree/master/LICENSE) for full details.\n\n## Additional information for users from Russia and Belarus\n\n- Russia has [illegally annexed Crimea in 2014](https://en.wikipedia.org/wiki/Annexation_of_Crimea_by_the_Russian_Federation) and [brought the war in Donbas](https://en.wikipedia.org/wiki/War_in_Donbas) followed by [full-scale invasion of Ukraine in 2022](https://en.wikipedia.org/wiki/2022_Russian_invasion_of_Ukraine).\n- Russia has brought sorrow and devastations to millions of Ukrainians, killed hundreds of innocent people, damaged thousands of buildings, and forced several million people to flee.\n- [Putin khuylo!](https://en.wikipedia.org/wiki/Putin_khuylo!)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fterraform-aws-modules%2Fterraform-aws-atlantis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fterraform-aws-modules%2Fterraform-aws-atlantis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fterraform-aws-modules%2Fterraform-aws-atlantis/lists"}