Skip to content

Commit

Permalink
chore(typescript): update lambda-api-ci sample from nodejs 10 to 18 (#…
Browse files Browse the repository at this point in the history
…1001)

Co-authored-by: Michael Kaiser <[email protected]>
  • Loading branch information
crhorne-aws and kaiz-io committed Mar 15, 2024
1 parent 8476a58 commit f4a4afd
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 36 deletions.
4 changes: 2 additions & 2 deletions typescript/lambda-api-ci/buildspec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ version: 0.2
phases:
install:
runtime-versions:
nodejs: 12
nodejs: 18
commands:
- npm install

build:
commands:
- npm run build
- npm run -- cdk deploy --ci --require-approval never -a "npx ts-node bin/lambda.ts"
- npm run -- cdk deploy --ci --require-approval never -a "npx ts-node --prefer-ts-exts bin/lambda.ts"
artifacts:
files:
- "cdk.out/**/*"
2 changes: 1 addition & 1 deletion typescript/lambda-api-ci/cdk.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"app": "npx ts-node bin/ci.ts"
"app": "npx ts-node --prefer-ts-exts bin/ci.ts"
}
29 changes: 23 additions & 6 deletions typescript/lambda-api-ci/lib/ci-stack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@ export class CIStack extends Stack {
const repo = Repository.fromRepositoryName(
this,
"WidgetsServiceRepository",
props.repositoryName
props.repositoryName,
)
const sourceOutput = new Artifact("SourceOutput")
const sourceAction = new CodeCommitSourceAction({
actionName: "CodeCommit",
repository: repo,
output: sourceOutput,
branch: "main",
})
pipeline.addStage({
stageName: "Source",
Expand All @@ -39,10 +40,19 @@ export class CIStack extends Stack {
private createBuildStage(pipeline: Pipeline, sourceOutput: Artifact) {
const project = new PipelineProject(this, `BuildProject`, {
environment: {
buildImage: LinuxBuildImage.STANDARD_3_0,
buildImage: LinuxBuildImage.STANDARD_7_0,
},
})

const cdkAssumeRolePolicy = new PolicyStatement()
cdkAssumeRolePolicy.addActions("sts:AssumeRole")
cdkAssumeRolePolicy.addResources(
this.formatArn({
service: "iam",
resource: "role",
region: "",
resourceName: "cdk-*",
}),
)
const cdkDeployPolicy = new PolicyStatement()
cdkDeployPolicy.addActions(
"cloudformation:GetTemplate",
Expand All @@ -61,7 +71,8 @@ export class CIStack extends Stack {
"lambda:DeleteFunction",
"lambda:GetFunctionConfiguration",
"lambda:AddPermission",
"lambda:RemovePermission"
"lambda:RemovePermission",
"ssm:GetParameter",
)
cdkDeployPolicy.addResources(
this.formatArn({
Expand All @@ -80,7 +91,12 @@ export class CIStack extends Stack {
arnFormat: ArnFormat.COLON_RESOURCE_NAME,
resourceName: lambdaFunctionName,
}),
"arn:aws:s3:::cdktoolkit-stagingbucket-*"
this.formatArn({
service: "ssm",
resource: "parameter",
resourceName: "cdk-bootstrap/*",
}),
"arn:aws:s3:::cdktoolkit-stagingbucket-*",
)
const editOrCreateLambdaDependencies = new PolicyStatement()
editOrCreateLambdaDependencies.addActions(
Expand All @@ -95,11 +111,12 @@ export class CIStack extends Stack {
"apigateway:POST",
"apigateway:PATCH",
"s3:CreateBucket",
"s3:PutBucketTagging"
"s3:PutBucketTagging",
)
editOrCreateLambdaDependencies.addResources("*")
project.addToRolePolicy(cdkDeployPolicy)
project.addToRolePolicy(editOrCreateLambdaDependencies)
project.addToRolePolicy(cdkAssumeRolePolicy)

const buildOutput = new Artifact(`BuildOutput`)
const buildAction = new CodeBuildAction({
Expand Down
6 changes: 4 additions & 2 deletions typescript/lambda-api-ci/lib/lambda-api-stack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,23 @@ export class CDKExampleLambdaApiStack extends Stack {

const lambdaPolicy = new PolicyStatement()
lambdaPolicy.addActions("s3:ListBucket")
lambdaPolicy.addActions("s3:getBucketLocation")
lambdaPolicy.addResources(this.bucket.bucketArn)

this.lambdaFunction = new Function(this, props.functionName, {
functionName: props.functionName,
handler: "handler.handler",
runtime: Runtime.NODEJS_10_X,
runtime: Runtime.NODEJS_18_X,
code: new AssetCode(`./src`),
memorySize: 512,
timeout: Duration.seconds(10),
environment: {
BUCKET: this.bucket.bucketName,
},
initialPolicy: [lambdaPolicy],
})

this.lambdaFunction.addToRolePolicy(lambdaPolicy)

this.restApi.root.addMethod("GET", new LambdaIntegration(this.lambdaFunction, {}))
}
}
24 changes: 8 additions & 16 deletions typescript/lambda-api-ci/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,16 @@
},
"devDependencies": {
"aws-cdk": "*",
"@aws-cdk/core": "*",
"@aws-cdk/assert": "*",
"@aws-cdk/aws-apigateway": "*",
"@aws-cdk/aws-codebuild": "*",
"@aws-cdk/aws-codecommit": "*",
"@aws-cdk/aws-codepipeline": "*",
"@aws-cdk/aws-codepipeline-actions": "*",
"@aws-cdk/aws-cloudformation": "*",
"@types/node": "^13.7.0",
"ts-node": "^10.9.1",
"typescript": "~5.1.6",
"prettier": "^2.0.4"
"@types/node": "^20.11.24",
"ts-node": "^10.9.2",
"typescript": "~5.3.3",
"prettier": "^3.2.5"
},
"dependencies": {
"aws-cdk-lib": "^2.0.0",
"constructs": "^10.0.0",
"aws-sdk": "^2.617.0",
"source-map-support": "^0.5.9"
"aws-cdk-lib": "^2.131.0",
"constructs": "^10.3.0",
"@aws-sdk/client-s3": "^3.525.0",
"source-map-support": "^0.5.21"
},
"description": "* `npm run build` compile typescript to js * `npm run watch` watch for changes and compile * `npm run test` perform the jest unit tests * `cdk deploy` deploy this stack to your default AWS account/region * `cdk diff` compare deployed stack with current state * `cdk synth` emits the synthesized CloudFormation template",
"main": "jest.config.js",
Expand Down
4 changes: 2 additions & 2 deletions typescript/lambda-api-ci/src/handler.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { S3 } from "aws-sdk"
import { S3 } from "@aws-sdk/client-s3"

const bucketName = process.env.BUCKET!

Expand All @@ -11,7 +11,7 @@ const handler = async function (event: any, context: any) {

if (method === "GET") {
if (event.path === "/") {
const data = await S3Client.listObjectsV2({ Bucket: bucketName }).promise()
const data = await S3Client.listObjectsV2({ Bucket: bucketName })
var body = {
widgets: data.Contents!.map(function (e) {
return e.Key
Expand Down
12 changes: 6 additions & 6 deletions typescript/lambda-api-ci/src/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
"test": "jest"
},
"devDependencies": {
"@types/node": "^13.7.0",
"jest": "^24.9.0",
"ts-jest": "^24.0.2",
"ts-node": "^10.9.1",
"typescript": "~5.1.6"
"@types/node": "^20.11.25",
"jest": "^29.7.0",
"ts-jest": "^29.1.2",
"ts-node": "^10.9.2",
"typescript": "~5.4.2"
},
"dependencies": {
"aws-sdk": "^2.617.0"
"@aws-sdk/client-s3": "^3.525.0"
},
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion typescript/lambda-api-ci/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"experimentalDecorators": true,
"strictPropertyInitialization":false,
"typeRoots": ["./node_modules/@types"],
"allowSyntheticDefaultImports": true
"allowSyntheticDefaultImports": true,
},
"exclude": ["cdk.out"]
}

0 comments on commit f4a4afd

Please sign in to comment.