Skip to content

Commit

Permalink
Merge branch 'main' into apikey-override
Browse files Browse the repository at this point in the history
  • Loading branch information
mergify[bot] authored Jun 5, 2023
2 parents dd93658 + 437345e commit 09968a0
Show file tree
Hide file tree
Showing 17 changed files with 1,750 additions and 91 deletions.
14 changes: 14 additions & 0 deletions packages/@aws-cdk/aws-cloud9-alpha/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,17 @@ new cloud9.Ec2Environment(this, 'C9Env', {
owner: cloud9.Owner.user(user)
})
```

## Auto-Hibernation

A Cloud9 environemnt can automatically start and stop the associated EC2 instance to reduce costs.

Use `automaticStop` to specify the number of minutes until the running instance is shut down after the environment was last used.

```ts
const defaultVpc = ec2.Vpc.fromLookup(this, 'DefaultVPC', { isDefault: true });
new cloud9.Ec2Environment(this, 'Cloud9Env2', {
vpc: defaultVpc,
imageId: cloud9.ImageId.AMAZON_LINUX_2,
automaticStop: Duration.minutes(30),
});
11 changes: 11 additions & 0 deletions packages/@aws-cdk/aws-cloud9-alpha/lib/environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,16 @@ export interface Ec2EnvironmentProps {
*
*/
readonly imageId: ImageId

/**
* The number of minutes until the running instance is shut down after the
* environment was last used.
*
* Setting a value of 0 means the instance will never be automatically shut down."
*
* @default - The instance will not be shut down automatically.
*/
readonly automaticStop?: cdk.Duration
}

/**
Expand Down Expand Up @@ -200,6 +210,7 @@ export class Ec2Environment extends cdk.Resource implements IEc2Environment {
})) : undefined,
connectionType: props.connectionType ?? ConnectionType.CONNECT_SSH,
imageId: props.imageId,
automaticStopTimeMinutes: props.automaticStop?.toMinutes(),
});
this.environmentId = c9env.ref;
this.ec2EnvironmentArn = c9env.getAtt('Arn').toString();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Fixture with packages imported, but nothing else
import { CfnOutput, Stack } from 'aws-cdk-lib';
import { CfnOutput, Duration, Stack } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as cloud9 from '@aws-cdk/aws-cloud9-alpha';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
Expand Down
14 changes: 14 additions & 0 deletions packages/@aws-cdk/aws-cloud9-alpha/test/cloud9.environment.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,20 @@ test('environment owner can be account root', () => {
});
});

test('can set automaticStop', () => {
// WHEN
const automaticStop = cdk.Duration.minutes(30);
new cloud9.Ec2Environment(stack, 'C9Env', {
vpc,
imageId: cloud9.ImageId.AMAZON_LINUX_2,
automaticStop,
});
// THEN
Template.fromStack(stack).hasResourceProperties('AWS::Cloud9::EnvironmentEC2', {
AutomaticStopTimeMinutes: automaticStop.toMinutes(),
});
});

test.each([
[ConnectionType.CONNECT_SSH, 'CONNECT_SSH'],
[ConnectionType.CONNECT_SSM, 'CONNECT_SSM'],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"version": "32.0.0",
"files": {
"d302c7f90912c93bef6f8fda089adb33206a67ff3bdb6ce885b1f90a7fac7e25": {
"source": {
"path": "C9automaticStopStack.template.json",
"packaging": "file"
},
"destinations": {
"current_account-current_region": {
"bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
"objectKey": "d302c7f90912c93bef6f8fda089adb33206a67ff3bdb6ce885b1f90a7fac7e25.json",
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
}
}
}
},
"dockerImages": {}
}
Loading

0 comments on commit 09968a0

Please sign in to comment.