Skip to content

Migrate WAF to UDR #450

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions __fixtures__/productConfig.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -436,4 +436,26 @@ export const PRODUCT_CONFIG = {
// versionedDocs: true,
// websiteDir: 'website',
// },
'well-architected-framework': {
/**
* ✅ Initial migration attempt: SEEMS TO WORK
*
* Maybe worth noting: versioned docs is not enabled for `terraform-docs-common`.
* `branchForLatest` is set to `main`. We treat the single version
* as `v0.0.x` in our version metadata in the current content API:
* https://content.hashicorp.com/api/content/terraform-docs-common/version-metadata?partial=true
*/
/**
* TODO: `terraform-docs-common` has _both_ an `img` folder, _and_ a
* `public` folder. Need to investigate how these are used, and whether
* we need to move both over (eg assetDirs could be an array?)
*/
assetDir: 'img',
contentDir: 'docs',
dataDir: 'data',
productSlug: 'well-architected-framework',
semverCoerce: semver.coerce,
versionedDocs: false,
websiteDir: 'website',
},
}
22 changes: 22 additions & 0 deletions app/utils/productConfig.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -440,4 +440,26 @@ export const PRODUCT_CONFIG = {
// versionedDocs: true,
// websiteDir: 'website',
// },
'well-architected-framework': {
/**
* ✅ Initial migration attempt: SEEMS TO WORK
*
* Maybe worth noting: versioned docs is not enabled for `terraform-docs-common`.
* `branchForLatest` is set to `main`. We treat the single version
* as `v0.0.x` in our version metadata in the current content API:
* https://content.hashicorp.com/api/content/terraform-docs-common/version-metadata?partial=true
*/
/**
* TODO: `terraform-docs-common` has _both_ an `img` folder, _and_ a
* `public` folder. Need to investigate how these are used, and whether
* we need to move both over (eg assetDirs could be an array?)
*/
assetDir: 'img',
contentDir: 'docs',
dataDir: 'data',
productSlug: 'well-architected-framework',
semverCoerce: semver.coerce,
versionedDocs: false,
websiteDir: 'website',
},
}
253 changes: 253 additions & 0 deletions content/well-architected-framework/data/docs-nav-data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
[
{
"title": "What is well-architected framework?",
"path": "implement-cloud-operating-model"
},
{
"title": "Cloud operating model",
"path": "cloud-operating-model"
},
{
"title": "Implementation resources",
"routes": [
{
"title": "Terraform reliability",
"path": "implementation-resources/terraform-reliability"
},
{
"title": "Packer reliability",
"path": "implementation-resources/packer-reliability"
},
{
"title": "Vault reliability",
"path": "implementation-resources/vault-reliability"
},
{
"title": "Consul reliability",
"path": "implementation-resources/consul-reliability"
},
{
"title": "Nomad reliability",
"path": "implementation-resources/nomad-reliability"
}
]
},
{
"divider": true
},
{
"heading": "Framework pillars"
},
{
"title": "Automate and define processes",
"routes": [
{
"title": "Introduction",
"path": "operational-excellence/introduction"
},
{
"title": "Application deployments",
"routes": [
{
"title": "Application deployments",
"path": "automate-and-define-processes/application-deployments/application-deployments"
},
{
"title": "Evaluate existing deployments",
"path": "automate-and-define-processes/application-deployments/evaluate-existing-deployments"
},
{
"title": "Integrate CI/CD pipelines",
"path": "automate-and-define-processes/application-deployments/ci-cd"
},
{
"title": "Deploy applications",
"path": "automate-and-define-processes/application-deployments/deploy"
},
{
"title": "Package applications",
"path": "automate-and-define-processes/application-deployments/package"
},
{
"title": "Write and test applications",
"path": "automate-and-define-processes/application-deployments/testing"
}
]
},
{
"title": "Automate infrastructure",
"routes": [
{
"title": "Automate infrastructure",
"path": "automate-and-define-processes/automate-infrastructure/automate"
},
{
"title": "Codify infrastructure",
"path": "automate-and-define-processes/automate-infrastructure/codify-infrastructure"
},
{
"title": "Use version control",
"path": "automate-and-define-processes/automate-infrastructure/use-version-control"
},
{
"title": "Identify reusable components",
"path": "automate-and-define-processes/automate-infrastructure/identify-reusable-components"
},
{
"title": "Atomic deployments",
"path": "automate-and-define-processes/automate-infrastructure/atomic-deployments"
},
{
"title": "Standardize workflows",
"path": "automate-and-define-processes/automate-infrastructure/standardize-workflows"
},
{
"title": "Plan for scale",
"path": "automate-and-define-processes/automate-infrastructure/scale"
}
]
}
]
},
{
"title": "Optimize resources",
"routes": [
{
"title": "Introduction",
"path": "optimize-resources/introduction"
}
]
},
{
"title": "Design resilient systems",
"routes": [
{
"title": "Introduction",
"path": "design-resilient-systems/introduction"
},
{
"title": "Disaster recovery",
"routes": [
{
"title": "State management and disaster recovery",
"path": "design-resilient-systems/disaster-recovery/state-management-and-dr"
}
]
},
{
"title": "Zero-downtime deployments",
"routes": [
{
"title": "Zero-downtime deployments",
"path": "design-resilient-systems/zero-downtime-deployments/zero-downtime-deployments"
},
{
"title": "Infrastructures",
"path": "design-resilient-systems/zero-downtime-deployments/infrastructure"
},
{
"title": "Application",
"path": "design-resilient-systems/zero-downtime-deployments/application"
},
{
"title": "Service mesh",
"path": "design-resilient-systems/zero-downtime-deployments/service-mesh"
}
]
},
{
"title": "Fault tolerance",
"routes": [
{
"title": "Fault tolerant systems",
"path": "design-resilient-systems/fault-tolerance/fault-tolerant-systems"
},
{
"title": "Networking and communication protocols",
"path": "design-resilient-systems/fault-tolerance/networking-and-communication-protocols"
},
{
"title": "Redundancy and replication",
"path": "design-resilient-systems/fault-tolerance/redundancy-and-replication"
},
{
"title": "Resiliency and availability",
"path": "design-resilient-systems/fault-tolerance/resiliency-and-availability"
},
{
"title": "Scale and tune performance",
"path": "design-resilient-systems/fault-tolerance/scale"
},
{
"title": "Secure distributed systems",
"path": "design-resilient-systems/fault-tolerance/secure-distributed-systems"
}
]
}
]
},
{
"title": "Secure systems",
"routes": [
{
"title": "Introduction",
"path": "secure-systems/introduction"
},
{
"title": "Protect data",
"routes": [
{
"title": "Protect sensitive data",
"path": "secure-systems/protect-data/sensitive-data"
},
{
"title": "Data at-rest",
"path": "secure-systems/protect-data/data-at-rest"
},
{
"title": "Data in-transit",
"path": "secure-systems/protect-data/data-in-transit"
},
{
"title": "Tokenize data",
"path": "secure-systems/protect-data/tokenize-data"
}
]
},
{
"title": "Prevent lateral movement",
"path": "secure-systems/prevent-lateral-movement"
},
{
"title": "Appendix",
"path": "secure-systems/appendix"
}
]
},
{
"divider": true
},
{
"heading": "Reference architecture"
},
{
"title": "Terraform",
"href": "/well-architected-framework/terraform/enterprise-reference-architecture"
},
{
"title": "Vault (multi-cluster)",
"href": "/well-architected-framework/zero-trust-security/multi-cluster-architecture"
},
{
"title": "Vault (integrated storage)",
"href": "/well-architected-framework/zero-trust-security/raft-reference-architecture"
},
{
"title": "Consul",
"href": "/well-architected-framework/zero-trust-networking/reference-architecture"
},
{
"title": "Nomad",
"href": "/well-architected-framework/nomad/production-reference-architecture-vm-with-consul"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
page_title: Application deployments
description: Learn how to deploy application.
---

# Application deployments

This guide describes the best practices for creating an application delivery
strategy with HashiCorp tools. A well-designed deployment strategy helps you
deliver your application to production faster and catch bugs before your users
run into them. A complete deployment strategy has five fundamental components:

1. Write and test applications
1. Package applications
1. Provision infrastructure
1. Deploy applications
1. Connect and monitor applications
1. Monitor infrastructure
1. Securely access infrastructure

There are also two components to consider throughout the entire deployment process:

1. Define your security strategy
1. Integrate with your CI/CD pipeline

![The responsibilities of each team during application deployment. Developers write and test the application. Developer and Ops package the application into a machine image. Operators provision infrastructure and deploy the application. The networking team connects and monitors the application and infrastructure.](/img/docs/waf/app-delivery-roles.png#light-theme-only)

![The responsibilities of each team during application deployment. Developers write and test the application. Developer and Ops package the application into a machine image. Operators provision infrastructure and deploy the application. The networking team connects and monitors the application and infrastructure.](/img/docs/waf/app-delivery-roles-dark.png#dark-theme-only)

Your organization may have additional requirements for delivering your
applications. For example, your security guidelines may require you to perform
static code analysis on your codebase before you package it. After you package
your application, your operations team may have a package registry that they
require you to upload your application to.

Once you identify and implement each required step of your deployment strategy,
we recommend automating them in a CI/CD pipeline. These pipelines will help
every team in your organization adopt your deployment strategy by enforcing your
designed strategy.

This guide gives our recommendations on how your organization can implement
these seven steps, and covers how HashiCorp tools can fit into that cycle.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
page_title: Integrate CI/CD pipelines
description: Learn how to evaluate existing deployments.
---

# Integrate CI/CD pipelines

You can integrate each recommendation from this guide into your existing CI/CD
pipeline. If you already have a solution to address some of these
recommendations but are looking to improve other aspects of your application
deployment strategy, each of these recommendations can be implemented
individually.

![The application delivery cycle showing all five phases, connected together by a CI/CD pipeline.](/img/waf/app-delivery-cycle.png#light-theme-only)
![The application delivery cycle showing all five phases, connected together by a CI/CD pipeline.](/img/waf/app-delivery-cycle-dark.png#dark-theme-only)

HashiCorp resources:

- [Automate Packer with GitHub Actions](/packer/tutorials/cloud-production/github-actions)
- [Automate Terraform with GitHub Actions](/terraform/tutorials/automation/github-actions)
- [Retrieving CI/CD secrets from Vault](/well-architected-framework/security/security-cicd-vault)
Loading
Loading