AWS CLI events put-targets EcsParameters (structure)

I am trying to get the current Task Definition of an ECS Cluster then update the revision in the cloud bridge event target.

This is what I have so far:


james@LAPTOP:/mnt/c/Users/james$ target_id="xxx_hourly_cron"
james@LAPTOP:/mnt/c/Users/james$ aws events list-targets-by-rule --rule `echo $target_id` > rule-target.json
james@LAPTOP:/mnt/c/Users/james$ cat rule-target.json
{
    "Targets": [
        {
            "Id": "xxx_hourly_cron",
            "Arn": "arn:aws:ecs:eu-west-2:000000000000:cluster/xxx-cluster",
            "RoleArn": "arn:aws:iam::000000000000:role/ecsEventsRole",
            "EcsParameters": {
                "TaskDefinitionArn": "arn:aws:ecs:eu-west-2:000000000000:task-definition/xxx-cron:55",
                "TaskCount": 1,
                "EnableECSManagedTags": false,
                "EnableExecuteCommand": false,
                "PropagateTags": "TASK_DEFINITION"
            }
        }
    ]
}
james@LAPTOP:/mnt/c/Users/james$ aws events put-targets --rule `echo $target_id` --targets --EcsParameters jsonfile?

The last command is where I am struggling: within the AWS docs I am not to sure what it means by structure I have tried json and I have tried to escape it. Here is the docs I am looking at: https://docs.aws.amazon.com/cli/latest/reference/events/put-targets.html


Solution 1:

With AWS CLI commands, you can often replace the majority of the arguments supplied to a command with a single JSON file using the --cli-input-json argument. This can make it far easier to work with complex structures as input arguments to CLI commands.

In the above example, you would modify the rule-target.json output to become an input (rule-target-input.json) for the next using something like the following:

{
    "Rule": "xxx_hourly_cron",
    "Targets": [
        {
            "Id": "xxx_hourly_cron",
            "Arn": "arn:aws:ecs:eu-west-2:000000000000:cluster/xxx-cluster",
            "RoleArn": "arn:aws:iam::000000000000:role/ecsEventsRole",
            "EcsParameters": {
                "TaskDefinitionArn": "arn:aws:ecs:eu-west-2:000000000000:task-definition/xxx-cron:55",
                "TaskCount": 1,
                "EnableECSManagedTags": false,
                "EnableExecuteCommand": false,
                "PropagateTags": "TASK_DEFINITION"
            }
        }
    ]
}

And then feeding that into the input using something like the following:

aws put-targets --cli-input-json file://rule-target-input.json