{"id":16772000,"url":"https://github.com/eddmann/our-wedding-infra","last_synced_at":"2026-04-22T05:32:55.168Z","repository":{"id":58656615,"uuid":"435937434","full_name":"eddmann/our-wedding-infra","owner":"eddmann","description":"Infrastructure concerns related to Our Wedding Website using Terraform/AWS/Serverless","archived":false,"fork":false,"pushed_at":"2022-10-17T19:03:12.000Z","size":105,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-01T10:18:02.930Z","etag":null,"topics":["amazon-web-services","aws","infrastructure-as-code","terraform","terraform-cloud"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eddmann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-07T15:42:41.000Z","updated_at":"2025-08-10T14:08:36.000Z","dependencies_parsed_at":"2022-09-24T01:52:33.073Z","dependency_job_id":null,"html_url":"https://github.com/eddmann/our-wedding-infra","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eddmann/our-wedding-infra","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Four-wedding-infra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Four-wedding-infra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Four-wedding-infra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Four-wedding-infra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eddmann","download_url":"https://codeload.github.com/eddmann/our-wedding-infra/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Four-wedding-infra/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32122721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T00:31:26.853Z","status":"online","status_checked_at":"2026-04-22T02:00:05.693Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["amazon-web-services","aws","infrastructure-as-code","terraform","terraform-cloud"],"created_at":"2024-10-13T06:29:39.073Z","updated_at":"2026-04-22T05:32:55.152Z","avatar_url":"https://github.com/eddmann.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Our Wedding Infrastructure\n\nBecause every Wedding RSVP website needs to be provisioned using Terraform (Cloud) within AWS.\n\n🌎 [Website](https://github.com/eddmann/our-wedding-website) | 📷 [Gallery](https://github.com/eddmann/our-wedding-gallery) | 🏗️ Infrastructure\n\n## Overview\n\nFoundational infrastructure for the Wedding _service_ is provisioned using [Terraform](https://www.terraform.io/) and [Terraform Cloud](https://www.terraform.io/cloud), and can be found within this repository.\nTransient infrastructure such as Lambda functions/API-gateways (which change based on each deployment) are handled using the [Serverless Framework](https://www.serverless.com/); with the application itself being responsible for these concerns.\nResources created at this level (within Terraform) can expose details to the transient application infrastructure by way of [Secrets Manager](https://aws.amazon.com/secrets-manager/) secrets and [SSM](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) parameters.\n\nBelow is a table detailing how each concern has been broken up into logical separated units.\n\n| Context | Name                               | Purpose                            | Example resources                        |\n| ------- | ---------------------------------- | ---------------------------------- | ---------------------------------------- |\n| Shared  | [Network](./shared/network)        | Communication, spanning all stages | Route53 hosted zones for root domain     |\n| Stage   | [Apps/`Application`](./stage/apps) | Fulfil runtime requirements        | CloudFront, SSM, SQS, SNS                |\n| Stage   | [Data/`Application`](./stage/data) | Permanent storage                  | RDS, S3 (User uploads)                   |\n| Stage   | Health                             | Monitoring and alerting            | S3 (logs), CloudTrail, CloudWatch alarms |\n| Stage   | [Network](./stage/network)         | Communication, within given stage  | VPC, VPC endpoints, DNS, NAT-instance    |\n| Stage   | [Security](./stage/security)       | Security                           | KMS, WAF, GuardDuty                      |\n\nFor a clearer understanding of the meaning behind _Context_ and _Application_ please continue reading.\n\n### Project Contexts\n\nTerraform projects which compose the the Wedding _service_ have been broken up into two seperate contexts - _Shared_ and _Stage_.\n\n**Stage**\n\n_Stage_ projects are for infrastructural concerns which relate to a given stage environment, for example `staging` and `prod`.\nThere is expected to be an instance of each given project _per_ stage environment.\nResources within a project can be shared throughout the same environment, but _not_ cross into different stage environments.\nWithin Terraform Cloud we suffix the given project with the stage name to identify its' environment.\n\n**Shared**\n\n_Shared_ projects are for cross-cutting concerns which span all stages - and are shared throughout the _service_ as a whole.\n\nResources within this _service_ have been designed in such a way that they can placed within the same AWS account, or multiple seperate AWS accounts.\n\n### Stage Applications\n\nThe _service_ is composed of many _applications_ which are logically seperated within a given _stage_ based on runtime/storage requirements.\nThere are two applications - one named **Website**, which manages the infrastructure for the [RSVP website](https://github.com/eddmann/our-wedding-website); and another named **Gallery**, which manages infrastructure for the [photo gallery](https://github.com/eddmann/our-wedding-gallery).\n\n## Tooling\n\nThere is a [Makefile](./Makefile) to provide tooling to assist continued development of the _service_.\nSo as to ensure coding standards are met and any security issues caught before provisionment, the following tools are relied upon:\n\n- [tflint](https://github.com/terraform-linters/tflint) - Fixes possible errors and enforces best-practises.\n- [tfsec](https://github.com/aquasecurity/tfsec) - Static analysis tool to spot potential security issues.\n- [tfdoc](https://github.com/terraform-docs/terraform-docs) - generates structured documentation for each Terraform project.\n\nThese tools are run (via `make can-release`) within a [GitHub workflow](./.github/workflows/test.yml) upon each push to the repository.\nThey can also be run locally by invoking the same Make target.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddmann%2Four-wedding-infra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feddmann%2Four-wedding-infra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddmann%2Four-wedding-infra/lists"}