-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
50e763d
commit 565ca93
Showing
16 changed files
with
493 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
--- | ||
formatter: "markdown table" | ||
version: "~> 0.16" | ||
settings: | ||
anchor: true | ||
default: true | ||
description: false | ||
escape: true | ||
hide-empty: false | ||
html: true | ||
indent: 2 | ||
lockfile: true | ||
read-comments: true | ||
required: true | ||
sensitive: true | ||
type: true | ||
sort: | ||
enabled: true | ||
by: name | ||
output: | ||
file: README.md | ||
mode: inject | ||
template: |- | ||
<!-- BEGIN_TF_DOCS --> | ||
{{ .Content }} | ||
<!-- END_TF_DOCS --> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.3.7 |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
brew "tfenv" | ||
brew "terraform-docs" | ||
brew "tfsec" | ||
brew "az" | ||
brew "coreutils" | ||
brew "jq" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,173 @@ | ||
This documentation covers the deployment of the infrastructure to host the app. | ||
|
||
## Azure infrastructure | ||
|
||
The infrastructure is managed using [Terraform](https://www.terraform.io/).<br> | ||
The state is stored remotely in encrypted Azure storage.<br> | ||
[Terraform workspaces](https://www.terraform.io/docs/state/workspaces.html) are used to separate environments. | ||
|
||
#### Configuring the storage backend | ||
|
||
The Terraform state is stored remotely in Azure, this allows multiple team members to | ||
make changes and means the state file is backed up. The state file contains | ||
sensitive information so access to it should be restricted, and it should be stored | ||
encrypted at rest. | ||
|
||
##### Create a new storage backend | ||
|
||
This step only needs to be done once per project (eg. not per environment). | ||
If it has already been created, obtain the storage backend attributes and skip to the next step. | ||
|
||
The [Azure tutorial](https://docs.microsoft.com/en-us/azure/developer/terraform/store-state-in-azure-storage) outlines the steps to create a storage account and container for the state file. You will need: | ||
|
||
- resource_group_name: The name of the resource group used for the Azure Storage account. | ||
- storage_account_name: The name of the Azure Storage account. | ||
- container_name: The name of the blob container. | ||
- key: The name of the state store file to be created. | ||
|
||
##### Create a backend configuration file | ||
|
||
Create a new file named `backend.vars` with the following content: | ||
|
||
``` | ||
resource_group_name = [the name of the Azure resource group] | ||
storage_account_name = [the name of the Azure Storage account] | ||
container_name = [the name of the blob container] | ||
key = "terraform.tstate" | ||
``` | ||
|
||
##### Install dependencies | ||
|
||
We can use [Homebrew](https://brew.sh) to install the dependecies we need to deploy the infrastructure (eg. tfenv, Azure cli). | ||
These are listed in the `Brewfile` | ||
|
||
to install, run: | ||
|
||
``` | ||
$ brew bundle | ||
``` | ||
|
||
##### Log into azure with the Azure CLI | ||
|
||
Log in to your account: | ||
|
||
``` | ||
$ az login | ||
``` | ||
|
||
Confirm which account you are currently using: | ||
|
||
``` | ||
$ az account show | ||
``` | ||
|
||
To list the available subscriptions, run: | ||
|
||
``` | ||
$ az account list | ||
``` | ||
|
||
Then if needed, switch to it using the 'id': | ||
|
||
``` | ||
$ az account set --subscription <id> | ||
``` | ||
|
||
##### Initialise Terraform | ||
|
||
Install the required terraform version with the Terraform version manager `tfenv`: | ||
|
||
``` | ||
$ tfenv install | ||
``` | ||
|
||
Initialize Terraform to download the required Terraform modules and configure the remote state backend | ||
to use the settings you specified in the previous step. | ||
|
||
`$ terraform init -backend-config=backend.vars` | ||
|
||
##### Create a Terraform variables file | ||
|
||
Each environment will need it's own `tfvars` file. | ||
|
||
Copy the `terraform.tfvars.example` to `environment-name.tfvars` and modify the contents as required | ||
|
||
##### Create the infrastructure | ||
|
||
Now Terraform has been initialised you can create a workspace if needed: | ||
|
||
`$ terraform workspace new staging` | ||
|
||
Or to check what workspaces already exist: | ||
|
||
`$ terraform workspace list` | ||
|
||
Switch to the new or existing workspace: | ||
|
||
`$ terraform workspace select staging` | ||
|
||
Plan the changes: | ||
|
||
`$ terraform plan -var-file=staging.tfvars` | ||
|
||
Terraform will ask you to provide any variables not specified in an `*.auto.tfvars` file. | ||
Now you can run: | ||
|
||
`$ terraform apply -var-file=staging.tfvars` | ||
|
||
If everything looks good, answer `yes` and wait for the new infrastructure to be created. | ||
|
||
##### Azure resources | ||
|
||
<!-- BEGIN_TF_DOCS --> | ||
## Requirements | ||
|
||
| Name | Version | | ||
|------|---------| | ||
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.3.6 | | ||
| <a name="requirement_azapi"></a> [azapi](#requirement\_azapi) | >= 1.1.0 | | ||
| <a name="requirement_azurerm"></a> [azurerm](#requirement\_azurerm) | >= 3.35.0 | | ||
|
||
## Providers | ||
|
||
| Name | Version | | ||
|------|---------| | ||
| <a name="provider_azuread"></a> [azuread](#provider\_azuread) | 2.31.0 | | ||
| <a name="provider_azurerm"></a> [azurerm](#provider\_azurerm) | 3.38.0 | | ||
|
||
## Modules | ||
|
||
| Name | Source | Version | | ||
|------|--------|---------| | ||
| <a name="module_azure_container_apps_hosting"></a> [azure\_container\_apps\_hosting](#module\_azure\_container\_apps\_hosting) | github.com/DFE-Digital/terraform-azurerm-container-apps-hosting | v0.12.0 | | ||
|
||
## Resources | ||
|
||
| Name | Type | | ||
|------|------| | ||
| [azurerm_key_vault.tfvars](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/key_vault) | resource | | ||
| [azurerm_key_vault_secret.tfvars](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/key_vault_secret) | resource | | ||
| [azuread_user.key_vault_access](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/data-sources/user) | data source | | ||
| [azurerm_client_config.current](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/client_config) | data source | | ||
|
||
## Inputs | ||
|
||
| Name | Description | Type | Default | Required | | ||
|------|-------------|------|---------|:--------:| | ||
| <a name="input_azure_location"></a> [azure\_location](#input\_azure\_location) | Azure location in which to launch resources. | `string` | n/a | yes | | ||
| <a name="input_container_command"></a> [container\_command](#input\_container\_command) | Container command | `list(any)` | n/a | yes | | ||
| <a name="input_container_secret_environment_variables"></a> [container\_secret\_environment\_variables](#input\_container\_secret\_environment\_variables) | Container secret environment variables | `map(string)` | n/a | yes | | ||
| <a name="input_enable_cdn_frontdoor"></a> [enable\_cdn\_frontdoor](#input\_enable\_cdn\_frontdoor) | Enable Azure CDN FrontDoor. This will use the Container Apps endpoint as the origin. | `bool` | n/a | yes | | ||
| <a name="input_enable_container_registry"></a> [enable\_container\_registry](#input\_enable\_container\_registry) | Set to true to create a container registry | `bool` | n/a | yes | | ||
| <a name="input_environment"></a> [environment](#input\_environment) | Environment name. Will be used along with `project_name` as a prefix for all resources. | `string` | n/a | yes | | ||
| <a name="input_image_name"></a> [image\_name](#input\_image\_name) | Image name | `string` | n/a | yes | | ||
| <a name="input_key_vault_access_users"></a> [key\_vault\_access\_users](#input\_key\_vault\_access\_users) | List of users that require access to the Key Vault where tfvars are stored. This should be a list of User Principle Names (Found in Active Directory) that need to run terraform | `list(string)` | n/a | yes | | ||
| <a name="input_project_name"></a> [project\_name](#input\_project\_name) | Project name. Will be used along with `environment` as a prefix for all resources. | `string` | n/a | yes | | ||
| <a name="input_tags"></a> [tags](#input\_tags) | Tags to be applied to all resources | `map(string)` | n/a | yes | | ||
| <a name="input_tfvars_filename"></a> [tfvars\_filename](#input\_tfvars\_filename) | tfvars filename. This file is uploaded and stored encrupted within Key Vault, to ensure that the latest tfvars are stored in a shared place. | `string` | n/a | yes | | ||
| <a name="input_virtual_network_address_space"></a> [virtual\_network\_address\_space](#input\_virtual\_network\_address\_space) | Virtual network address space CIDR | `string` | n/a | yes | | ||
|
||
## Outputs | ||
|
||
No outputs. | ||
<!-- END_TF_DOCS --> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
terraform { | ||
backend "azurerm" {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
resource_group_name = "<resource_group_name>" | ||
storage_account_name = "<storage_account_name>" | ||
container_name = "<container_name>" | ||
key = "terraform.tstate" | ||
subscription_id = "<subscription_id>" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
module "azure_container_apps_hosting" { | ||
source = "github.com/DFE-Digital/terraform-azurerm-container-apps-hosting?ref=v0.12.0" | ||
|
||
environment = local.environment | ||
project_name = local.project_name | ||
azure_location = local.azure_location | ||
tags = local.tags | ||
|
||
virtual_network_address_space = local.virtual_network_address_space | ||
|
||
enable_container_registry = local.enable_container_registry | ||
|
||
image_name = local.image_name | ||
container_command = local.container_command | ||
container_secret_environment_variables = local.container_secret_environment_variables | ||
|
||
enable_cdn_frontdoor = local.enable_cdn_frontdoor | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
data "azurerm_client_config" "current" {} | ||
|
||
data "azuread_user" "key_vault_access" { | ||
for_each = local.key_vault_access_users | ||
|
||
user_principal_name = each.value | ||
} |
Oops, something went wrong.