diff --git a/docusaurus.config.js b/docusaurus.config.js
index c067e7233..898392f0c 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -4,6 +4,10 @@ const darkCodeTheme = require('prism-react-renderer').themes.nightOwl;
const fs = require('fs');
const path = require('path');
+// Redirects handling:
+const { getStaticRedirects } = require('./plugins/staticRedirects');
+const { redirectsPlugin } = require('./plugins/dynamicRedirects');
+
// Define the directory containing your CSS files
const cssDirectory = path.resolve(__dirname, './src/css');
@@ -32,296 +36,297 @@ function metadataPlugin(context, options) {
}
}
-/** @type {import('@docusaurus/types').Config} */
-const config = {
- title: 'The Cloud Posse Reference Architecture',
- tagline: 'The turnkey architecture for AWS, Datadog & GitHub Actions to get up and running quickly using the Atmos open source framework.',
- url: 'https://docs.cloudposse.com',
- baseUrl: '/',
- trailingSlash: true,
- onBrokenLinks: 'throw',
- onBrokenMarkdownLinks: 'warn',
- onDuplicateRoutes: 'warn',
- favicon: 'img/favicon.png',
+async function createConfig() {
+ /** @type {import('@docusaurus/types').Config} */
+ const config = {
+ title: 'The Cloud Posse Reference Architecture',
+ tagline: 'The turnkey architecture for AWS, Datadog & GitHub Actions to get up and running quickly using the Atmos open source framework.',
+ url: 'https://docs.cloudposse.com',
+ baseUrl: '/',
+ trailingSlash: true,
+ onBrokenLinks: 'throw',
+ onBrokenMarkdownLinks: 'warn',
+ onDuplicateRoutes: 'warn',
+ favicon: 'img/favicon.png',
- organizationName: 'cloudposse',
- projectName: 'docs',
- deploymentBranch: 'master',
- i18n: {
- defaultLocale: 'en',
- locales: ['en'],
- },
+ organizationName: 'cloudposse',
+ projectName: 'docs',
+ deploymentBranch: 'master',
+ i18n: {
+ defaultLocale: 'en',
+ locales: ['en'],
+ },
- plugins: [
- [
- '@docusaurus/plugin-google-tag-manager',
- {
- containerId: process.env.GOOGLE_TAG_MANAGER || 'GTM-ABCD123'
- },
- ],
- [
- 'docusaurus-plugin-image-zoom', {},
- ],
- [
- '@docusaurus/plugin-client-redirects', {
- redirects: [
- {
- from: '/reference-architecture',
- to: '/learn'
- }
- ],
- },
- ],
- [
- '@docusaurus/plugin-ideal-image',
- {
- quality: 90,
- max: 1030, // max resized image's size.
- min: 640, // min resized image's size. if original is lower, use that size.
- steps: 2, // the max number of images generated between min and max (inclusive)
- disableInDev: false,
- }
- ],
- [
- 'custom-loaders', {}
+ plugins: [
+ [
+ '@docusaurus/plugin-google-tag-manager',
+ {
+ containerId: process.env.GOOGLE_TAG_MANAGER || 'GTM-ABCD123'
+ },
+ ],
+ [
+ 'docusaurus-plugin-image-zoom', {},
+ ],
+ [
+ '@docusaurus/plugin-ideal-image',
+ {
+ quality: 90,
+ max: 1030, // max resized image's size.
+ min: 640, // min resized image's size. if original is lower, use that size.
+ steps: 2, // the max number of images generated between min and max (inclusive)
+ disableInDev: false,
+ }
+ ],
+ [
+ 'custom-loaders', {}
+ ],
+ metadataPlugin,
+ [
+ "posthog-docusaurus",
+ {
+ apiKey: "phc_G3idXOACKt4vIzgRu2FVP8ORO1D2VlkeEwX9mE2jDvT",
+ appUrl: "https://us.i.posthog.com",
+ enableInDevelopment: false, // optional
+ },
+ ],
+ [
+ 'docusaurus-plugin-sentry',
+ {
+ DSN: 'b022344b0e7cc96f803033fff3b377ee@o56155.ingest.us.sentry.io/4507472203087872',
+ },
+ ],
+ [
+ '@docusaurus/plugin-client-redirects',
+ {
+ id: 'static-redirects',
+ redirects: getStaticRedirects(),
+ },
+ ],
+ redirectsPlugin,
],
- metadataPlugin,
- [
- "posthog-docusaurus",
- {
- apiKey: "phc_G3idXOACKt4vIzgRu2FVP8ORO1D2VlkeEwX9mE2jDvT",
- appUrl: "https://us.i.posthog.com",
- enableInDevelopment: false, // optional
- },
+
+ presets: [
+ [
+ 'classic',
+ /** @type {import('@docusaurus/preset-classic').Options} */
+ ({
+ docs: {
+ routeBasePath: '/',
+ sidebarPath: require.resolve('./sidebars.js'),
+ editUrl: ({versionDocsDirPath, docPath, locale}) => {
+ return `https://github.com/cloudposse/docs/edit/master/content/docs/${docPath}`;
+ },
+ exclude: ['README.md'],
+ showLastUpdateTime: true,
+ showLastUpdateAuthor: true,
+ onInlineTags: 'warn',
+ tags: 'tags.yml'
+ },
+ theme: {
+ customCss: customCssFiles,
+ },
+ }),
+ ],
],
- [
- 'docusaurus-plugin-sentry',
+
+ scripts: [
{
- DSN: 'b022344b0e7cc96f803033fff3b377ee@o56155.ingest.us.sentry.io/4507472203087872',
+ src: "https://kit.fontawesome.com/3a9f2eb5b9.js",
},
- ]
- ],
-
- presets: [
- [
- 'classic',
- /** @type {import('@docusaurus/preset-classic').Options} */
- ({
- docs: {
- routeBasePath: '/',
- sidebarPath: require.resolve('./sidebars.js'),
- editUrl: ({versionDocsDirPath, docPath, locale}) => {
- return `https://github.com/cloudposse/docs/edit/master/content/docs/${docPath}`;
- },
- exclude: ['README.md'],
- showLastUpdateTime: true,
- showLastUpdateAuthor: true,
- onInlineTags: 'warn',
- tags: 'tags.yml'
- },
- theme: {
- customCss: customCssFiles,
- },
- }),
],
- ],
- scripts: [
- {
- src: "https://kit.fontawesome.com/3a9f2eb5b9.js",
+ markdown: {
+ mermaid: true,
},
- ],
-
- markdown: {
- mermaid: true,
- },
- themes: ['@docusaurus/theme-mermaid'],
+ themes: ['@docusaurus/theme-mermaid'],
- themeConfig:
- /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
- ({
- metadata: [{ name: 'google-site-verification', content: process.env.GOOGLE_SITE_VERIFICATION_ID || 'preview-local' }],
- docs: {
- sidebar: {
- hideable: true,
- autoCollapseCategories: true
- },
- },
- navbar: {
- title: '',
- logo: {
- alt: 'Cloud Posse Developer Hub',
- src: 'img/logo.svg',
- srcDark: 'img/logo-light.svg',
- },
- items: [
- {
- to: '/learn',
- position: 'left',
- label: 'Learn',
- },
- {
- to: '/reference',
- position: 'left',
- label: 'Reference',
- },
- {
- to: '/community',
- label: 'Community',
- position: 'left',
- },
- {
- type: 'search',
- position: 'right',
- },
- {
- href: 'https://github.com/cloudposse/',
- className: 'header-github-link',
- position: 'right',
+ themeConfig:
+ /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
+ ({
+ metadata: [{ name: 'google-site-verification', content: process.env.GOOGLE_SITE_VERIFICATION_ID || 'preview-local' }],
+ docs: {
+ sidebar: {
+ hideable: true,
+ autoCollapseCategories: true
},
- {
- to: 'https://cloudposse.com/',
- label: 'Get a Jumpstart',
- position: 'right',
- className: 'button button--primary navbar-cta-button'
+ },
+ navbar: {
+ title: '',
+ logo: {
+ alt: 'Cloud Posse Developer Hub',
+ src: 'img/logo.svg',
+ srcDark: 'img/logo-light.svg',
},
- ],
- },
-
- announcementBar: {
- id: 'new_docs',
- content:
- 'We are in the process of updating our documentation. Please let us know what you think!',
- backgroundColor: 'var(--announcement-bar-background)',
- textColor: 'var(--announcement-bar-text-color)',
- isCloseable: true,
- },
-
- colorMode: {
- // "light" | "dark"
- defaultMode: 'dark',
-
- // Hides the switch in the navbar
- // Useful if you want to force a specific mode
- disableSwitch: false,
-
- // Should respect the user's color scheme preference
- // "light" | "dark" | "system"
- respectPrefersColorScheme: false,
- },
-
- algolia: {
- appId: process.env.ALGOLIA_APP_ID || '32YOERUX83',
- apiKey: process.env.ALGOLIA_SEARCH_API_KEY || '557985309adf0e4df9dcf3cb29c61928', // this is SEARCH ONLY API key and is not sensitive information
- indexName: process.env.ALGOLIA_INDEX_NAME || 'docs.cloudposse.com',
- externalUrlRegex: 'atmos\\.tools',
- contextualSearch: false
- },
- footer: {
- style: 'dark',
- links: [{
- title: 'Docs',
items: [
{
+ to: '/learn',
+ position: 'left',
label: 'Learn',
- to: '/learn/',
},
{
+ to: '/reference',
+ position: 'left',
label: 'Reference',
- to: '/reference/',
- }
- ],
- }, {
- title: 'Community',
- items: [
- {
- label: 'GitHub Discussions',
- href: 'https://github.com/orgs/cloudposse/discussions',
- },
- {
- label: 'Slack Community',
- to: '/community/slack',
},
{
- label: 'Slack Archives',
- href: 'https://archive.sweetops.com/refarch/',
+ to: '/community',
+ label: 'Community',
+ position: 'left',
},
{
- label: 'Office Hours',
- to: '/community/office-hours/',
+ type: 'search',
+ position: 'right',
},
- ],
- }, {
- title: 'Contact Us',
- items: [
{
- label: 'Support',
- to: '/support',
- },
- {
- label: 'Our GitHub',
href: 'https://github.com/cloudposse/',
+ className: 'header-github-link',
+ position: 'right',
},
{
- label: 'Contact Us',
- to: '/community/contact-us/',
- }],
- }],
- logo: {
- alt: 'Cloud Posse',
- src: '/img/logo-light.svg',
- href: 'https://cloudposse.com/'
+ to: 'https://cloudposse.com/',
+ label: 'Get a Jumpstart',
+ position: 'right',
+ className: 'button button--primary navbar-cta-button'
+ },
+ ],
},
- copyright: `© ${new Date().getFullYear()} Cloud Posse, LLC`,
- },
- mermaid: {
- theme: {
- light: 'neutral',
- dark: 'dark',
+
+ announcementBar: {
+ id: 'new_docs',
+ content:
+ 'We are in the process of updating our documentation. Please let us know what you think!',
+ backgroundColor: 'var(--announcement-bar-background)',
+ textColor: 'var(--announcement-bar-text-color)',
+ isCloseable: true,
},
- options: {
- flowchart: {
- useMaxWidth: true,
- curve: 'linear',
- padding: 15,
- diagramPadding: 20,
- nodeSpacing: 40,
- rankSpacing: 50,
- ranksep: 100,
- nodesep: 100,
- titleTopMargin: 25,
- titlePadding: 30,
- labelPadding: 30,
- subGraphTitleMargin: {
- top: 5,
- bottom: 5
- }
+
+ colorMode: {
+ // "light" | "dark"
+ defaultMode: 'dark',
+
+ // Hides the switch in the navbar
+ // Useful if you want to force a specific mode
+ disableSwitch: false,
+
+ // Should respect the user's color scheme preference
+ // "light" | "dark" | "system"
+ respectPrefersColorScheme: false,
+ },
+
+ algolia: {
+ appId: process.env.ALGOLIA_APP_ID || '32YOERUX83',
+ apiKey: process.env.ALGOLIA_SEARCH_API_KEY || '557985309adf0e4df9dcf3cb29c61928', // this is SEARCH ONLY API key and is not sensitive information
+ indexName: process.env.ALGOLIA_INDEX_NAME || 'docs.cloudposse.com',
+ externalUrlRegex: 'atmos\\.tools',
+ contextualSearch: false
+ },
+ footer: {
+ style: 'dark',
+ links: [{
+ title: 'Docs',
+ items: [
+ {
+ label: 'Learn',
+ to: '/learn/',
+ },
+ {
+ label: 'Reference',
+ to: '/reference/',
+ }
+ ],
+ }, {
+ title: 'Community',
+ items: [
+ {
+ label: 'GitHub Discussions',
+ href: 'https://github.com/orgs/cloudposse/discussions',
+ },
+ {
+ label: 'Slack Community',
+ to: '/community/slack',
+ },
+ {
+ label: 'Slack Archives',
+ href: 'https://archive.sweetops.com/refarch/',
+ },
+ {
+ label: 'Office Hours',
+ to: '/community/office-hours/',
+ },
+ ],
+ }, {
+ title: 'Contact Us',
+ items: [
+ {
+ label: 'Support',
+ to: '/support',
+ },
+ {
+ label: 'Our GitHub',
+ href: 'https://github.com/cloudposse/',
+ },
+ {
+ label: 'Contact Us',
+ to: '/community/contact-us/',
+ }],
+ }],
+ logo: {
+ alt: 'Cloud Posse',
+ src: '/img/logo-light.svg',
+ href: 'https://cloudposse.com/'
+ },
+ copyright: `© ${new Date().getFullYear()} Cloud Posse, LLC`,
+ },
+ mermaid: {
+ theme: {
+ light: 'neutral',
+ dark: 'dark',
},
+ options: {
+ flowchart: {
+ useMaxWidth: true,
+ curve: 'linear',
+ padding: 15,
+ diagramPadding: 20,
+ nodeSpacing: 40,
+ rankSpacing: 50,
+ ranksep: 100,
+ nodesep: 100,
+ titleTopMargin: 25,
+ titlePadding: 30,
+ labelPadding: 30,
+ subGraphTitleMargin: {
+ top: 5,
+ bottom: 5
+ }
+ },
- themeVariables: {
- mainBkg: '#6f72723b',
- background: '#333',
- clusterBkg: '#6f72723b'
+ themeVariables: {
+ mainBkg: '#6f72723b',
+ background: '#333',
+ clusterBkg: '#6f72723b'
+ }
}
- }
- },
- prism: {
- theme: lightCodeTheme,
- darkTheme: darkCodeTheme,
- additionalLanguages: ['hcl', 'bash', 'rego'],
- },
- zoom: {
- selector: '.markdown > img',
- config: {
- // options you can specify via https://github.com/francoischalifour/medium-zoom#usage
- background: {
- light: 'rgb(255, 255, 255)',
- dark: 'rgb(50, 50, 50)'
+ },
+ prism: {
+ theme: lightCodeTheme,
+ darkTheme: darkCodeTheme,
+ additionalLanguages: ['hcl', 'bash', 'rego'],
+ },
+ zoom: {
+ selector: '.markdown > img',
+ config: {
+ // options you can specify via https://github.com/francoischalifour/medium-zoom#usage
+ background: {
+ light: 'rgb(255, 255, 255)',
+ dark: 'rgb(50, 50, 50)'
+ }
}
}
- }
- }),
-};
+ }),
+ };
+ return config;
+}
-module.exports = config;
+module.exports = createConfig();
diff --git a/plugins/dynamicRedirects/index.js b/plugins/dynamicRedirects/index.js
new file mode 100644
index 000000000..e70fb8ff2
--- /dev/null
+++ b/plugins/dynamicRedirects/index.js
@@ -0,0 +1,71 @@
+/*
+ * This plugin is not working yet!
+ * We have these redirects created with a static file in the staticRedirects plugin.
+ * We'll keep this file as reference for future improvements.
+ */
+
+async function loadRedirects(allContent) {
+ const redirects = [];
+
+ // Check if 'docusaurus-plugin-content-docs' is available and has the expected structure
+ const docsPlugin = allContent['docusaurus-plugin-content-docs'];
+
+ // Check that docsPlugin and its required properties exist
+ if (!docsPlugin || !docsPlugin.default || !docsPlugin.default.loadedVersions) {
+ console.error("Docs plugin content is not available or improperly structured. Skipping redirects generation.");
+ return redirects; // Return empty array if the docs content is not available
+ }
+
+ // Access the docs from the first loaded version
+ const docs = docsPlugin.default.loadedVersions[0]?.docs || [];
+
+ // Iterate over docs to create redirects based on refarch_id
+ docs.forEach((doc) => {
+ if (doc.frontMatter?.refarch_id) {
+ redirects.push(
+ {
+ from: `/reference-architecture/${doc.frontMatter.refarch_id}`,
+ to: doc.permalink,
+ },
+ {
+ from: `/${doc.frontMatter.refarch_id}`,
+ to: doc.permalink,
+ }
+ );
+ }
+ });
+
+ console.debug('Loaded redirects:', redirects);
+ return redirects;
+}
+
+function redirectsPlugin(context, options) {
+ return {
+ name: 'redirects-plugin',
+
+ // Since the loadContent lifecycle method is synchronous, let's adjust this
+ async loadContent() {
+ // Returning an empty object as loadContent does not receive allContent directly
+ return {};
+ },
+
+ async allContentLoaded({ actions, allContent }) {
+ const { setGlobalData } = actions;
+
+ // Load redirects using the custom loadRedirects function
+ const redirects = await loadRedirects(allContent);
+
+ // Set redirects in global data
+ setGlobalData({
+ redirects,
+ });
+
+ console.debug('Global data set with redirects.');
+ },
+ };
+}
+
+// Export the plugin
+module.exports = {
+ redirectsPlugin,
+};
diff --git a/plugins/staticRedirects/index.js b/plugins/staticRedirects/index.js
new file mode 100644
index 000000000..a24e4539b
--- /dev/null
+++ b/plugins/staticRedirects/index.js
@@ -0,0 +1,17 @@
+const fs = require('fs');
+const path = require('path');
+
+function getStaticRedirects() {
+ // Load redirects directly within this module
+ const docsRedirects = JSON.parse(fs.readFileSync(path.resolve(__dirname, 'redirects/docs.json'), 'utf-8'));
+ const legacyRedirects = JSON.parse(fs.readFileSync(path.resolve(__dirname, 'redirects/legacy_setup_docs.json'), 'utf-8'));
+ const refarchRedirects = JSON.parse(fs.readFileSync(path.resolve(__dirname, 'redirects/refarch.json'), 'utf-8'));
+
+ // Combine the loaded redirects into a single array
+ return [...docsRedirects, ...legacyRedirects, ...refarchRedirects];
+}
+
+// Export the plugin and helper functions
+module.exports = {
+ getStaticRedirects,
+};
diff --git a/plugins/staticRedirects/redirects/docs.json b/plugins/staticRedirects/redirects/docs.json
new file mode 100644
index 000000000..d8eb0ba62
--- /dev/null
+++ b/plugins/staticRedirects/redirects/docs.json
@@ -0,0 +1,6 @@
+[
+ {
+ "from": "/reference-architecture",
+ "to": "/learn"
+ }
+]
diff --git a/plugins/staticRedirects/redirects/legacy_setup_docs.json b/plugins/staticRedirects/redirects/legacy_setup_docs.json
new file mode 100644
index 000000000..1c1b63758
--- /dev/null
+++ b/plugins/staticRedirects/redirects/legacy_setup_docs.json
@@ -0,0 +1,98 @@
+[
+ {
+ "from": "/reference-architecture/design-decisions/foundational-release-engineering/decide-on-self-hosted-github-runner-strategy",
+ "to": "/layers/software-delivery/design-decisions/decide-on-self-hosted-github-runner-strategy"
+ },
+ {
+ "from": "/reference-architecture/fundamentals",
+ "to": "/learn/prerequisites"
+ },
+ {
+ "from": "/reference-architecture/fundamentals",
+ "to": "/learn/prerequisites"
+ },
+ {
+ "from": "/reference-architecture/fundamentals/ecs",
+ "to": "/layers/software-delivery/ecs-ecspresso"
+ },
+ {
+ "from": "/reference-architecture/fundamentals/gitops",
+ "to": "/layers/gitops"
+ },
+ {
+ "from": "/reference-architecture/how-to-guides/integrations/opsgenie",
+ "to": "/layers/alerting/opsgenie"
+ },
+ {
+ "from": "/reference-architecture/how-to-guides/integrations/opsgenie/how-to-create-new-teams-in-opsgenie",
+ "to": "/layers/alerting/opsgenie/how-to-create-new-teams-in-opsgenie"
+ },
+ {
+ "from": "/reference-architecture/how-to-guides/integrations/opsgenie/how-to-sign-up-for-opsgenie",
+ "to": "/layers/alerting/opsgenie/how-to-sign-up-for-opsgenie"
+ },
+ {
+ "from": "/reference-architecture/how-to-guides/integrations/spacelift",
+ "to": "/layers/spacelift"
+ },
+ {
+ "from": "/reference-architecture/how-to-guides/tutorials/how-to-setup-grafana",
+ "to": "/layers/monitoring/grafana"
+ },
+ {
+ "from": "/reference-architecture/quickstart/eks",
+ "to": "/layers/eks"
+ },
+ {
+ "from": "/reference-architecture/quickstart/iam-identity",
+ "to": "/layers/identity"
+ },
+ {
+ "from": "/reference-architecture/reference/adrs/jumpstart/decide-on-vanity-domain",
+ "to": "/layers/network/design-decisions/decide-on-vanity-branded-domain"
+ },
+ {
+ "from": "/reference-architecture/setup/cold-start",
+ "to": "/layers/accounts/deploy-accounts"
+ },
+ {
+ "from": "/reference-architecture/setup/cold-start",
+ "to": "/layers/accounts/deploy-accounts"
+ },
+ {
+ "from": "/reference-architecture/setup/cold-start/automated-configuration",
+ "to": "/layers/accounts/prepare-aws-organization"
+ },
+ {
+ "from": "/reference-architecture/setup/cold-start/how-to-create-superadmin-user",
+ "to": "/layers/accounts/tutorials/how-to-create-superadmin-user"
+ },
+ {
+ "from": "/reference-architecture/setup/cold-start/manual-configuration",
+ "to": "/layers/accounts/tutorials/manual-configuration"
+ },
+ {
+ "from": "/reference-architecture/setup/eks",
+ "to": "/learn/maintenance/upgrades/how-to-upgrade-eks"
+ },
+ {
+ "from": "/reference-architecture/setup/github-arc",
+ "to": "/layers/github-actions/eks-github-actions-controller"
+ },
+ {
+ "from": "/reference-architecture/setup/github-runners",
+ "to": "/layers/github-actions"
+ },
+ {
+ "from": "/reference-architecture/setup/identity",
+ "to": "/layers/identity"
+ },
+ {
+ "from": "/reference-architecture/setup/network",
+ "to": "/layers/network/connect-network"
+ },
+ {
+ "from": "/reference-architecture/setup/philips-labs-github-runners",
+ "to": "/layers/github-actions/philips-labs-github-runners"
+ }
+]
diff --git a/plugins/staticRedirects/redirects/refarch.json b/plugins/staticRedirects/redirects/refarch.json
new file mode 100644
index 000000000..5c4d78bb0
--- /dev/null
+++ b/plugins/staticRedirects/redirects/refarch.json
@@ -0,0 +1,210 @@
+[
+ {
+ "from": "/reference-architecture/REFARCH-34",
+ "to": "/layers/project/design-decisions/decide-on-1password-strategy"
+ },
+ {
+ "from": "/REFARCH-34",
+ "to": "/layers/project/design-decisions/decide-on-1password-strategy"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-46",
+ "to": "/layers/network/design-decisions/decide-on-service-discovery-domain"
+ },
+ {
+ "from": "/REFARCH-46",
+ "to": "/layers/network/design-decisions/decide-on-service-discovery-domain"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-49",
+ "to": "/layers/eks/design-decisions/decide-on-host-os-flavor-for-eks"
+ },
+ {
+ "from": "/REFARCH-49",
+ "to": "/layers/eks/design-decisions/decide-on-host-os-flavor-for-eks"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-50",
+ "to": "/layers/accounts/design-decisions/decide-on-mfa-solution-for-aws-root-accounts"
+ },
+ {
+ "from": "/REFARCH-50",
+ "to": "/layers/accounts/design-decisions/decide-on-mfa-solution-for-aws-root-accounts"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-51",
+ "to": "/layers/accounts/design-decisions/decide-on-email-address-format-for-aws-accounts"
+ },
+ {
+ "from": "/REFARCH-51",
+ "to": "/layers/accounts/design-decisions/decide-on-email-address-format-for-aws-accounts"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-52",
+ "to": "/layers/project/design-decisions/decide-on-infrastructure-repository-name"
+ },
+ {
+ "from": "/REFARCH-52",
+ "to": "/layers/project/design-decisions/decide-on-infrastructure-repository-name"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-53",
+ "to": "/layers/project/design-decisions/decide-on-namespace-abbreviation"
+ },
+ {
+ "from": "/REFARCH-53",
+ "to": "/layers/project/design-decisions/decide-on-namespace-abbreviation"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-54",
+ "to": "/layers/network/design-decisions/decide-on-vanity-branded-domain"
+ },
+ {
+ "from": "/REFARCH-54",
+ "to": "/layers/network/design-decisions/decide-on-vanity-branded-domain"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-55",
+ "to": "/layers/accounts/design-decisions/decide-on-aws-account-flavors-and-organizational-units"
+ },
+ {
+ "from": "/REFARCH-55",
+ "to": "/layers/accounts/design-decisions/decide-on-aws-account-flavors-and-organizational-units"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-56",
+ "to": "/layers/network/design-decisions/decide-on-primary-aws-region"
+ },
+ {
+ "from": "/REFARCH-56",
+ "to": "/layers/network/design-decisions/decide-on-primary-aws-region"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-79",
+ "to": "/resources/legacy/design-decisions/decide-on-transactional-email-smtp-provider-for-operational-email"
+ },
+ {
+ "from": "/REFARCH-79",
+ "to": "/resources/legacy/design-decisions/decide-on-transactional-email-smtp-provider-for-operational-email"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-80",
+ "to": "/layers/network/design-decisions/decide-vpc-peering-requirements-e-g-to-legacy-env"
+ },
+ {
+ "from": "/REFARCH-80",
+ "to": "/layers/network/design-decisions/decide-vpc-peering-requirements-e-g-to-legacy-env"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-81",
+ "to": "/layers/project/design-decisions/decide-on-secrets-management-strategy-for-terraform"
+ },
+ {
+ "from": "/REFARCH-81",
+ "to": "/layers/project/design-decisions/decide-on-secrets-management-strategy-for-terraform"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-91",
+ "to": "/layers/software-delivery/design-decisions/decide-how-to-distribute-docker-images"
+ },
+ {
+ "from": "/REFARCH-91",
+ "to": "/layers/software-delivery/design-decisions/decide-how-to-distribute-docker-images"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-111",
+ "to": "/layers/monitoring/design-decisions/decide-on-external-monitoring-solution"
+ },
+ {
+ "from": "/REFARCH-111",
+ "to": "/layers/monitoring/design-decisions/decide-on-external-monitoring-solution"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-112",
+ "to": "/layers/software-delivery/design-decisions/decide-on-maintenance-page-solution"
+ },
+ {
+ "from": "/REFARCH-112",
+ "to": "/layers/software-delivery/design-decisions/decide-on-maintenance-page-solution"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-144",
+ "to": "/layers/software-delivery/design-decisions/decide-on-database-seeding-strategy-for-ephemeral-preview-enviro"
+ },
+ {
+ "from": "/REFARCH-144",
+ "to": "/layers/software-delivery/design-decisions/decide-on-database-seeding-strategy-for-ephemeral-preview-enviro"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-202",
+ "to": "/layers/eks/design-decisions/decide-on-email-address-for-cert-manager-support-emails"
+ },
+ {
+ "from": "/REFARCH-202",
+ "to": "/layers/eks/design-decisions/decide-on-email-address-for-cert-manager-support-emails"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-207",
+ "to": "/layers/eks/design-decisions/decide-on-helm-chart-repository-strategy"
+ },
+ {
+ "from": "/REFARCH-207",
+ "to": "/layers/eks/design-decisions/decide-on-helm-chart-repository-strategy"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-208",
+ "to": "/layers/network/design-decisions/decide-on-hostname-scheme-for-service-discovery"
+ },
+ {
+ "from": "/REFARCH-208",
+ "to": "/layers/network/design-decisions/decide-on-hostname-scheme-for-service-discovery"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-209",
+ "to": "/layers/project/design-decisions/decide-on-regional-naming-scheme"
+ },
+ {
+ "from": "/REFARCH-209",
+ "to": "/layers/project/design-decisions/decide-on-regional-naming-scheme"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-210",
+ "to": "/layers/data/design-decisions/decide-whether-to-use-rds-iam-authentication"
+ },
+ {
+ "from": "/REFARCH-210",
+ "to": "/layers/data/design-decisions/decide-whether-to-use-rds-iam-authentication"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-211",
+ "to": "/layers/data/design-decisions/decide-on-rds-technology-and-architecture"
+ },
+ {
+ "from": "/REFARCH-211",
+ "to": "/layers/data/design-decisions/decide-on-rds-technology-and-architecture"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-217",
+ "to": "/layers/network/design-decisions/decide-on-aws-account-vpc-subnet-cidr-strategy"
+ },
+ {
+ "from": "/REFARCH-217",
+ "to": "/layers/network/design-decisions/decide-on-aws-account-vpc-subnet-cidr-strategy"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-236",
+ "to": "/layers/eks/design-decisions/decide-on-eks-node-pool-architecture"
+ },
+ {
+ "from": "/REFARCH-236",
+ "to": "/layers/eks/design-decisions/decide-on-eks-node-pool-architecture"
+ },
+ {
+ "from": "/reference-architecture/REFARCH-240",
+ "to": "/layers/network/design-decisions/decide-on-organization-supernet-cidr-ranges"
+ },
+ {
+ "from": "/REFARCH-240",
+ "to": "/layers/network/design-decisions/decide-on-organization-supernet-cidr-ranges"
+ }
+]