Description
Describe the bug
The example code provided in https://docs.aws.amazon.com/cdk/api/v2/python/aws_cdk.aws_stepfunctions_tasks/EcsEc2LaunchTarget.html is not functional. Although adding a default asg capacity provider works in the console, doing it in cdk returns an error if the capacity provider is not specified in the EcsRunTask parameters. I currently cannot find any way to add the capacity provider to the parameters.
Expected Behavior
My state machine to successfully execute an aws_stepfunctions_tasks.EcsRunTask with the EcsEc2LaunchTarget when I have defined a default capacity provider strategy for my cluster.
Current Behavior
The task receives an error from the cluster and cannot be started.
"cause": "No Container Instances were found in your cluster. (Service: AmazonECS; Status Code: 400; Error Code: InvalidParameterException; Request ID: cb76661d-7bb1-49ee-8fa7-8ba1feea5656; Proxy: null)",
"error": "ECS.InvalidParameterException",
"resource": "runTask.waitForTaskToken",
"resourceType": "ecs"
Reproduction Steps
cluster = ecs.Cluster(self, "Cluster", vpc=default_vpc.vpc)
capacity_provider = ecs.AsgCapacityProvider(
self,
"CapacityProvider",
auto_scaling_group=autoscaling_group,
spot_instance_draining=True,
)
cluster.add_asg_capacity_provider(capacity_provider, spot_instance_draining=True)
cluster.add_default_capacity_provider_strategy(
[
ecs.CapacityProviderStrategy(
capacity_provider=capacity_provider.capacity_provider_name,
base=10,
weight=100,
),
]
)
run_task = sfn_tasks.EcsRunTask(
self,
task.title().replace("_", ""),
cluster=cluster,
launch_target=sfn_tasks.EcsEc2LaunchTarget(),
task_definition=task_definition,
container_overrides=[
sfn_tasks.ContainerOverride(
container_definition=task_definition.default_container,
command=sfn.JsonPath.list_at(f"$.{command}"),
environment=env,
)
],
propagated_tag_source=PropagatedTagSource.TASK_DEFINITION,
result_path=result_path,
integration_pattern=sfn.IntegrationPattern.WAIT_FOR_TASK_TOKEN,
heartbeat_timeout=sfn.Timeout.duration(cdk.Duration.seconds(HEARTBEAT_TIMEOUT)),
task_timeout=sfn.Timeout.duration(cdk.Duration.minutes(120)),
).add_retry(
errors=[
"States.HeartbeatTimeout",
"States.Timeout",
"Ecs.ClientException",
"Ecs.SdkClientException",
"Ecs.ServerException",
],
interval=cdk.Duration.seconds(30),
jitter_strategy=sfn.JitterType.FULL,
)
Possible Solution
It would be helpful if it could be passed to the launch target in the same manner as placement constraints and placement strategies.
Additional Information/Context
No response
CDK CLI Version
Framework Version
No response
Node.js Version
18
OS
ubuntu-latest
Language
Python
Language Version
3.11
Other information
No response