diff --git a/README-INPUT-OUTPUT.md b/README-INPUT-OUTPUT.md index ab2e82d..e11c1dc 100644 --- a/README-INPUT-OUTPUT.md +++ b/README-INPUT-OUTPUT.md @@ -39,6 +39,7 @@ The CloudFormation template accepts the following parameters: * **logGroupRetentionInDays** (number, default=7): the number of days to retain log events in the Lambda log groups. Before this parameter existed, log events were retained indefinitely * **securityGroupIds** (list of SecurityGroup IDs): List of Security Groups to use in every Lambda function's VPC Configuration (optional); please note that your VPC should be configured to allow public internet access (via NAT Gateway) or include VPC Endpoints to the Lambda service * **subnetIds** (list of Subnet IDs): List of Subnets to use in every Lambda function's VPC Configuration (optional); please note that your VPC should be configured to allow public internet access (via NAT Gateway) or include VPC Endpoints to the Lambda service +* **stateMachineNamePrefix** (string, default=`powerTuningStateMachine`): Allows you to customize the name of the state machine. Maximum 43 characters, only alphanumeric (plus `-` and `_`). The last portion of the `AWS::StackId` will be appended to this value, so the full name will look like `powerTuningStateMachine-89549da0-a4f9-11ee-844d-12a2895ed91f`. Note: `StateMachineName` has a maximum of 80 characters and 36+1 from the `StackId` are appended, allowing 43 for a custom prefix. Please note that the total execution time should stay below 300 seconds (5 min), which is the default timeout. You can easily estimate the total execution timeout based on the average duration of your functions. For example, if your function's average execution time is 5 seconds and you haven't enabled `parallelInvocation`, you should set `totalExecutionTimeout` to at least `num * 5`: 50 seconds if `num=10`, 500 seconds if `num=100`, and so on. If you have enabled `parallelInvocation`, usually you don't need to tune the value of `totalExecutionTimeout` unless your average execution time is above 5 min. If you have a sleep between invocations set, you should include that in your timeout calculations. diff --git a/README-SAR.md b/README-SAR.md index a7850d8..5c274d3 100644 --- a/README-SAR.md +++ b/README-SAR.md @@ -72,6 +72,7 @@ The CloudFormation template accepts the following parameters: * **logGroupRetentionInDays** (number, default=7): the number of days to retain log events in the Lambda log groups. Before this parameter existed, log events were retained indefinitely * **securityGroupIds** (list of SecurityGroup IDs): List of Security Groups to use in every Lambda function's VPC Configuration (optional); please note that your VPC should be configured to allow public internet access (via NAT Gateway) or include VPC Endpoints to the Lambda service * **subnetIds** (list of Subnet IDs): List of Subnets to use in every Lambda function's VPC Configuration (optional); please note that your VPC should be configured to allow public internet access (via NAT Gateway) or include VPC Endpoints to the Lambda service +* **stateMachineNamePrefix** (string, default=`powerTuningStateMachine`): Allows you to customize the name of the state machine. Maximum 43 characters, only alphanumeric (plus `-` and `_`). The last portion of the `AWS::StackId` will be appended to this value, so the full name will look like `powerTuningStateMachine-89549da0-a4f9-11ee-844d-12a2895ed91f`. Note: `StateMachineName` has a maximum of 80 characters and 36+1 from the `StackId` are appended, allowing 43 for a custom prefix. Please note that the total execution time should stay below 300 seconds (5 min), which is the default timeout. You can easily estimate the total execution timeout based on the average duration of your functions. For example, if your function's average execution time is 5 seconds and you haven't enabled `parallelInvocation`, you should set `totalExecutionTimeout` to at least `num * 5`: 50 seconds if `num=10`, 500 seconds if `num=100`, and so on. If you have enabled `parallelInvocation`, usually you don't need to tune the value of `totalExecutionTimeout` unless your average execution time is above 5 min. diff --git a/scripts/deploy-sar-app.yml b/scripts/deploy-sar-app.yml index 96affce..e1f756d 100644 --- a/scripts/deploy-sar-app.yml +++ b/scripts/deploy-sar-app.yml @@ -18,6 +18,7 @@ Resources: # permissionsBoundary: ARN # payloadS3Bucket: my-bucket # payloadS3Key: my-key.json + # stateMachineNamePrefix: my-custom-name-prefix Outputs: PowerTuningStateMachine: diff --git a/template.yml b/template.yml index efa1eef..6e66483 100644 --- a/template.yml +++ b/template.yml @@ -62,6 +62,13 @@ Parameters: Type: CommaDelimitedList Default: '' Description: List of Subnets to use in every Lambda function's VPC Configuration (optional). + stateMachineNamePrefix: + Type: String + MaxLength: 43 + AllowedPattern: ^[a-zA-Z0-9\-_]*$ + ConstraintDescription: Prefix must conform to StateMachineName requirements. + Default: 'powerTuningStateMachine' + Description: Prefix to the name of the StateMachine. The StackId will be appended to this value (optional). Conditions: UsePermissionsBoundary: !Not [!Equals [!Ref permissionsBoundary, '']] @@ -262,6 +269,11 @@ Resources: powerTuningStateMachine: Type: AWS::StepFunctions::StateMachine Properties: + StateMachineName: + Fn::Join: + - '-' + - - !Ref stateMachineNamePrefix + - !Select [2, !Split ['/', !Ref AWS::StackId]] RoleArn: !GetAtt statemachineRole.Arn DefinitionString: !Sub diff --git a/terraform/module/state_machine.tf b/terraform/module/state_machine.tf index 3550ea8..0709763 100644 --- a/terraform/module/state_machine.tf +++ b/terraform/module/state_machine.tf @@ -1,6 +1,6 @@ resource "aws_sfn_state_machine" "state-machine" { - name = var.lambda_function_prefix + name_prefix = var.lambda_function_prefix role_arn = aws_iam_role.sfn_role.arn definition = local.state_machine