Skip to content

Commit

Permalink
create decision record for regionally resilient infra (#20)
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewpearce-digital authored Aug 5, 2022
1 parent 1ea89fd commit b12652d
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 0 deletions.
1 change: 1 addition & 0 deletions .adr-dir
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
docs/architecture/decisions
19 changes: 19 additions & 0 deletions docs/architecture/decisions/0001-record-architecture-decisions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# 1. Record architecture decisions

Date: 2022-08-05

## Status

Accepted

## Context

We need to record the architectural decisions made on this project.

## Decision

We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions).

## Consequences

See Michael Nygard's article, linked above. For a lightweight ADR toolset, see Nat Pryce's [adr-tools](https://github.com/npryce/adr-tools).
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# 2. Regionally resiliant infrastructure

Date: 2022-08-05

## Status

Accepted

## Context

The issue motivating this decision, and any context that influences or constrains the decision.

Disaster recovery and global high availability are difficult to introduce to infrastructure later, and slow to achieve when not considered first.

We know already that the Modernising LPA service will need to meet short RTO and RPO objectives.

## Decision

We will design infrastructure in a way that enables disaster recovery and global high availability strategies.

Infrastructure will be organsised in terraform as regional and global at a per-account and per-environment level.

Modules will be used to define a region Resources within a region will be defined as sub-modules also.

## Consequences

Infrastructure will be easier to implement in a way that enables disaster recovery planning and high availability with RTO and RPO times counted in minutes

Infrastructure will be easy to replcicate across regions, with shared global resources between each region.

For example the account terraform configuration will have a structure like this

```shell
.
├── region
│ ├── modules
│ │ └── certificates
│ │ ├── main.tf
│ │ └── terraform.tf
│ ├── certificates.tf
│ ├── network.tf
│ ├── terraform.tf
│ └── variables.tf
├── README.md
├── regions.tf
├── kms.tf
├── terraform.tf
```

Regions.tf will instatiate the /region module for each AWS region required.

Rsources inside /region will be grouped as modules also, allowing for parts of a region to be replicated as and when needed.

This will allow us to deploy the service in a way that is globally resiliant, and highly available.

Global resources such as IAM roles, or Route53 records will be created in a global region.

Where a resource supports regional replication such as DynamoDB tables, of KMS keys, they will exist in the global layer.
Empty file.
Empty file added docs/conventions/.gitkeep
Empty file.
Empty file added docs/openapi/.gitkeep
Empty file.

0 comments on commit b12652d

Please sign in to comment.