Задача AWS CDK EventBridge ECS не может назначить общедоступный IP-адрес, даже если подсеть является общедоступной

Я создаю задачу ECS для запуска при запуске события EventBridge, но не могу назначить этой задаче общедоступный IP-адрес, который необходим для доступа к ECS для получения задачи. VPC, который я использую, имеет только общедоступные подсети.

Это соответствующий код:

const cluster = new ecs.Cluster(this, "default-cluster", {
  vpc,
  clusterName: `xxxxx`,
  enableFargateCapacityProviders: true,
});

const taskDefinition = new ecs.FargateTaskDefinition(
  this,
  `${process.type}-task`,
  {
    memoryLimitMiB: 512,
    cpu: 256,
    runtimePlatform: {
      cpuArchitecture: ecs.CpuArchitecture.X86_64,
      operatingSystemFamily: ecs.OperatingSystemFamily.LINUX,
    },
  }
);

taskDefinition
  .addContainer(`xxxxxxxx`, {
    image: ecs.ContainerImage.fromEcrRepository(repo, props.imageTag),
    containerName: `xxxxxx`,
  })
  .addPortMappings({
    containerPort: 3000,
  });

const releaseTask = new eventBridgeTargets.EcsTask({
  cluster,
  taskDefinition,
  taskCount: 1,
  launchType: ecs.LaunchType.FARGATE,
  subnetSelection: vpc.selectSubnets({
    subnetType: SubnetType.PUBLIC,
  }),
  assignPublicIp: true,
});

Я получаю следующую ошибку: Error: assignPublicIp should be set to true only for PUBLIC subnets

Что я делаю не так?


1
87
1

Ответ:

Решено

Свойство subnetSelection ожидает объект SubnetSelection , а вы передаете результат функции Vpc.selectSubets , которая принимает SubnetSelection и возвращает экземпляр SelectedSubnets.

Вместо этого передайте объект SubnetSelection напрямую:

subnetSelection: {
    subnetType: SubnetType.PUBLIC,
},

Я бы посоветовал правильно настроить ваш IDE/языковой сервер - он должен выделять для вас ошибки типа, подобные этой.