-
Notifications
You must be signed in to change notification settings - Fork 3.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(scheduler-targets): step function start execution target #27424
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the commit! It motivated me to add more issues for Scheduler Targets to get help from the community to build all targets for L2 Scheduler constructs.
@@ -0,0 +1,73 @@ | |||
function cdk_cli_wrapper_ICdk(p) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like cdk-cli-wrapper folder was committed by mistake?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I commited this by mistake. Good spot! Thanks
/** | ||
* Use an AWS Step function as a target for AWS EventBridge Scheduler. | ||
*/ | ||
export class StepFunctionsStartExecution extends ScheduleTargetBase implements IScheduleTarget { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would recommend to add unit tests for this target too. See https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/aws-scheduler-targets-alpha/test/target.test.ts#L9. We probably need to rename that test file and create one file with unit tests per each target.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I created a new unit test which contains almost identical unit tests for step functions.
I also renamed the existing file target.test.ts
into lambda-invoke.test.ts
.
@filletofish thanks for the review! I'm glad you created more issues for it, I thought about contributing more targets, but have chosen the one I needed the most :) I've addressed your comments, please have a look on it again. |
const stateMachineEnv = this.stateMachine.env; | ||
if (!sameEnvDimension(stateMachineEnv.region, schedule.env.region)) { | ||
throw new Error(`Cannot assign stateMachine in region ${stateMachineEnv.region} to the schedule ${Names.nodeUniqueId(schedule.node)} in region ${schedule.env.region}. Both the schedule and the stateMachine must be in the same region.`); | ||
} | ||
|
||
if (!sameEnvDimension(stateMachineEnv.account, schedule.env.account)) { | ||
throw new Error(`Cannot assign stateMachine in account ${stateMachineEnv.account} to the schedule ${Names.nodeUniqueId(schedule.node)} in account ${schedule.env.region}. Both the schedule and the stateMachine must be in the same account.`); | ||
} | ||
|
||
if (this.props.role && !sameEnvDimension(this.props.role.env.account, stateMachineEnv.account)) { | ||
throw new Error(`Cannot grant permission to execution role in account ${this.props.role.env.account} to invoke target ${Names.nodeUniqueId(this.stateMachine.node)} in account ${stateMachineEnv.account}. Both the target and the execution role must be in the same account.`); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It might make sense to extract this common logic block somewhere (since its the same for step functions and lambda and probably some targets more, except the message), do you have a favorite spot for it? Should it go to ScheduleTargetBase
, in a new class/function or stay "duplicated"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kaizencc do you have any opinion on this? I personally do not mind the duplication of the code
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't mind it for now, but would be happy with less duplication :). At best we can create an issue for it and be able to point to it in the future if this gets out of hand
const stateMachineEnv = this.stateMachine.env; | ||
if (!sameEnvDimension(stateMachineEnv.region, schedule.env.region)) { | ||
throw new Error(`Cannot assign stateMachine in region ${stateMachineEnv.region} to the schedule ${Names.nodeUniqueId(schedule.node)} in region ${schedule.env.region}. Both the schedule and the stateMachine must be in the same region.`); | ||
} | ||
|
||
if (!sameEnvDimension(stateMachineEnv.account, schedule.env.account)) { | ||
throw new Error(`Cannot assign stateMachine in account ${stateMachineEnv.account} to the schedule ${Names.nodeUniqueId(schedule.node)} in account ${schedule.env.region}. Both the schedule and the stateMachine must be in the same account.`); | ||
} | ||
|
||
if (this.props.role && !sameEnvDimension(this.props.role.env.account, stateMachineEnv.account)) { | ||
throw new Error(`Cannot grant permission to execution role in account ${this.props.role.env.account} to invoke target ${Names.nodeUniqueId(this.stateMachine.node)} in account ${stateMachineEnv.account}. Both the target and the execution role must be in the same account.`); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't mind it for now, but would be happy with less duplication :). At best we can create an issue for it and be able to point to it in the future if this gets out of hand
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the submission @WtfJoke!
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork). |
A StepFunctionStartExecution ScheduleTarget was implemented similar to the already existing LambdaInvoke target.
I've added an integration test, which will trigger an eventbridge schedule once. This schedule has a step function as a target. The step function creates a parameter with a given value, which will get verified by the test
Closes #27377
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license