From 72d5d65dfcd2425d65df6bd6f73650d83554721b Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Fri, 1 Sep 2023 11:19:30 +0100 Subject: [PATCH 01/23] feat: add front CODE stack --- dotcom-rendering/cdk/bin/cdk.ts | 9 +++++++++ dotcom-rendering/cdk/lib/dotcom-rendering.ts | 8 ++++++++ .../scripts/deploy/build-riffraff-bundle.mjs | 13 +++++++++++++ dotcom-rendering/scripts/deploy/riff-raff.yaml | 7 +++++++ 4 files changed, 37 insertions(+) diff --git a/dotcom-rendering/cdk/bin/cdk.ts b/dotcom-rendering/cdk/bin/cdk.ts index 8cc0f66cdde..c69db684da5 100644 --- a/dotcom-rendering/cdk/bin/cdk.ts +++ b/dotcom-rendering/cdk/bin/cdk.ts @@ -26,3 +26,12 @@ new DotcomRendering(app, 'DotcomRendering-CODE', { maxCapacity: 4, instanceType: 't4g.micro', }); + +new DotcomRendering(app, 'DotcomRendering-front-CODE', { + ...sharedProps, + app: 'render-front', + stage: 'CODE', + minCapacity: 1, + maxCapacity: 4, + instanceType: 't4g.micro', +}); diff --git a/dotcom-rendering/cdk/lib/dotcom-rendering.ts b/dotcom-rendering/cdk/lib/dotcom-rendering.ts index 66284ba4367..3efa1888f55 100644 --- a/dotcom-rendering/cdk/lib/dotcom-rendering.ts +++ b/dotcom-rendering/cdk/lib/dotcom-rendering.ts @@ -24,6 +24,7 @@ import { import { CfnAlarm } from 'aws-cdk-lib/aws-cloudwatch'; import { InstanceType, Peer } from 'aws-cdk-lib/aws-ec2'; import { LoadBalancingProtocol } from 'aws-cdk-lib/aws-elasticloadbalancing'; +import { StringParameter } from 'aws-cdk-lib/aws-ssm'; import type { DCRAlarmConfig, DCRProps } from './types'; import { getUserData } from './userData'; @@ -146,6 +147,13 @@ export class DotcomRendering extends GuStack { new CfnOutput(this, 'LoadBalancerUrl', { value: loadBalancer.loadBalancerDnsName, }); + + new StringParameter(this, 'ec2RoleArn', { + // Annoyingly this doesn't follow the same pattern as the other SSM parameters + parameterName: `/test/${stack}/${stage}/${app}.baseURL`, + stringValue: loadBalancer.loadBalancerDnsName, + }); + // ------------------------------------ // ------------------------------------ diff --git a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs index 20bd361f678..071a8801133 100755 --- a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs +++ b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs @@ -17,6 +17,8 @@ const target = path.resolve(dirname, '../..', 'target'); // ├── frontend-cfn // │ ├── DotcomRendering-CODE.template.json // │ ├── DotcomRendering-PROD.template.json +// ├── render-front +// │ ├── DotcomRendering-front-CODE.template.json // ├── frontend-static // │ ├── assets // │ │ └── ** @@ -41,6 +43,16 @@ const copyCfn = () => { ); }; +const copyRenderingFrontCfn = () => { + log(' - copying cloudformation config'); + return cpy( + [ + 'cdk.out/DotcomRendering-front-CODE.template.json', + ], + path.resolve(target, 'render-front'), + ); +}; + const copyStatic = () => { log(' - copying static'); return cpy( @@ -124,6 +136,7 @@ const createBuildConfig = () => { Promise.all([ copyCfn(), + copyRenderingFrontCfn(), copyMakefile(), copyStatic(), copyDist(), diff --git a/dotcom-rendering/scripts/deploy/riff-raff.yaml b/dotcom-rendering/scripts/deploy/riff-raff.yaml index 75848495adb..ffd329a75f1 100755 --- a/dotcom-rendering/scripts/deploy/riff-raff.yaml +++ b/dotcom-rendering/scripts/deploy/riff-raff.yaml @@ -12,6 +12,13 @@ deployments: PROD: DotcomRendering-PROD.template.json cloudFormationStackByTags: false cloudFormationStackName: rendering + render-front: + type: cloud-formation + parameters: + templateStagePaths: + CODE: DotcomRendering-front-CODE.template.json + cloudFormationStackByTags: false + cloudFormationStackName: render-front rendering: type: autoscaling parameters: From c1c3e179608de1368f9ff35debf28625d488b91c Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Fri, 1 Sep 2023 17:37:40 +0100 Subject: [PATCH 02/23] fix: change ELB dns name ssm parameter to something more useful and descriptive --- dotcom-rendering/cdk/lib/dotcom-rendering.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotcom-rendering/cdk/lib/dotcom-rendering.ts b/dotcom-rendering/cdk/lib/dotcom-rendering.ts index 3efa1888f55..58da7a7d9fe 100644 --- a/dotcom-rendering/cdk/lib/dotcom-rendering.ts +++ b/dotcom-rendering/cdk/lib/dotcom-rendering.ts @@ -150,7 +150,7 @@ export class DotcomRendering extends GuStack { new StringParameter(this, 'ec2RoleArn', { // Annoyingly this doesn't follow the same pattern as the other SSM parameters - parameterName: `/test/${stack}/${stage}/${app}.baseURL`, + parameterName: `/${stack}/${stage}/${app}.loadBalancerDnsName`, stringValue: loadBalancer.loadBalancerDnsName, }); From 5b7b247ac81738730a113e82da016ede0695bb77 Mon Sep 17 00:00:00 2001 From: Jamie B <53781962+JamieB-gu@users.noreply.github.com> Date: Tue, 5 Sep 2023 16:44:27 +0100 Subject: [PATCH 03/23] AMI parameter name is generated from app name --- dotcom-rendering/scripts/deploy/riff-raff.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dotcom-rendering/scripts/deploy/riff-raff.yaml b/dotcom-rendering/scripts/deploy/riff-raff.yaml index 121ff65469e..3ea14c4cb82 100755 --- a/dotcom-rendering/scripts/deploy/riff-raff.yaml +++ b/dotcom-rendering/scripts/deploy/riff-raff.yaml @@ -7,7 +7,6 @@ templates: cloudformation: type: cloud-formation parameters: - amiParameter: AMIRendering amiEncrypted: true amiTags: # Keep the Node version in sync with `.nvmrc` @@ -22,6 +21,7 @@ deployments: PROD: DotcomRendering-PROD.template.json cloudFormationStackByTags: false cloudFormationStackName: rendering + amiParameter: AMIRendering render-front: template: cloudformation parameters: @@ -29,6 +29,7 @@ deployments: CODE: DotcomRendering-front-CODE.template.json cloudFormationStackByTags: false cloudFormationStackName: render-front + amiParameter: AMIRenderfront rendering: type: autoscaling parameters: From de8d923ca4bf6e15f700c69e9a7a5eac472b7aba Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Wed, 20 Sep 2023 12:30:17 +0100 Subject: [PATCH 04/23] chore: update AWS stack platform --- .../dotcom-rendering.test.ts.snap | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap index 52014053c65..85b42c1f449 100644 --- a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap +++ b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap @@ -924,6 +924,25 @@ exports[`The DotcomRendering stack matches the snapshot 1`] = ` }, "Type": "AWS::EC2::SecurityGroup", }, + "ec2RoleArn8128314D": { + "Properties": { + "Name": "/frontend/TEST/rendering.loadBalancerDnsName", + "Tags": { + "Stack": "frontend", + "Stage": "TEST", + "gu:cdk:version": "TEST", + "gu:repo": "guardian/dotcom-rendering", + }, + "Type": "String", + "Value": { + "Fn::GetAtt": [ + "InternalLoadBalancer", + "DNSName", + ], + }, + }, + "Type": "AWS::SSM::Parameter", + }, "frontendTESTrenderingF3FD9600": { "Properties": { "LaunchTemplateData": { From 70db435f8853da806f94d4e577777bc8b6b7340b Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Fri, 29 Sep 2023 16:24:12 +0100 Subject: [PATCH 05/23] update riffraff bundle shape to desired shape --- .../scripts/deploy/build-riffraff-bundle.mjs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs index c72c605cbac..8d85010f591 100755 --- a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs +++ b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs @@ -16,9 +16,16 @@ const target = path.resolve(dirname, '../..', 'target'); // ├── riff-raff.yaml // ├── frontend-cfn // │ ├── DotcomRendering-CODE.template.json -// │ ├── DotcomRendering-PROD.template.json -// ├── render-front +// │ └── DotcomRendering-PROD.template.json +// ├── rendering +// | └── dist +// | └── rendering.zip +// ├── render-front-cfn // │ ├── DotcomRendering-front-CODE.template.json +// │ └── DotcomRendering-front-PROD.template.json +// ├── render-front +// | └── dist +// | └── render-front.zip // ├── frontend-static // │ ├── assets // │ │ └── ** @@ -28,9 +35,6 @@ const target = path.resolve(dirname, '../..', 'target'); // │ │ └── ** // │ │ └── * // │ └── etc -// └── rendering -// └── dist -// └── rendering.zip const copyCfn = () => { log(' - copying cloudformation config'); From 7e9434ed3b080f0c1c721760862f7fa92308fb34 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Fri, 29 Sep 2023 16:58:20 +0100 Subject: [PATCH 06/23] feat: add copyApp method to build-riff-raff-bundle --- .../scripts/deploy/build-riffraff-bundle.mjs | 191 ++++++++++-------- 1 file changed, 105 insertions(+), 86 deletions(-) diff --git a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs index 8d85010f591..bca87525302 100755 --- a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs +++ b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs @@ -14,100 +14,124 @@ const target = path.resolve(dirname, '../..', 'target'); // target // ├── build.json // ├── riff-raff.yaml -// ├── frontend-cfn -// │ ├── DotcomRendering-CODE.template.json -// │ └── DotcomRendering-PROD.template.json -// ├── rendering -// | └── dist -// | └── rendering.zip -// ├── render-front-cfn -// │ ├── DotcomRendering-front-CODE.template.json -// │ └── DotcomRendering-front-PROD.template.json -// ├── render-front -// | └── dist -// | └── render-front.zip -// ├── frontend-static -// │ ├── assets -// │ │ └── ** -// │ │ └── * -// │ └── static -// │ ├── frontend -// │ │ └── ** -// │ │ └── * -// │ └── etc - -const copyCfn = () => { - log(' - copying cloudformation config'); - return cpy( - [ - 'cdk.out/DotcomRendering-CODE.template.json', - 'cdk.out/DotcomRendering-PROD.template.json', - ], - path.resolve(target, 'frontend-cfn'), +// ├── ${copyFrontendStatic()} +// ├── ${copyApp('rendering')} +// └── ${copyApp('renderi-front')} + + + +/** + * This comprises of the CloudFormation files and app artifacts that + * are needed to run an app. + * + * It generates a folder like this: + * ├── ${appName}-cfn + * │ ├── DotcomRendering-${appName}-CODE.template.json + * │ └── DotcomRendering-${appName}-PROD.template.json + * └── ${appName} + * └── dist + * └── ${appName}.zip + * + * Except for the instance where appName === 'rendering' due to backwards compatibility + * + * @param appName {string} + **/ +const copyApp = (appName) => { + // This is a little hack to be backwards compatible with the naming for when this was a single stack app + const cfnTemplateName = appName === 'rendering' ? '' : `-${appName}`; + const cfnFolder = appName === 'rendering' ? 'frontend-cfn' : `${appName}-cfn`; + + log(` - copying stack ${appName}`); + const jobs = []; + + log(` - ${appName}: copying cloudformation config`); + jobs.push( + cpy( + [ + `cdk.out/DotcomRendering${cfnTemplateName}-CODE.template.json`, + `cdk.out/DotcomRendering${cfnTemplateName}-PROD.template.json`, + ], + path.resolve(target, cfnFolder), + ), ); -}; -const copyRenderingFrontCfn = () => { - log(' - copying cloudformation config'); - return cpy( - [ - 'cdk.out/DotcomRendering-front-CODE.template.json', - ], - path.resolve(target, 'render-front'), + log(` - ${appName}: copying makefile`); + jobs.push(cpy(['makefile'], path.resolve(target, appName))); + + log(` - ${appName}: copying server dist`); + jobs.push( + cpy( + path.resolve(dirname, '../../dist/**'), + path.resolve(target, appName, 'dist'), + { + nodir: true, + }, + ), + ); + + log(`' - ${appName}: copying scripts`); + jobs.push( + cpy( + path.resolve(dirname, '../../scripts/**'), + path.resolve(target, appName, 'scripts'), + { + nodir: true, + }, + ), ); + + return jobs; }; -const copyStatic = () => { +/** + * This method copies the static files over the frontend-static folder, which is then deployed to S3. + * + * It generates a folder like this: + * ├── frontend-static + * ├── assets + * │ └── ** + * │ └── * + * └── static + * ├── frontend + * │ └── ** + * │ └── * + * └── etc + */ +const copyFrontendStatic = () => { + const jobs = []; + log(' - copying static'); - return cpy( - path.resolve(dirname, '../../src/static/**'), - path.resolve(target, 'frontend-static', 'static', 'frontend'), - { - nodir: true, - }, + jobs.push( + cpy( + path.resolve(dirname, '../../src/static/**'), + path.resolve(target, 'frontend-static', 'static', 'frontend'), + { + nodir: true, + }, + ), ); -}; -const copyDist = () => { - log(' - copying dist'); + const source = path.resolve(dirname, '../../dist'); const dest = path.resolve(target, 'frontend-static', 'assets'); - return Promise.all([ + + log(' - copying dist => assets'); + jobs.push( cpy(path.resolve(source, '**/*.!(html|json)'), dest, { nodir: true, }), + ); + + log(' - copying stats => assets'); + jobs.push( cpy(path.resolve(source, 'stats'), path.resolve(dest, 'stats'), { nodir: true, }), - ]); -}; - -const copyScripts = () => { - log(' - copying scripts'); - return cpy( - path.resolve(dirname, '../../scripts/**'), - path.resolve(target, 'rendering', 'scripts'), - { - nodir: true, - }, ); -}; -const copyDistServer = () => { - log(' - copying server dist'); - return cpy( - path.resolve(dirname, '../../dist/**'), - path.resolve(target, 'rendering', 'dist'), - { - nodir: true, - }, - ); + return jobs; }; -const copyMakefile = () => { - log(' - copying makefile'); - return cpy(['makefile'], path.resolve(target, 'rendering')); -}; const copyRiffRaff = () => { log(' - copying riffraff yaml'); @@ -115,16 +139,11 @@ const copyRiffRaff = () => { }; Promise.all([ - copyCfn(), - copyRenderingFrontCfn(), - copyMakefile(), - copyStatic(), - copyDist(), - copyDistServer(), - copyScripts(), + ...copyApp('rendering'), + ...copyApp('render-front'), + ...copyFrontendStatic(), copyRiffRaff(), -]) - .catch((err) => { - warn(err.stack); - process.exit(1); - }); +]).catch((err) => { + warn(err.stack); + process.exit(1); +}); From 64f2adcea1359e0cfb39f6186fe6eb196fff59c2 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Fri, 29 Sep 2023 17:00:23 +0100 Subject: [PATCH 07/23] feat: add autoscaling task for render-front to riff-raff.yml --- dotcom-rendering/scripts/deploy/riff-raff.yaml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dotcom-rendering/scripts/deploy/riff-raff.yaml b/dotcom-rendering/scripts/deploy/riff-raff.yaml index 3ea14c4cb82..7e3e06ee088 100755 --- a/dotcom-rendering/scripts/deploy/riff-raff.yaml +++ b/dotcom-rendering/scripts/deploy/riff-raff.yaml @@ -22,7 +22,14 @@ deployments: cloudFormationStackByTags: false cloudFormationStackName: rendering amiParameter: AMIRendering - render-front: + rendering: + type: autoscaling + parameters: + bucketSsmKey: /account/services/dotcom-artifact.bucket + dependencies: + - frontend-static + - frontend-cfn + render-front-cfn: template: cloudformation parameters: templateStagePaths: @@ -30,7 +37,7 @@ deployments: cloudFormationStackByTags: false cloudFormationStackName: render-front amiParameter: AMIRenderfront - rendering: + render-front: type: autoscaling parameters: bucketSsmKey: /account/services/dotcom-artifact.bucket From 52fe648658e42ac2dca43ba40728812f235576c3 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 10:05:30 +0100 Subject: [PATCH 08/23] add PROD cfn template --- dotcom-rendering/scripts/deploy/riff-raff.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/dotcom-rendering/scripts/deploy/riff-raff.yaml b/dotcom-rendering/scripts/deploy/riff-raff.yaml index 7e3e06ee088..fa5f5d2306f 100755 --- a/dotcom-rendering/scripts/deploy/riff-raff.yaml +++ b/dotcom-rendering/scripts/deploy/riff-raff.yaml @@ -34,6 +34,7 @@ deployments: parameters: templateStagePaths: CODE: DotcomRendering-front-CODE.template.json + PROD: DotcomRendering-front-PROD.template.json cloudFormationStackByTags: false cloudFormationStackName: render-front amiParameter: AMIRenderfront From 0bf81854120b34fbed97a3dc9e56004ed8ca849d Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 10:14:37 +0100 Subject: [PATCH 09/23] fix: rename render-front CFN name front => render-front --- dotcom-rendering/scripts/deploy/riff-raff.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dotcom-rendering/scripts/deploy/riff-raff.yaml b/dotcom-rendering/scripts/deploy/riff-raff.yaml index fa5f5d2306f..3b4a364a353 100755 --- a/dotcom-rendering/scripts/deploy/riff-raff.yaml +++ b/dotcom-rendering/scripts/deploy/riff-raff.yaml @@ -33,8 +33,8 @@ deployments: template: cloudformation parameters: templateStagePaths: - CODE: DotcomRendering-front-CODE.template.json - PROD: DotcomRendering-front-PROD.template.json + CODE: DotcomRendering-render-front-CODE.template.json + PROD: DotcomRendering-render-front-PROD.template.json cloudFormationStackByTags: false cloudFormationStackName: render-front amiParameter: AMIRenderfront From a9231ddef96d139c0a5e0219756125e419ebe768 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 10:15:52 +0100 Subject: [PATCH 10/23] fix: call an app and app not stack --- dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs index bca87525302..f2de4a14bdc 100755 --- a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs +++ b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs @@ -41,7 +41,7 @@ const copyApp = (appName) => { const cfnTemplateName = appName === 'rendering' ? '' : `-${appName}`; const cfnFolder = appName === 'rendering' ? 'frontend-cfn' : `${appName}-cfn`; - log(` - copying stack ${appName}`); + log(` - copying app: ${appName}`); const jobs = []; log(` - ${appName}: copying cloudformation config`); From 10100820fcac3ed87302f5d1c4684da92e98d992 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 10:21:21 +0100 Subject: [PATCH 11/23] chore: use const over jobs.push --- .../scripts/deploy/build-riffraff-bundle.mjs | 111 ++++++++---------- 1 file changed, 51 insertions(+), 60 deletions(-) diff --git a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs index f2de4a14bdc..deed3d19938 100755 --- a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs +++ b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs @@ -8,21 +8,20 @@ import { log, warn } from '../env/log.js'; const dirname = url.fileURLToPath(new URL('.', import.meta.url)); const target = path.resolve(dirname, '../..', 'target'); -// This task generates the riff-raff bundle. It creates the following -// directory layout under target/ -// -// target -// ├── build.json -// ├── riff-raff.yaml -// ├── ${copyFrontendStatic()} -// ├── ${copyApp('rendering')} -// └── ${copyApp('renderi-front')} - - +/** This task generates the riff-raff bundle. It creates the following + * directory layout under target/ + * target + * ├── build.json + * ├── riff-raff.yaml + * ├── ${copyFrontendStatic()} + * ├── ${copyApp('rendering')} + * └── ${copyApp('renderi-front')} + */ /** - * This comprises of the CloudFormation files and app artifacts that - * are needed to run an app. + * This method creates a bundle needed to run an app including: + * - CloudFormation files + * - .zip artefact comprised of the JS app * * It generates a folder like this: * ├── ${appName}-cfn @@ -39,48 +38,42 @@ const target = path.resolve(dirname, '../..', 'target'); const copyApp = (appName) => { // This is a little hack to be backwards compatible with the naming for when this was a single stack app const cfnTemplateName = appName === 'rendering' ? '' : `-${appName}`; - const cfnFolder = appName === 'rendering' ? 'frontend-cfn' : `${appName}-cfn`; + const cfnFolder = + appName === 'rendering' ? 'frontend-cfn' : `${appName}-cfn`; log(` - copying app: ${appName}`); - const jobs = []; log(` - ${appName}: copying cloudformation config`); - jobs.push( - cpy( - [ - `cdk.out/DotcomRendering${cfnTemplateName}-CODE.template.json`, - `cdk.out/DotcomRendering${cfnTemplateName}-PROD.template.json`, - ], - path.resolve(target, cfnFolder), - ), + const cfnJob = cpy( + [ + `cdk.out/DotcomRendering${cfnTemplateName}-CODE.template.json`, + `cdk.out/DotcomRendering${cfnTemplateName}-PROD.template.json`, + ], + path.resolve(target, cfnFolder), ); log(` - ${appName}: copying makefile`); - jobs.push(cpy(['makefile'], path.resolve(target, appName))); + const makefileJob = cpy(['makefile'], path.resolve(target, appName)); log(` - ${appName}: copying server dist`); - jobs.push( - cpy( - path.resolve(dirname, '../../dist/**'), - path.resolve(target, appName, 'dist'), - { - nodir: true, - }, - ), + const serverDistJob = cpy( + path.resolve(dirname, '../../dist/**'), + path.resolve(target, appName, 'dist'), + { + nodir: true, + }, ); log(`' - ${appName}: copying scripts`); - jobs.push( - cpy( - path.resolve(dirname, '../../scripts/**'), - path.resolve(target, appName, 'scripts'), - { - nodir: true, - }, - ), + const scriptsJob = cpy( + path.resolve(dirname, '../../scripts/**'), + path.resolve(target, appName, 'scripts'), + { + nodir: true, + }, ); - return jobs; + return [cfnJob, makefileJob, serverDistJob, scriptsJob]; }; /** @@ -98,41 +91,39 @@ const copyApp = (appName) => { * └── etc */ const copyFrontendStatic = () => { - const jobs = []; - log(' - copying static'); - jobs.push( - cpy( - path.resolve(dirname, '../../src/static/**'), - path.resolve(target, 'frontend-static', 'static', 'frontend'), - { - nodir: true, - }, - ), + const staticJob = cpy( + path.resolve(dirname, '../../src/static/**'), + path.resolve(target, 'frontend-static', 'static', 'frontend'), + { + nodir: true, + }, ); - const source = path.resolve(dirname, '../../dist'); const dest = path.resolve(target, 'frontend-static', 'assets'); log(' - copying dist => assets'); - jobs.push( - cpy(path.resolve(source, '**/*.!(html|json)'), dest, { + const distToAssetsJob = cpy( + path.resolve(source, '**/*.!(html|json)'), + dest, + { nodir: true, - }), + }, ); log(' - copying stats => assets'); - jobs.push( - cpy(path.resolve(source, 'stats'), path.resolve(dest, 'stats'), { + const statsToAssetsJob = cpy( + path.resolve(source, 'stats'), + path.resolve(dest, 'stats'), + { nodir: true, - }), + }, ); - return jobs; + return [staticJob, distToAssetsJob, statsToAssetsJob]; }; - const copyRiffRaff = () => { log(' - copying riffraff yaml'); return cpy(['riff-raff.yaml'], target, { cwd: dirname }); From 148bc660fd32f8bd51046147c4489afd3c0541fd Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 10:39:27 +0100 Subject: [PATCH 12/23] fix: change render-front id in cdk --- dotcom-rendering/cdk/bin/cdk.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotcom-rendering/cdk/bin/cdk.ts b/dotcom-rendering/cdk/bin/cdk.ts index 069c882a771..ff7bf70a292 100644 --- a/dotcom-rendering/cdk/bin/cdk.ts +++ b/dotcom-rendering/cdk/bin/cdk.ts @@ -26,7 +26,7 @@ new DotcomRendering(app, 'DotcomRendering-CODE', { instanceType: 't4g.micro', }); -new DotcomRendering(app, 'DotcomRendering-front-CODE', { +new DotcomRendering(app, 'DotcomRendering-render-front-CODE', { ...sharedProps, app: 'render-front', stage: 'CODE', From 42580b9e55fed69994c8af5a43d5b30509990067 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 10:40:21 +0100 Subject: [PATCH 13/23] feat: add PROD render-front stack --- dotcom-rendering/cdk/bin/cdk.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dotcom-rendering/cdk/bin/cdk.ts b/dotcom-rendering/cdk/bin/cdk.ts index ff7bf70a292..bb3dbe96329 100644 --- a/dotcom-rendering/cdk/bin/cdk.ts +++ b/dotcom-rendering/cdk/bin/cdk.ts @@ -34,3 +34,13 @@ new DotcomRendering(app, 'DotcomRendering-render-front-CODE', { maxCapacity: 4, instanceType: 't4g.micro', }); + +new DotcomRendering(app, 'DotcomRendering-render-front-PROD', { + ...sharedProps, + app: 'render-front', + stage: 'PROD', + // TODO: up this once we have code working + minCapacity: 1, + maxCapacity: 4, + instanceType: 't4g.micro', +}); From 5ccdfc4ec6d50d9c64edfae91ed02279bff7f6a9 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 11:02:53 +0100 Subject: [PATCH 14/23] fix: spaces not tabs --- .../dotcom-rendering.test.ts.snap | 38 +++++++++---------- dotcom-rendering/cdk/lib/dotcom-rendering.ts | 2 +- .../scripts/deploy/riff-raff.yaml | 2 +- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap index 98bef6fc574..00a50ef13e8 100644 --- a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap +++ b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap @@ -924,25 +924,6 @@ exports[`The DotcomRendering stack matches the snapshot 1`] = ` }, "Type": "AWS::EC2::SecurityGroup", }, - "ec2RoleArn8128314D": { - "Properties": { - "Name": "/frontend/TEST/rendering.loadBalancerDnsName", - "Tags": { - "Stack": "frontend", - "Stage": "TEST", - "gu:cdk:version": "TEST", - "gu:repo": "guardian/dotcom-rendering", - }, - "Type": "String", - "Value": { - "Fn::GetAtt": [ - "InternalLoadBalancer", - "DNSName", - ], - }, - }, - "Type": "AWS::SSM::Parameter", - }, "frontendTESTrenderingF3FD9600": { "Properties": { "LaunchTemplateData": { @@ -1100,6 +1081,25 @@ sudo NODE_ENV=$NODE_ENV GU_STAGE=$GU_STAGE -u dotcom-rendering -g frontend make }, "Type": "AWS::IAM::InstanceProfile", }, + "loadBalancerDnsNameturnedoff45D85D9D": { + "Properties": { + "Name": "/frontend/TEST/rendering.loadBalancerDnsName", + "Tags": { + "Stack": "frontend", + "Stage": "TEST", + "gu:cdk:version": "TEST", + "gu:repo": "guardian/dotcom-rendering", + }, + "Type": "String", + "Value": { + "Fn::GetAtt": [ + "InternalLoadBalancer", + "DNSName", + ], + }, + }, + "Type": "AWS::SSM::Parameter", + }, }, } `; diff --git a/dotcom-rendering/cdk/lib/dotcom-rendering.ts b/dotcom-rendering/cdk/lib/dotcom-rendering.ts index 2815b4ce86b..32ec14b9acc 100644 --- a/dotcom-rendering/cdk/lib/dotcom-rendering.ts +++ b/dotcom-rendering/cdk/lib/dotcom-rendering.ts @@ -147,7 +147,7 @@ export class DotcomRendering extends GuStack { value: loadBalancer.loadBalancerDnsName, }); - new StringParameter(this, 'ec2RoleArn', { + new StringParameter(this, 'loadBalancerDnsNameturned off', { // Annoyingly this doesn't follow the same pattern as the other SSM parameters parameterName: `/${stack}/${stage}/${app}.loadBalancerDnsName`, stringValue: loadBalancer.loadBalancerDnsName, diff --git a/dotcom-rendering/scripts/deploy/riff-raff.yaml b/dotcom-rendering/scripts/deploy/riff-raff.yaml index 3b4a364a353..70f4cde5976 100755 --- a/dotcom-rendering/scripts/deploy/riff-raff.yaml +++ b/dotcom-rendering/scripts/deploy/riff-raff.yaml @@ -34,7 +34,7 @@ deployments: parameters: templateStagePaths: CODE: DotcomRendering-render-front-CODE.template.json - PROD: DotcomRendering-render-front-PROD.template.json + PROD: DotcomRendering-render-front-PROD.template.json cloudFormationStackByTags: false cloudFormationStackName: render-front amiParameter: AMIRenderfront From dcfaae3e65bac821877478d5ac4f6ccd3bed95f9 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 11:40:07 +0100 Subject: [PATCH 15/23] fix: fix parameter store ID for load balancer DNS name --- .../cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap | 2 +- dotcom-rendering/cdk/lib/dotcom-rendering.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap index 00a50ef13e8..579bcbfdadb 100644 --- a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap +++ b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap @@ -1081,7 +1081,7 @@ sudo NODE_ENV=$NODE_ENV GU_STAGE=$GU_STAGE -u dotcom-rendering -g frontend make }, "Type": "AWS::IAM::InstanceProfile", }, - "loadBalancerDnsNameturnedoff45D85D9D": { + "loadBalancerDnsName0B1DEBAD": { "Properties": { "Name": "/frontend/TEST/rendering.loadBalancerDnsName", "Tags": { diff --git a/dotcom-rendering/cdk/lib/dotcom-rendering.ts b/dotcom-rendering/cdk/lib/dotcom-rendering.ts index 32ec14b9acc..a58156eaa27 100644 --- a/dotcom-rendering/cdk/lib/dotcom-rendering.ts +++ b/dotcom-rendering/cdk/lib/dotcom-rendering.ts @@ -147,7 +147,7 @@ export class DotcomRendering extends GuStack { value: loadBalancer.loadBalancerDnsName, }); - new StringParameter(this, 'loadBalancerDnsNameturned off', { + new StringParameter(this, 'loadBalancerDnsName', { // Annoyingly this doesn't follow the same pattern as the other SSM parameters parameterName: `/${stack}/${stage}/${app}.loadBalancerDnsName`, stringValue: loadBalancer.loadBalancerDnsName, From 109dddc42561ee9be35c0fc2647ab87d2a7cbfca Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 13:26:02 +0100 Subject: [PATCH 16/23] fix: make app more explicit for rendering app --- dotcom-rendering/cdk/bin/cdk.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dotcom-rendering/cdk/bin/cdk.ts b/dotcom-rendering/cdk/bin/cdk.ts index bb3dbe96329..c1a00e2968f 100644 --- a/dotcom-rendering/cdk/bin/cdk.ts +++ b/dotcom-rendering/cdk/bin/cdk.ts @@ -5,13 +5,13 @@ import { DotcomRendering } from '../lib/dotcom-rendering'; const app = new App(); const sharedProps = { - app: 'rendering', stack: 'frontend', region: 'eu-west-1', }; new DotcomRendering(app, 'DotcomRendering-PROD', { ...sharedProps, + app: 'rendering', stage: 'PROD', minCapacity: 30, maxCapacity: 120, @@ -20,6 +20,7 @@ new DotcomRendering(app, 'DotcomRendering-PROD', { new DotcomRendering(app, 'DotcomRendering-CODE', { ...sharedProps, + app: 'rendering', stage: 'CODE', minCapacity: 1, maxCapacity: 4, From bfc8d7cdaff53f1fdcb74a1de0523e3a97a8e5a0 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 14:34:59 +0100 Subject: [PATCH 17/23] fix: rename render-front => front-web --- dotcom-rendering/cdk/bin/cdk.ts | 8 ++++---- dotcom-rendering/cdk/lib/dotcom-rendering.ts | 6 +++++- .../scripts/deploy/build-riffraff-bundle.mjs | 4 ++-- dotcom-rendering/scripts/deploy/riff-raff.yaml | 10 +++++----- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/dotcom-rendering/cdk/bin/cdk.ts b/dotcom-rendering/cdk/bin/cdk.ts index c1a00e2968f..f009c38a29c 100644 --- a/dotcom-rendering/cdk/bin/cdk.ts +++ b/dotcom-rendering/cdk/bin/cdk.ts @@ -27,18 +27,18 @@ new DotcomRendering(app, 'DotcomRendering-CODE', { instanceType: 't4g.micro', }); -new DotcomRendering(app, 'DotcomRendering-render-front-CODE', { +new DotcomRendering(app, 'DotcomRendering-front-web-CODE', { ...sharedProps, - app: 'render-front', + app: 'front-web', stage: 'CODE', minCapacity: 1, maxCapacity: 4, instanceType: 't4g.micro', }); -new DotcomRendering(app, 'DotcomRendering-render-front-PROD', { +new DotcomRendering(app, 'DotcomRendering-front-web-PROD', { ...sharedProps, - app: 'render-front', + app: 'front-web', stage: 'PROD', // TODO: up this once we have code working minCapacity: 1, diff --git a/dotcom-rendering/cdk/lib/dotcom-rendering.ts b/dotcom-rendering/cdk/lib/dotcom-rendering.ts index a58156eaa27..d2f439b9d70 100644 --- a/dotcom-rendering/cdk/lib/dotcom-rendering.ts +++ b/dotcom-rendering/cdk/lib/dotcom-rendering.ts @@ -89,7 +89,11 @@ export class DotcomRendering extends GuStack { /** * TODO - migrate this ELB (classic load balancer) to an ALB (application load balancer) * @see https://github.com/guardian/cdk/blob/512536bd590b26d9fcac5d39329e8217103d7859/src/constructs/loadbalancing/elb.ts#L24-L46 + * + * GOTCHA: The load balancer name appends `-ELB` when the `app = "rendering"` for backwards compatibility + * We removed this to avoid the `LoadBalancerName.length > 32`. This will be fixable once we migrate to ALBs. */ + const loadBalancerName = app === 'rendering' ? `${stack}-${stage}-${app}` : `${stack}-${stage}-${app}-ELB`; const loadBalancer = new GuClassicLoadBalancer( this, 'InternalLoadBalancer', @@ -130,7 +134,7 @@ export class DotcomRendering extends GuStack { ], subnetSelection: { subnets: publicSubnets }, propertiesToOverride: { - LoadBalancerName: `${stack}-${stage}-${app}-ELB`, + LoadBalancerName: loadBalancerName, // Note: this does not prevent the GuClassicLoadBalancer // from creating a default security group, though it does // override which one is used/associated with the load balancer diff --git a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs index deed3d19938..8747cd80279 100755 --- a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs +++ b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs @@ -36,7 +36,7 @@ const target = path.resolve(dirname, '../..', 'target'); * @param appName {string} **/ const copyApp = (appName) => { - // This is a little hack to be backwards compatible with the naming for when this was a single stack app + // GOTCHA: This is a little hack to be backwards compatible with the naming for when this was a single stack app const cfnTemplateName = appName === 'rendering' ? '' : `-${appName}`; const cfnFolder = appName === 'rendering' ? 'frontend-cfn' : `${appName}-cfn`; @@ -131,7 +131,7 @@ const copyRiffRaff = () => { Promise.all([ ...copyApp('rendering'), - ...copyApp('render-front'), + ...copyApp('front-web'), ...copyFrontendStatic(), copyRiffRaff(), ]).catch((err) => { diff --git a/dotcom-rendering/scripts/deploy/riff-raff.yaml b/dotcom-rendering/scripts/deploy/riff-raff.yaml index 70f4cde5976..32319b23a19 100755 --- a/dotcom-rendering/scripts/deploy/riff-raff.yaml +++ b/dotcom-rendering/scripts/deploy/riff-raff.yaml @@ -29,16 +29,16 @@ deployments: dependencies: - frontend-static - frontend-cfn - render-front-cfn: + front-web-cfn: template: cloudformation parameters: templateStagePaths: - CODE: DotcomRendering-render-front-CODE.template.json - PROD: DotcomRendering-render-front-PROD.template.json + CODE: DotcomRendering-front-web-CODE.template.json + PROD: DotcomRendering-front-web-PROD.template.json cloudFormationStackByTags: false - cloudFormationStackName: render-front + cloudFormationStackName: front-web amiParameter: AMIRenderfront - render-front: + front-web: type: autoscaling parameters: bucketSsmKey: /account/services/dotcom-artifact.bucket From 6ff96a5859fbddd309c8adb147c106b77f54561e Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 14:39:13 +0100 Subject: [PATCH 18/23] fix: change order of when to append `ELB` to load balancer --- .../cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap | 2 +- dotcom-rendering/cdk/lib/dotcom-rendering.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap index 579bcbfdadb..634fa0dc6d3 100644 --- a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap +++ b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap @@ -621,7 +621,7 @@ exports[`The DotcomRendering stack matches the snapshot 1`] = ` "Protocol": "http", }, ], - "LoadBalancerName": "frontend-TEST-rendering-ELB", + "LoadBalancerName": "frontend-TEST-rendering", "Scheme": "internal", "SecurityGroups": [ { diff --git a/dotcom-rendering/cdk/lib/dotcom-rendering.ts b/dotcom-rendering/cdk/lib/dotcom-rendering.ts index d2f439b9d70..d599475e4b2 100644 --- a/dotcom-rendering/cdk/lib/dotcom-rendering.ts +++ b/dotcom-rendering/cdk/lib/dotcom-rendering.ts @@ -93,7 +93,7 @@ export class DotcomRendering extends GuStack { * GOTCHA: The load balancer name appends `-ELB` when the `app = "rendering"` for backwards compatibility * We removed this to avoid the `LoadBalancerName.length > 32`. This will be fixable once we migrate to ALBs. */ - const loadBalancerName = app === 'rendering' ? `${stack}-${stage}-${app}` : `${stack}-${stage}-${app}-ELB`; + const loadBalancerName = app === 'rendering' ? `${stack}-${stage}-${app}-ELB` : `${stack}-${stage}-${app}`; const loadBalancer = new GuClassicLoadBalancer( this, 'InternalLoadBalancer', From 3ed3c0d0e72e67eb0aec2766eb3eccdf6c8b537e Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 3 Oct 2023 17:14:45 +0100 Subject: [PATCH 19/23] chore: rerun snapshot for cdk --- .../cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap index 634fa0dc6d3..579bcbfdadb 100644 --- a/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap +++ b/dotcom-rendering/cdk/lib/__snapshots__/dotcom-rendering.test.ts.snap @@ -621,7 +621,7 @@ exports[`The DotcomRendering stack matches the snapshot 1`] = ` "Protocol": "http", }, ], - "LoadBalancerName": "frontend-TEST-rendering", + "LoadBalancerName": "frontend-TEST-rendering-ELB", "Scheme": "internal", "SecurityGroups": [ { From 13d39300877f76bfeacae3598c75e92881acc898 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Fri, 6 Oct 2023 09:46:05 +0100 Subject: [PATCH 20/23] fix: add `-` to cfnFolder --- dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs index 8747cd80279..748c10f97f7 100755 --- a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs +++ b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs @@ -39,7 +39,7 @@ const copyApp = (appName) => { // GOTCHA: This is a little hack to be backwards compatible with the naming for when this was a single stack app const cfnTemplateName = appName === 'rendering' ? '' : `-${appName}`; const cfnFolder = - appName === 'rendering' ? 'frontend-cfn' : `${appName}-cfn`; + appName === 'rendering' ? 'frontend-cfn' : `-${appName}-cfn`; log(` - copying app: ${appName}`); From 08f03651151c0b0321263715d071350eea3972d6 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Fri, 6 Oct 2023 10:00:21 +0100 Subject: [PATCH 21/23] add front-web to publish action --- .github/workflows/publish.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9695104c347..8c396266a26 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -51,6 +51,10 @@ jobs: - frontend-cfn rendering: - rendering + front-web-cfn: + - front-web-cfn + front-web: + - front-web frontend-static: - frontend-static From e29b77e4133f95b8caf42135d2ef8e83da589dba Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 10 Oct 2023 12:42:04 +0100 Subject: [PATCH 22/23] remove - from cfn folder name --- dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs index 748c10f97f7..8747cd80279 100755 --- a/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs +++ b/dotcom-rendering/scripts/deploy/build-riffraff-bundle.mjs @@ -39,7 +39,7 @@ const copyApp = (appName) => { // GOTCHA: This is a little hack to be backwards compatible with the naming for when this was a single stack app const cfnTemplateName = appName === 'rendering' ? '' : `-${appName}`; const cfnFolder = - appName === 'rendering' ? 'frontend-cfn' : `-${appName}-cfn`; + appName === 'rendering' ? 'frontend-cfn' : `${appName}-cfn`; log(` - copying app: ${appName}`); From 0751562d54770b3806b5d06c68bfea70994136d2 Mon Sep 17 00:00:00 2001 From: James Gorrie Date: Tue, 10 Oct 2023 17:22:56 +0100 Subject: [PATCH 23/23] AMIRenderfront => AMIFrontweb --- dotcom-rendering/scripts/deploy/riff-raff.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotcom-rendering/scripts/deploy/riff-raff.yaml b/dotcom-rendering/scripts/deploy/riff-raff.yaml index 32319b23a19..861dee284fa 100755 --- a/dotcom-rendering/scripts/deploy/riff-raff.yaml +++ b/dotcom-rendering/scripts/deploy/riff-raff.yaml @@ -37,7 +37,7 @@ deployments: PROD: DotcomRendering-front-web-PROD.template.json cloudFormationStackByTags: false cloudFormationStackName: front-web - amiParameter: AMIRenderfront + amiParameter: AMIFrontweb front-web: type: autoscaling parameters: