【问题标题】:aws cdk ecs task scheduling specify existing securitygroupaws cdk ecs 任务调度指定现有安全组
【发布时间】:2020-03-22 20:25:29
【问题描述】:

在定义 ECS 任务计划时,我似乎找不到指定现有安全组的方法。关于可以使用 aws cdk 在哪里配置的任何指针?

在下面的代码 sn-p 中,您将看到我能够创建一个 cron,指定要调度的 docker 映像并通过指定现有集群和 vpc 来创建调度本身。但是,没有指定现有安全组的选项...是否可以指定现有安全组?

schedule_cron = scaling.Schedule.cron(minute=manifest['schedule']['minute'], 
                                                hour=manifest['schedule']['hour'], 
                                                day=manifest['schedule']['day'], 
                                                month=manifest['schedule']['month'], 
                                                year=manifest['schedule']['year'])

image_option = ecs_patterns.ScheduledFargateTaskImageOptions(image=img, 
                                                cpu=manifest["resources"]["cpu"], 
                                                memory_limit_mib=manifest["resources"]["memory"],
                                                log_driver=ecs.AwsLogDriver(log_group=log_group,
                                                                            stream_prefix=manifest["app_name"]),
                                                secrets=secrets,
                                                environment= env)

schedule_pattern = ecs_patterns.ScheduledFargateTask(self, f"scheduledtask{app_name}", 
                                                schedule= schedule_cron, scheduled_fargate_task_image_options=image_option, cluster=cluster, 
                                                desired_task_count=manifest["replica_count"], vpc=vpc)

【问题讨论】:

  • 看起来它不支持作为 cdk 中的一个功能...我提出的 GitHub 问题“目前不支持使用计划任务 (ec2/Fargate) 构造。我已将其标记为功能请求,但如果您想提交 PR 来解决此问题,我将非常乐意对其进行审核。” github.com/aws/aws-cdk/issues/5213

标签: aws-sdk amazon-cloudformation amazon-ecs aws-cdk


【解决方案1】:

ECS 模式尚不支持此功能。然而,底层结构确实如此。因此,您必须自己指定 TaskDefinition、Event 和 Event Target。使用 Event 指定计划,使用 Event Target 设置 SecurityGroup。

这是一个使用 TypeScript 的示例实现。请使用 aws_cdk.aws_events 和 aws_cdk.aws_events_targets 模块将此调整为 Python。

import aas = require('@aws-cdk/aws-applicationautoscaling');
import cdk = require('@aws-cdk/core');
import events = require("@aws-cdk/aws-events")
import event_targets = require("@aws-cdk/aws-events-targets");
import ec2 = require('@aws-cdk/aws-ec2');

const securityGroup = new ec2.SecurityGroup(this, "SecurityGroup", {
  vpc: vpc,
});

const task = new ecs.FargateTaskDefinition(this, "TaskDefinition", {
  family: "ScheduledTask",
  cpu: ..,
  memoryLimitMiB: ..,
});
task.addContainer("app_name", ...);

const rule = new events.Rule(this, "Rule", {
  description: "ScheduledTask app_name Trigger",
  enabled: true,
  schedule: aas.Schedule.rate(cdk.Duration.hours(1)),
  targets: [
    new event_targets.EcsTask({
      cluster: cluster,
      taskDefinition: task,
      securityGroup: securityGroup,
    }),
  ],
});

请注意,EcsTask 事件目标只允许一个安全组。这个问题前段时间在 GitHub 上提出:https://github.com/aws/aws-cdk/issues/3312

【讨论】:

    猜你喜欢
    • 2023-01-18
    • 2021-10-17
    • 2020-03-27
    • 2020-01-09
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多