Skip to content

(aws-apigateway): StepFunctionsRestApi does not pass on path #27309

Open
@maiksensi

Description

@maiksensi

Describe the bug

The construct StepFunctionsRestApi seems to be buggy regarding path handling.

Expected Behavior

When using StepFunctionsRestApi with path: true I expect my underlying Step Function to receive the path.

Current Behavior

Passing a path (also tried different depths combinations like: ...prod/users/4 or .../prod/12) leads to a {"message":"Missing Authentication Token"}

see: curl -X GET "https://XXXXXXXX.execute-api.eu-central-1.amazonaws.com/prod/123" {"message":"Missing Authentication Token"}

Reproduction Steps

deploy this (almost) minimal example:

    const successState = new Pass(this, "SuccessState");

    const stateMachine = new StateMachine(this, "CrudStateMachine", {
      definitionBody: DefinitionBody.fromChainable(successState),
      timeout: Duration.minutes(5),
      stateMachineType: StateMachineType.EXPRESS,
      comment: "This state machine returns an employee entry from DynamoDB",
      logs: {
        destination: new LogGroup(this, "StateMachineLogs", {
          retention: RetentionDays.ONE_DAY,
        }),
        level: LogLevel.ALL,
        includeExecutionData: true,
      },
    });

    new StepFunctionsRestApi(this, "StepFunctionsRestApi", {
      stateMachine,
      path: true,
      requestContext: {
        httpMethod: true,
      },
    });

and send a similar request to the created API:
curl -X GET "https://${apigatewayid}.execute-api.eu-central-1.amazonaws.com/prod/123"

Possible Solution

No response

Additional Information/Context

I can workaround the problem by creating a proxy integration manually on the API but I guess that is not the idea here.

see

const sfnApi = new StepFunctionsRestApi(this, 'StepFunctionsRestApi', {
      deploy: true,
      stateMachine: sfn,
    });

    sfnApi.root.addProxy({
      defaultIntegration: StepFunctionsIntegration.startExecution(sfn, {
        path: true,
        querystring: true,
      }),
      anyMethod: true,
    });

    sfnApi.root.addResource('testpath').addProxy({
      defaultIntegration: StepFunctionsIntegration.startExecution(sfn, {
        path: true,
        querystring: true,
      }),
      anyMethod: true,
    });

Does the current implementation on the vtl packages/@aws-cdk/aws-apigateway/lib/integrations/stepfunctions.vtl only work for key value pairs (regarding paths)?

CDK CLI Version

2.97.0

Framework Version

2.97.0

Node.js Version

v18.14.0

OS

macos 14 (also happened on 13)

Language

Typescript

Language Version

^4.8.3

Other information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    @aws-cdk/aws-apigatewayRelated to Amazon API GatewaybugThis issue is a bug.effort/mediumMedium work item – several days of effortp2

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions