通过用于远程启动类型任务的云形成为云计算事件规则创建"目标"

tan*_*nvi 11 amazon-web-services amazon-ecs aws-fargate

我正在尝试在我的CloudFormation模板中创建一个具有以下EcsParameters的计划任务(CloudWatch Events Rule):

EcsParameters:
        LaunchType: FARGATE
        NetworkConfiguration: 
          AwsVpcConfiguration:
            AssignPublicIp: !Ref PublicIpAssignment
            SecurityGroups:
              - !Ref EcsSecurityGroups
            Subnets:
              - !Ref SubnetName
        TaskCount: 1
        TaskDefinitionArn: !Ref TaskDefinitionOne
Run Code Online (Sandbox Code Playgroud)

我的ECS CLuster是在Fargate而不是EC2上启动的,我没有运行服务(用例不需要长时间运行的过程,直接从事件规则中调度任务.)

每当我运行此模板(使用LaunchTypeNetworkConfiguration)时,堆栈创建失败,出现此错误:

遇到不受支持的属性NetworkConfiguration


作为替代方案,我还尝试从AWS CLI启动计划任务,但似乎网络配置和启动类型选项也不可用:

参数验证失败:Targets [0]中的未知参数.EcsParameters:"LaunchType"必须是以下之一:TaskDefinitionArn,TaskCount


根据此页面上的AWS文档本身,我应该能够指定LaunchTypeNetworkConfiguration在我EcsParameters的部分TargetsProperties的的AWS::Events::Rule资源.

有什么我可以尝试的可行吗?

tan*_*nvi 2

经过一天的研究,AWS 似乎仍然没有通过 CloudFormation 发布对此的支持。然而,这里有一个替代方案,可以通过aws events put-targetscli 上的命令运行。

此方法对于旧版本的 cli 失败。运行此更新: pip install awscli --upgrade --user 这是我现在使用的版本:aws-cli/1.16.9 Python/2.7.15 Darwin/17.7.0 botocore/1.11.9

使用aws events put-targets --rule <value> --targets <value>命令。确保您的集群上已定义规则。如果没有,您可以使用aws events put-rulecmd 来完成此操作。请参阅AWS 文档以了解 put-ruleput-targets

下面给出了文档中的规则示例:

aws events put-rule --name "DailyLambdaFunction" --schedule-expression "cron(0 9 * * ? *)"
Run Code Online (Sandbox Code Playgroud)

对我有用的 put-targets 命令是这样的:

aws events put-targets --rule cli-RS-rule --targets '{"Arn": "arn:aws:ecs:1234/cluster/clustername","EcsParameters": {"LaunchType": "FARGATE","NetworkConfiguration": {"awsvpcConfiguration": {"AssignPublicIp": "ENABLED", "SecurityGroups": [ "sg-id1233" ], "Subnets": [ "subnet-1234" ] }},"TaskCount": 1,"TaskDefinitionArn": "arn:aws:ecs:1234:task-definition/taskdef"},"Id": "sampleID111","RoleArn": "arn:aws:iam:1234:role/eventrole"}'
Run Code Online (Sandbox Code Playgroud)