diff --git a/examples/sst/stacks/OpenNextReferenceImplementation.ts b/examples/sst/stacks/OpenNextReferenceImplementation.ts index 85ecc9a4a..2e29fe861 100644 --- a/examples/sst/stacks/OpenNextReferenceImplementation.ts +++ b/examples/sst/stacks/OpenNextReferenceImplementation.ts @@ -31,7 +31,6 @@ import { Runtime, } from "aws-cdk-lib/aws-lambda"; import { SqsEventSource } from "aws-cdk-lib/aws-lambda-event-sources"; -import { RetentionDays } from "aws-cdk-lib/aws-logs"; import { BlockPublicAccess, Bucket } from "aws-cdk-lib/aws-s3"; import { BucketDeployment, Source } from "aws-cdk-lib/aws-s3-deployment"; import { Queue } from "aws-cdk-lib/aws-sqs"; @@ -42,7 +41,11 @@ import { RemovalPolicy, Stack, } from "aws-cdk-lib/core"; -import { Provider } from "aws-cdk-lib/custom-resources"; +import { + AwsCustomResource, + AwsCustomResourcePolicy, + PhysicalResourceId, +} from "aws-cdk-lib/custom-resources"; import { Construct } from "constructs"; import { readFileSync } from "fs"; import path from "path"; @@ -199,16 +202,22 @@ export class OpenNextCdkReferenceImplementation extends Construct { ], }); - const provider = new Provider(this, "RevalidationProvider", { - onEventHandler: insertFn, - logRetention: RetentionDays.ONE_DAY, - }); - - new CustomResource(this, "RevalidationResource", { - serviceToken: provider.serviceToken, - properties: { - version: Date.now().toString(), + new AwsCustomResource(this, "RevalidationInitResource", { + onUpdate: { + service: "Lambda", + action: "invoke", + parameters: { + FunctionName: insertFn.functionArn, + }, + physicalResourceId: PhysicalResourceId.of("dynamodb-cache"), }, + + policy: AwsCustomResourcePolicy.fromStatements([ + new PolicyStatement({ + actions: ["lambda:InvokeFunction"], + resources: [insertFn.functionArn], + }), + ]), }); } diff --git a/packages/open-next/src/adapters/dynamo-provider.ts b/packages/open-next/src/adapters/dynamo-provider.ts index b79226ff3..76d924b5a 100644 --- a/packages/open-next/src/adapters/dynamo-provider.ts +++ b/packages/open-next/src/adapters/dynamo-provider.ts @@ -42,11 +42,12 @@ async function defaultHandler( event: InitializationFunctionEvent, ): Promise { switch (event.requestType) { + case "delete": + return remove(); case "create": case "update": + default: return insert(event.requestType); - case "delete": - return remove(); } } diff --git a/packages/open-next/src/build.ts b/packages/open-next/src/build.ts index 10465b68d..b1642a863 100755 --- a/packages/open-next/src/build.ts +++ b/packages/open-next/src/build.ts @@ -613,7 +613,7 @@ async function createCacheAssets(monorepoRoot: string) { plugins: [ openNextResolvePlugin({ overrides: { - converter: "custom-resource", + converter: "dummy", }, }), ], diff --git a/packages/open-next/src/converters/custom-resource.ts b/packages/open-next/src/converters/custom-resource.ts deleted file mode 100644 index 46377d489..000000000 --- a/packages/open-next/src/converters/custom-resource.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { CdkCustomResourceEvent } from "aws-lambda"; -import { Converter } from "types/open-next"; - -import type { InitializationFunctionEvent } from "../adapters/dynamo-provider"; - -const converter: Converter< - InitializationFunctionEvent, - InitializationFunctionEvent -> = { - convertFrom(event: CdkCustomResourceEvent) { - return Promise.resolve({ - type: "initializationFunction", - requestType: event.RequestType.toLowerCase() as - | "create" - | "update" - | "delete", - resourceId: "dynamodb-cache", - }); - }, - convertTo(internalResult) { - return Promise.resolve({ - type: "dummy", - original: internalResult, - }); - }, - name: "customResource", -}; - -export default converter; diff --git a/packages/open-next/src/types/open-next.ts b/packages/open-next/src/types/open-next.ts index 5fe81a464..ea37285d1 100644 --- a/packages/open-next/src/types/open-next.ts +++ b/packages/open-next/src/types/open-next.ts @@ -112,7 +112,6 @@ export type IncludedConverter = | "edge" | "node" | "sqs-revalidate" - | "custom-resource" | "dummy"; export type IncludedQueue = "sqs";