Skip to content

Commit

Permalink
refactor(experimental-ec2-pattern): Use the same duration when creati…
Browse files Browse the repository at this point in the history
…ng and updating ASG
  • Loading branch information
akash1810 committed Sep 13, 2024
1 parent 3c36ef1 commit dbd59af
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 20 deletions.
5 changes: 2 additions & 3 deletions src/experimental/patterns/__snapshots__/ec2-app.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -180,12 +180,10 @@ exports[`The GuEc2AppExperimental pattern matches the snapshot 1`] = `
"MaxBatchSize": 2,
"MinInstancesInService": 1,
"MinSuccessfulInstancesPercent": 100,
"PauseTime": "PT5M",
"SuspendProcesses": [],
"WaitOnResourceSignals": true,
},
"AutoScalingScheduledAction": {
"IgnoreUnmodifiedGroupSizeProperties": true,
},
},
},
"CertificateTestguec2app86EE2D42": {
Expand Down Expand Up @@ -814,6 +812,7 @@ exports[`The GuEc2AppExperimental pattern matches the snapshot 1`] = `
"InstanceType": "t4g.medium",
"MetadataOptions": {
"HttpTokens": "required",
"InstanceMetadataTags": "enabled",
},
"SecurityGroupIds": [
{
Expand Down
43 changes: 26 additions & 17 deletions src/experimental/patterns/ec2-app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,32 @@ export class GuEc2AppExperimental extends GuEc2App {
},
];

// TODO are these sensible values?
const signalTimeoutSeconds = Math.max(
targetGroup.healthCheck.timeout?.toSeconds() ?? 0,
cfnAutoScalingGroup.healthCheckGracePeriod ?? 0,
Duration.minutes(5).toSeconds(),
);

const currentRollingUpdate = cfnAutoScalingGroup.cfnOptions.updatePolicy?.autoScalingRollingUpdate;

cfnAutoScalingGroup.cfnOptions.updatePolicy = {
autoScalingRollingUpdate: {
...currentRollingUpdate,
pauseTime: Duration.seconds(signalTimeoutSeconds).toIsoString(),
},
};

cfnAutoScalingGroup.cfnOptions.creationPolicy = {
autoScalingCreationPolicy: {
minSuccessfulInstancesPercent: 100,
},
resourceSignal: {
count: minimumInstances,
timeout: Duration.seconds(signalTimeoutSeconds).toIsoString(),
},
};

new Policy(scope, "AsgReplacingUpdatePolicy", {
statements: [
// Allow usage of command `cfn-signal`.
Expand Down Expand Up @@ -134,22 +160,5 @@ export class GuEc2AppExperimental extends GuEc2App {
--exit-code $exitCode || echo 'Failed to send Cloudformation Signal'
`,
);

// TODO are these sensible values?
const signalTimeoutSeconds = Math.max(
targetGroup.healthCheck.timeout?.toSeconds() ?? 0,
cfnAutoScalingGroup.healthCheckGracePeriod ?? 0,
Duration.minutes(5).toSeconds(),
);

cfnAutoScalingGroup.cfnOptions.creationPolicy = {
autoScalingCreationPolicy: {
minSuccessfulInstancesPercent: 100,
},
resourceSignal: {
count: minimumInstances,
timeout: Duration.seconds(signalTimeoutSeconds).toIsoString(),
},
};
}
}

0 comments on commit dbd59af

Please sign in to comment.