Skip to content

Commit

Permalink
chore: remove DEFAULT_CR_NODE_VERSION regional map (#26665)
Browse files Browse the repository at this point in the history
Removes the map of regions -> available lambda nodejs runtime versions
that previously was used for all custom resources vended in the aws-cdk.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
  • Loading branch information
MrArnoldPalmer committed Aug 22, 2023
1 parent 6087424 commit 27b7201
Show file tree
Hide file tree
Showing 10 changed files with 26 additions and 81 deletions.
4 changes: 4 additions & 0 deletions allowed-breaking-changes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,10 @@ removed:aws-cdk-lib.aws_ecs.CfnTaskSet.LoadBalancerProperty.loadBalancerName
# Previously only BlueGreenUpdatePolicy could be set, now BlueGreenUpdatePolicy or new RollingUpdatePolicy can be provided
weakened:aws-cdk-lib.aws_sagemaker.CfnEndpoint.DeploymentConfigProperty

# Removed for being unused
removed:@aws-cdk/region-info.FactName.DEFAULT_CR_NODE_VERSION
removed:aws-cdk-lib.region_info.FactName.DEFAULT_CR_NODE_VERSION

# These should have been marked external
weakened:aws-cdk-lib.aws_events.CfnRule.RedshiftDataParametersProperty
weakened:aws-cdk-lib.aws_ivs.CfnRecordingConfiguration.DestinationConfigurationProperty
Expand Down
3 changes: 1 addition & 2 deletions packages/aws-cdk-lib/aws-logs/lib/log-retention.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import * as iam from '../../aws-iam';
import * as s3_assets from '../../aws-s3-assets';
import * as cdk from '../../core';
import { ArnFormat } from '../../core';
import { FactName } from '../../region-info';

/**
* Construction properties for a LogRetention.
Expand Down Expand Up @@ -171,7 +170,7 @@ class LogRetentionFunction extends Construct implements cdk.ITaggable {
type: 'AWS::Lambda::Function',
properties: {
Handler: 'index.handler',
Runtime: cdk.Stack.of(scope).regionalFact(FactName.DEFAULT_CR_NODE_VERSION, 'nodejs18.x'), // Equivalent to Runtime.NODEJS_18_X
Runtime: 'nodejs18.x',
Code: {
S3Bucket: asset.s3BucketName,
S3Key: asset.s3ObjectKey,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import * as path from 'path';
import { Construct } from 'constructs';
import * as fs from 'fs-extra';
import * as cxapi from '../../../cx-api';
import { FactName } from '../../../region-info';
import { AssetStaging } from '../asset-staging';
import { FileAssetPackaging } from '../assets';
import { CfnResource } from '../cfn-resource';
Expand All @@ -18,15 +17,6 @@ const ENTRYPOINT_FILENAME = '__entrypoint__';
const ENTRYPOINT_NODEJS_SOURCE = path.join(__dirname, 'nodejs-entrypoint.js');
export const INLINE_CUSTOM_RESOURCE_CONTEXT = '@aws-cdk/core:inlineCustomResourceIfPossible';

/**
* The lambda runtime used by default for aws-cdk vended custom resources. Can change
* based on region.
*/
export function builtInCustomResourceProviderNodeRuntime(scope: Construct): CustomResourceProviderRuntime {
const runtimeName = Stack.of(scope).regionalFact(FactName.DEFAULT_CR_NODE_VERSION, 'nodejs18.x');
return Object.values(CustomResourceProviderRuntime).find(value => value === runtimeName) ?? CustomResourceProviderRuntime.NODEJS_18_X;
}

/**
* Initialization properties for `CustomResourceProvider`.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as fs from 'fs';
import * as path from 'path';
import * as cxapi from '../../../cx-api';
import { builtInCustomResourceProviderNodeRuntime, App, AssetStaging, CustomResourceProvider, CustomResourceProviderRuntime, DockerImageAssetLocation, DockerImageAssetSource, Duration, FileAssetLocation, FileAssetSource, ISynthesisSession, Size, Stack, CfnResource } from '../../lib';
import { App, AssetStaging, CustomResourceProvider, CustomResourceProviderRuntime, DockerImageAssetLocation, DockerImageAssetSource, Duration, FileAssetLocation, FileAssetSource, ISynthesisSession, Size, Stack, CfnResource } from '../../lib';
import { CUSTOMIZE_ROLES_CONTEXT_KEY } from '../../lib/helpers-internal';
import { toCloudFormation } from '../util';

Expand Down Expand Up @@ -457,22 +457,5 @@ describe('custom resource provider', () => {
});

});
describe('builtInCustomResourceProviderNodeRuntime', () => {
test('returns node18 for commercial region', () => {
const app = new App();
const stack = new Stack(app, 'MyStack', { env: { region: 'us-east-1' } });

const rt = builtInCustomResourceProviderNodeRuntime(stack);
expect(rt).toEqual(CustomResourceProviderRuntime.NODEJS_18_X);
});

test('returns node18 for iso region', () => {
const app = new App();
const stack = new Stack(app, 'MyStack', { env: { region: 'us-iso-east-1' } });

const rt = builtInCustomResourceProviderNodeRuntime(stack);
expect(rt).toEqual(CustomResourceProviderRuntime.NODEJS_18_X);
});
});
});

19 changes: 19 additions & 0 deletions packages/aws-cdk-lib/custom-resources/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -648,3 +648,22 @@ const getParameter = new cr.AwsCustomResource(this, 'AssociateVPCWithHostedZone'
}),
});
```

#### Using AWS SDK for JavaScript v3

`AwsCustomResource` uses Node 18 and aws sdk v3 by default. You can specify the service as either the name of the sdk module, or just the service name, IE `@aws-sdk/client-ssm` or `SSM`, and the action as either the client method name or the sdk v3 command, `getParameter` or `GetParameterCommand`. It is recommended to use the v3 format for new AwsCustomResources going forward.

```ts
new cr.AwsCustomResource(this, 'GetParameter', {
resourceType: 'Custom::SSMParameter',
onUpdate: {
service: '@aws-sdk/client-ssm', // 'SSM' in v2
action: 'GetParameterCommand', // 'getParameter' in v2
parameters: {
Name: 'foo',
WithDecryption: true,
},
physicalResourceId: cr.PhysicalResourceId.fromResponse('Parameter.ARN'),
},
});
```
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,6 @@ import * as logs from '../../../aws-logs';
import * as cdk from '../../../core';
import { Annotations } from '../../../core';
import * as cxapi from '../../../cx-api';
import { FactName } from '../../../region-info';

/**
* The lambda runtime used by default for aws-cdk vended custom resources. Can change
* based on region.
*/
export function builtInCustomResourceNodeRuntime(scope: Construct): lambda.Runtime {
// Runtime regional fact should always return a known runtime string that lambda.Runtime
// can index off, but for type safety we also default it here.
const runtimeName = cdk.Stack.of(scope).regionalFact(FactName.DEFAULT_CR_NODE_VERSION, 'nodejs18.x');
return runtimeName
? new lambda.Runtime(runtimeName, lambda.RuntimeFamily.NODEJS, { supportsInlineCode: true })
: lambda.Runtime.NODEJS_18_X;
}

/**
* Reference to the physical resource id that can be passed to the AWS operation as a parameter.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { Template } from '../../../assertions';
import * as ec2 from '../../../aws-ec2';
import * as iam from '../../../aws-iam';
import * as lambda from '../../../aws-lambda';
import * as logs from '../../../aws-logs';
import * as cdk from '../../../core';
import { App, Stack } from '../../../core';
import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId, PhysicalResourceIdReference, builtInCustomResourceNodeRuntime } from '../../lib';
import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId, PhysicalResourceIdReference } from '../../lib';

/* eslint-disable quote-props */

Expand Down Expand Up @@ -1280,22 +1279,3 @@ test('can specify removal policy', () => {
DeletionPolicy: 'Retain',
});
});

describe('builtInCustomResourceNodeRuntime', () => {
test('returns node18 for commercial region', () => {
const app = new App();
const stack = new Stack(app, 'MyStack', { env: { region: 'us-east-1' } });

const rt = builtInCustomResourceNodeRuntime(stack);
expect(rt).toEqual(lambda.Runtime.NODEJS_18_X);
});

test('returns node18 for iso region', () => {
const app = new App();
const stack = new Stack(app, 'MyStack', { env: { region: 'us-iso-east-1' } });

const rt = builtInCustomResourceNodeRuntime(stack);
expect(rt).toEqual(lambda.Runtime.NODEJS_18_X);
});
});

8 changes: 0 additions & 8 deletions packages/aws-cdk-lib/region-info/build-tools/fact-tables.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,14 +122,6 @@ export const PARTITION_MAP: { [region: string]: Region } = {
'us-isob-': { partition: Partition.UsIsoB, domainSuffix: 'sc2s.sgov.gov' },
};

export const CR_DEFAULT_RUNTIME_MAP: Record<Partition, string> = {
[Partition.Default]: 'nodejs18.x',
[Partition.Cn]: 'nodejs18.x',
[Partition.UsGov]: 'nodejs18.x',
[Partition.UsIso]: 'nodejs18.x',
[Partition.UsIsoB]: 'nodejs18.x',
};

// https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions
// https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-access-logs.html#attach-bucket-policy
// Any not listed regions use the service principal "logdelivery.elasticloadbalancing.amazonaws.com"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {
ROUTE_53_BUCKET_WEBSITE_ZONE_IDS,
EBS_ENV_ENDPOINT_HOSTED_ZONE_IDS,
ADOT_LAMBDA_LAYER_ARNS,
CR_DEFAULT_RUNTIME_MAP,
PARAMS_AND_SECRETS_LAMBDA_LAYER_ARNS,
} from './fact-tables';
import {
Expand Down Expand Up @@ -83,8 +82,6 @@ export async function main(): Promise<void> {

registerFact(region, 'APPMESH_ECR_ACCOUNT', APPMESH_ECR_ACCOUNTS[region]);

registerFact(region, 'DEFAULT_CR_NODE_VERSION', CR_DEFAULT_RUNTIME_MAP[partition]);

const firehoseCidrBlock = FIREHOSE_CIDR_BLOCKS[region];
if (firehoseCidrBlock) {
registerFact(region, 'FIREHOSE_CIDR_BLOCK', `${FIREHOSE_CIDR_BLOCKS[region]}/27`);
Expand Down
5 changes: 0 additions & 5 deletions packages/aws-cdk-lib/region-info/lib/fact.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,6 @@ export class FactName {
*/
public static readonly FIREHOSE_CIDR_BLOCK = 'firehoseCidrBlock';

/**
* The default NodeJS version used for custom resource function runtimes
*/
public static readonly DEFAULT_CR_NODE_VERSION = 'defaultCrNodeVersion';

/**
* The ARN of CloudWatch Lambda Insights for a version (e.g. 1.0.98.0)
*/
Expand Down

0 comments on commit 27b7201

Please sign in to comment.