Skip to content

Commit 4530be2

Browse files
authored
refactor(parameters): moved ssm resource creation to AwsCustomResource (#1319)
* refactor: moved ssm resource creation to AwsCustomResource * chore: removed unused function
1 parent af280dc commit 4530be2

File tree

3 files changed

+25
-123
lines changed

3 files changed

+25
-123
lines changed

Diff for: packages/parameters/tests/e2e/ssmProvider.class.test.ts

+1-13
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@ import {
2222
TEARDOWN_TIMEOUT,
2323
TEST_CASE_TIMEOUT
2424
} from './constants';
25-
import {
26-
createSecureStringProvider,
27-
createSSMSecureString
28-
} from '../helpers/parametersUtils';
25+
import { createSSMSecureString } from '../helpers/parametersUtils';
2926

3027
const runtime: string = process.env.RUNTIME || 'nodejs18x';
3128

@@ -127,13 +124,6 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => {
127124
runtime,
128125
});
129126

130-
// Create Custom Resource provider:
131-
// will be used to create some SSM parameters not supported by CDK
132-
const provider = createSecureStringProvider({
133-
stack,
134-
parametersPrefix: `${RESOURCE_NAME_PREFIX}-${runtime}-${uuid.substring(0,5)}`
135-
});
136-
137127
// Create SSM parameters
138128
const parameterGetA = new StringParameter(stack, 'Param-a', {
139129
parameterName: paramA,
@@ -146,15 +136,13 @@ describe(`parameters E2E tests (ssmProvider) for runtime: ${runtime}`, () => {
146136

147137
const parameterEncryptedA = createSSMSecureString({
148138
stack,
149-
provider,
150139
id: 'Param-encrypted-a',
151140
name: paramEncryptedA,
152141
value: paramEncryptedAValue,
153142
});
154143

155144
const parameterEncryptedB = createSSMSecureString({
156145
stack,
157-
provider,
158146
id: 'Param-encrypted-b',
159147
name: paramEncryptedB,
160148
value: paramEncryptedBValue,

Diff for: packages/parameters/tests/helpers/parametersUtils.ts

+24-56
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { Stack, RemovalPolicy, CustomResource, Duration } from 'aws-cdk-lib';
2-
import { PhysicalResourceId, Provider } from 'aws-cdk-lib/custom-resources';
3-
import { RetentionDays } from 'aws-cdk-lib/aws-logs';
4-
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
5-
import { Runtime } from 'aws-cdk-lib/aws-lambda';
6-
import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
1+
import { Stack, RemovalPolicy } from 'aws-cdk-lib';
2+
import { PhysicalResourceId } from 'aws-cdk-lib/custom-resources';
73
import { StringParameter, IStringParameter } from 'aws-cdk-lib/aws-ssm';
84
import { Table, TableProps, BillingMode } from 'aws-cdk-lib/aws-dynamodb';
95
import {
@@ -138,70 +134,43 @@ const createAppConfigConfigurationProfile = (options: CreateAppConfigConfigurati
138134
});
139135
};
140136

141-
export type CreateSecureStringProviderOptions = {
142-
stack: Stack
143-
parametersPrefix: string
144-
};
145-
146-
const createSecureStringProvider = (options: CreateSecureStringProviderOptions): Provider => {
147-
const { stack, parametersPrefix } = options;
148-
149-
const ssmSecureStringHandlerFn = new NodejsFunction(
150-
stack,
151-
'ssm-securestring-handler',
152-
{
153-
entry: 'tests/helpers/ssmSecureStringCdk.ts',
154-
handler: 'handler',
155-
bundling: {
156-
minify: true,
157-
sourceMap: true,
158-
target: 'es2020',
159-
externalModules: [],
160-
},
161-
runtime: Runtime.NODEJS_18_X,
162-
timeout: Duration.seconds(15),
163-
});
164-
ssmSecureStringHandlerFn.addToRolePolicy(
165-
new PolicyStatement({
166-
actions: [
167-
'ssm:PutParameter',
168-
'ssm:DeleteParameter',
169-
],
170-
resources: [
171-
`arn:aws:ssm:${stack.region}:${stack.account}:parameter/${parametersPrefix}*`,
172-
],
173-
}),
174-
);
175-
176-
return new Provider(stack, 'ssm-secure-string-provider', {
177-
onEventHandler: ssmSecureStringHandlerFn,
178-
logRetention: RetentionDays.ONE_DAY,
179-
});
180-
};
181-
182137
export type CreateSSMSecureStringOptions = {
183138
stack: Stack
184-
provider: Provider
185139
id: string
186140
name: string
187141
value: string
188142
};
189143

190144
const createSSMSecureString = (options: CreateSSMSecureStringOptions): IStringParameter => {
191-
const { stack, provider, id, name, value } = options;
145+
const { stack, id, name, value } = options;
192146

193-
new CustomResource(stack, `custom-${id}`, {
194-
serviceToken: provider.serviceToken,
195-
properties: {
196-
Name: name,
197-
Value: value,
147+
const paramCreator = new AwsCustomResource(stack, `create-${id}`, {
148+
onCreate: {
149+
service: 'SSM',
150+
action: 'putParameter',
151+
parameters: {
152+
Name: name,
153+
Value: value,
154+
Type: 'SecureString',
155+
},
156+
physicalResourceId: PhysicalResourceId.of(id),
198157
},
158+
onDelete: {
159+
service: 'SSM',
160+
action: 'deleteParameter',
161+
parameters: {
162+
Name: name,
163+
},
164+
},
165+
policy: AwsCustomResourcePolicy.fromSdkCalls({
166+
resources: AwsCustomResourcePolicy.ANY_RESOURCE,
167+
}),
199168
});
200169

201170
const param = StringParameter.fromSecureStringParameterAttributes(stack, id, {
202171
parameterName: name,
203172
});
204-
param.node.addDependency(provider);
173+
param.node.addDependency(paramCreator);
205174

206175
return param;
207176
};
@@ -237,6 +206,5 @@ export {
237206
createBaseAppConfigResources,
238207
createAppConfigConfigurationProfile,
239208
createSSMSecureString,
240-
createSecureStringProvider,
241209
putDynamoDBItem,
242210
};

Diff for: packages/parameters/tests/helpers/ssmSecureStringCdk.ts

-54
This file was deleted.

0 commit comments

Comments
 (0)