Skip to content

Commit 1571297

Browse files
authored
Upgrade to AWS CDK v2 & AWS SDK v3 (#11)
* get initial migration done * upgrade to aws sdk v3
1 parent 8c61ca3 commit 1571297

File tree

7 files changed

+43
-58
lines changed

7 files changed

+43
-58
lines changed

bin/rds-init-example.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
44
// SPDX-License-Identifier: MIT-0
55

6-
import * as cdk from '@aws-cdk/core'
6+
import * as cdk from 'aws-cdk-lib'
77
import { RdsInitStackExample } from '../demos/rds-init-example'
88

99
const app = new cdk.App()

cdk.json

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
11
{
22
"app": "npx ts-node --prefer-ts-exts bin/rds-init-example.ts",
3-
"context": {
4-
"@aws-cdk/core:enableStackNameDuplicates": "true",
5-
"aws-cdk:enableDiffNoFail": "true",
6-
"@aws-cdk/core:stackRelativeExports": "true",
7-
"@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true,
8-
"@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true,
9-
"@aws-cdk/aws-kms:defaultKeyPolicies": true,
10-
"@aws-cdk/aws-s3:grantWriteWithoutAcl": true,
11-
"@aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount": true
12-
}
3+
"context": {}
134
}

demos/rds-init-example.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: MIT-0
33

4-
import * as cdk from '@aws-cdk/core'
5-
import { CfnOutput, Duration, Stack, Token } from '@aws-cdk/core'
4+
import * as cdk from 'aws-cdk-lib'
5+
import { CfnOutput, Duration, Stack, Token } from 'aws-cdk-lib'
66
import { CdkResourceInitializer } from '../lib/resource-initializer'
7-
import { DockerImageCode } from '@aws-cdk/aws-lambda'
8-
import { InstanceClass, InstanceSize, InstanceType, Port, SubnetType, Vpc } from '@aws-cdk/aws-ec2'
9-
import { RetentionDays } from '@aws-cdk/aws-logs'
10-
import { Credentials, DatabaseInstance, DatabaseInstanceEngine, DatabaseSecret, MysqlEngineVersion } from '@aws-cdk/aws-rds'
11-
import * as lambda from '@aws-cdk/aws-lambda'
7+
import { DockerImageCode } from 'aws-cdk-lib/aws-lambda'
8+
import { InstanceClass, InstanceSize, InstanceType, Port, SubnetType, Vpc } from 'aws-cdk-lib/aws-ec2'
9+
import { RetentionDays } from 'aws-cdk-lib/aws-logs'
10+
import { Credentials, DatabaseInstance, DatabaseInstanceEngine, DatabaseSecret, MysqlEngineVersion } from 'aws-cdk-lib/aws-rds'
11+
import * as lambda from 'aws-cdk-lib/aws-lambda'
1212

1313

1414
export class RdsInitStackExample extends Stack {
@@ -30,7 +30,7 @@ export class RdsInitStackExample extends Stack {
3030
},{
3131
cidrMask: 24,
3232
name: 'compute',
33-
subnetType: SubnetType.PRIVATE_WITH_NAT,
33+
subnetType: SubnetType.PRIVATE_WITH_EGRESS,
3434
},{
3535
cidrMask: 28,
3636
name: 'rds',
@@ -67,7 +67,7 @@ export class RdsInitStackExample extends Stack {
6767
fnSecurityGroups: [],
6868
vpc,
6969
subnetsSelection: vpc.selectSubnets({
70-
subnetType: SubnetType.PRIVATE_WITH_NAT
70+
subnetType: SubnetType.PRIVATE_WITH_EGRESS
7171
})
7272
})
7373
// manage resources dependency
@@ -83,7 +83,7 @@ export class RdsInitStackExample extends Stack {
8383
const lambdaQuery = new lambda.Function(this, 'MyLambdaRDSQueryHelper', {
8484
code: new lambda.AssetCode(`${__dirname}/rds-query-fn-code`),
8585
handler: 'index.handler',
86-
runtime: lambda.Runtime.NODEJS_16_X,
86+
runtime: lambda.Runtime.NODEJS_22_X,
8787
memorySize: 1024,
8888
timeout: cdk.Duration.seconds(300),
8989
functionName: "my-lambda-rds-query-helper"

demos/rds-query-fn-code/index.js

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const mysql = require('mysql2')
2-
const AWS = require('aws-sdk')
2+
const { SecretsManagerClient, GetSecretValueCommand } = require('@aws-sdk/client-secrets-manager')
33
require('dotenv').config();
44

55
// the env AWS_ENDPOINT_URL is automatically injected and available
@@ -8,11 +8,13 @@ const url = new URL(endpoint);
88
const hostname = url.hostname;
99

1010
// configure the secretsmanager to connect to the running LocalStack instance
11-
const secrets = new AWS.SecretsManager({
11+
const secrets = new SecretsManagerClient({
1212
endpoint: endpoint,
13-
accessKeyId: 'test',
14-
secretAccessKey: 'test',
15-
region: 'us-east-1',
13+
credentials: {
14+
accessKeyId: 'test',
15+
secretAccessKey: 'test'
16+
},
17+
region: 'us-east-1'
1618
})
1719

1820
// the function expects "secretName" and "sqlQuery" as payload
@@ -59,12 +61,12 @@ function query (connection, sql) {
5961
})
6062
}
6163

62-
function getSecretValue (secretId) {
63-
return new Promise((resolve, reject) => {
64-
secrets.getSecretValue({ SecretId: secretId }, (err, data) => {
65-
if (err) return reject(err)
66-
67-
return resolve(JSON.parse(data.SecretString))
68-
})
69-
})
64+
async function getSecretValue (secretId) {
65+
try {
66+
const command = new GetSecretValueCommand({ SecretId: secretId })
67+
const response = await secrets.send(command)
68+
return JSON.parse(response.SecretString)
69+
} catch (error) {
70+
throw error
71+
}
7072
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "rds-init-script",
2+
"name": "rds-query-fn",
33
"version": "1.0.0",
44
"description": "Source code for querying RDS instance using Node.js",
55
"main": "index.js",
@@ -9,7 +9,8 @@
99
"author": "",
1010
"license": "MIT",
1111
"dependencies": {
12-
"mysql2": "^3.3.1",
13-
"dotenv": "^16.0.3"
12+
"@aws-sdk/client-secrets-manager": "^3.0.0",
13+
"mysql2": "^3.0.0",
14+
"dotenv": "^16.0.0"
1415
}
1516
}

lib/resource-initializer.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: MIT-0
33

4-
import * as ec2 from '@aws-cdk/aws-ec2'
5-
import * as lambda from '@aws-cdk/aws-lambda'
6-
import { Construct, Duration, Stack } from '@aws-cdk/core'
7-
import { AwsCustomResource, AwsCustomResourcePolicy, AwsSdkCall, PhysicalResourceId } from '@aws-cdk/custom-resources'
8-
import { RetentionDays } from '@aws-cdk/aws-logs'
9-
import { PolicyStatement, Role, ServicePrincipal } from '@aws-cdk/aws-iam'
4+
import * as ec2 from 'aws-cdk-lib/aws-ec2'
5+
import * as lambda from 'aws-cdk-lib/aws-lambda'
6+
import { Construct } from 'constructs'
7+
import { Duration, Stack } from 'aws-cdk-lib'
8+
import { AwsCustomResource, AwsCustomResourcePolicy, AwsSdkCall, PhysicalResourceId } from 'aws-cdk-lib/custom-resources'
9+
import { RetentionDays } from 'aws-cdk-lib/aws-logs'
10+
import { PolicyStatement, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam'
1011
import { createHash } from 'crypto'
1112

1213
export interface CdkResourceInitializerProps {
@@ -37,15 +38,14 @@ export class CdkResourceInitializer extends Construct {
3738
})
3839

3940
const fn = new lambda.DockerImageFunction(this, 'ResourceInitializerFn', {
40-
memorySize: props.fnMemorySize || 128,
41+
memorySize: props.fnMemorySize || 128,
4142
functionName: `${id}-ResInit${stack.stackName}`,
4243
code: props.fnCode,
4344
vpcSubnets: props.vpc.selectSubnets(props.subnetsSelection),
4445
vpc: props.vpc,
4546
securityGroups: [fnSg, ...props.fnSecurityGroups],
4647
timeout: props.fnTimeout,
47-
logRetention: props.fnLogRetention,
48-
allowAllOutbound: true
48+
logRetention: props.fnLogRetention
4949
})
5050

5151
const payload: string = JSON.stringify({

package.json

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,16 @@
1212
"cdk": "cdk"
1313
},
1414
"devDependencies": {
15-
"@aws-cdk/assert": "^1.125.0",
1615
"@types/jest": "^27.0.2",
1716
"@types/node": "^14.17.20",
18-
"aws-cdk": "^1.125.0",
17+
"aws-cdk": "^2.0.0",
1918
"jest": "^27.2.4",
2019
"ts-jest": "^27.0.5",
2120
"ts-node": "^10.2.1",
2221
"typescript": "^4.4.3"
2322
},
2423
"dependencies": {
25-
"@aws-cdk/aws-ec2": "^1.125.0",
26-
"@aws-cdk/aws-iam": "^1.125.0",
27-
"@aws-cdk/aws-lambda": "^1.125.0",
28-
"@aws-cdk/aws-logs": "^1.125.0",
29-
"@aws-cdk/aws-rds": "^1.125.0",
30-
"@aws-cdk/aws-s3": "^1.125.0",
31-
"@aws-cdk/aws-secretsmanager": "^1.125.0",
32-
"@aws-cdk/aws-ssm": "^1.125.0",
33-
"@aws-cdk/core": "^1.125.0",
34-
"@aws-cdk/custom-resources": "^1.125.0"
24+
"aws-cdk-lib": "^2.0.0",
25+
"constructs": "^10.0.0"
3526
}
3627
}

0 commit comments

Comments
 (0)