diff --git a/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/lambda/call-aws-service-cross-region.ts b/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/lambda/call-aws-service-cross-region.ts index 2622c61e6a29b..1d33349210338 100644 --- a/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/lambda/call-aws-service-cross-region.ts +++ b/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/lambda/call-aws-service-cross-region.ts @@ -11,7 +11,7 @@ import { CrossRegionAwsSdkSingletonFunction } from '../../../custom-resource-han */ export interface CallAwsServiceCrossRegionProps extends sfn.TaskStateBaseProps { /** - * The AWS service to call in AWS SDK for JavaScript v3 style. + * The AWS service to call in AWS SDK for JavaScript v3 format. * * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/ * @example 's3' @@ -26,9 +26,7 @@ export interface CallAwsServiceCrossRegionProps extends sfn.TaskStateBaseProps { readonly action: string; /** - * Parameters for the API action call. - * - * Use PascalCase for the parameter names. + * Parameters for the API action call in AWS SDK for JavaScript v3 format. * * @default - no parameters */ @@ -112,12 +110,6 @@ export class CallAwsServiceCrossRegion extends sfn.TaskStateBase { if (!Token.isUnresolved(props.action) && !props.action.startsWith(props.action[0]?.toLowerCase())) { throw new Error(`action must be camelCase, got: ${props.action}`); } - if (props.parameters) { - const invalidKeys = Object.keys(props.parameters).filter((key) => !key.startsWith(key[0]?.toUpperCase())); - if (invalidKeys.length) { - throw new Error(`parameter names must be PascalCase, got: ${invalidKeys.join(', ')}`); - } - } // props.service expects a service name in the AWS SDK for JavaScript v3 format. // In some services, this format differs from the one used in IAM. diff --git a/packages/aws-cdk-lib/aws-stepfunctions-tasks/test/lambda/call-aws-service-cross-region.test.ts b/packages/aws-cdk-lib/aws-stepfunctions-tasks/test/lambda/call-aws-service-cross-region.test.ts index d42050b34dd0a..458a9229444aa 100644 --- a/packages/aws-cdk-lib/aws-stepfunctions-tasks/test/lambda/call-aws-service-cross-region.test.ts +++ b/packages/aws-cdk-lib/aws-stepfunctions-tasks/test/lambda/call-aws-service-cross-region.test.ts @@ -162,6 +162,40 @@ test('with custom IAM action', () => { }); }); +test('parameters with camelCase', () => { + // WHEN + const task = new tasks.CallAwsServiceCrossRegion(stack, 'GetRestApi', { + service: 'api-gateway', + action: 'getRestApi', + parameters: { + restApiId: 'id', + }, + region: 'us-east-1', + iamResources: ['*'], + retryOnServiceExceptions: false, + }); + + // THEN + expect(stack.resolve(task.toStateJson())).toEqual({ + Type: 'Task', + Resource: { + 'Fn::GetAtt': [ + 'CrossRegionAwsSdk8a0c93f3dbef4b71ac137aaf2048ce7eF7430F4F', + 'Arn', + ], + }, + End: true, + Parameters: { + action: 'getRestApi', + region: 'us-east-1', + service: 'api-gateway', + parameters: { + restApiId: 'id', + }, + }, + }); +}); + test('throws with invalid integration pattern', () => { expect(() => new tasks.CallAwsServiceCrossRegion(stack, 'GetObject', { integrationPattern: sfn.IntegrationPattern.RUN_JOB, @@ -189,19 +223,6 @@ test('throws if action is not camelCase', () => { })).toThrow(/action must be camelCase, got: GetObject/); }); -test('throws if parameters has keys as not PascalCase', () => { - expect(() => new tasks.CallAwsServiceCrossRegion(stack, 'GetObject', { - service: 's3', - action: 'getObject', - parameters: { - bucket: 'my-bucket', - key: sfn.JsonPath.stringAt('$.key'), - }, - region: 'us-east-1', - iamResources: ['*'], - })).toThrow(/parameter names must be PascalCase, got: bucket, key/); -}); - test('can pass additional IAM statements', () => { // WHEN const task = new tasks.CallAwsServiceCrossRegion(stack, 'DetectLabels', {