Как указать подсети при создании ecs.LoadBalancedFargateService - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь создать службу Fargate ECS на существующем VPC, но получаю следующую ошибку после запуска cdk deploy

CREATE_FAILED | AWS::ElasticLoadBalancingV2::LoadBalancer | exms-service/LB (exmsserviceLB259DA1C7) At least two subnets in two different Availability Zones must be specified (Service: AmazonElasticLoadBalancingV2; Status Code: 400; Error Code: ValidationError;

Правильно импортирован vpc и кластер ecsсоздает успешно в соответствии с логами облачной информации.ошибка возникает при создании балансировщика нагрузки

const vpc = ec2.VpcNetwork.import(this, "TB-DEV", {
      vpcId: 'vpc-xxxxxx',
      availabilityZones: ['eu-west-1G', 'eu-west-1b', 'eu-west-1c'],
      privateSubnetIds: ['subnet-xxxxxxx', 'subnet-xxxxx', 'subnet-xxxx', 'subnet-xxxxx', 'subnet-xxxxx', 'subnet-xxxxx']
//this is a list of 1 private and 1 public subnet on each of the specified availability zones
    })

const cluster = new ecs.Cluster(this, "TB-ECS-DEV", {
      clusterName: "TB-DEV",
      vpc: vpc,

    })

const repo = ecr.Repository.import(this, 'EXMS-REPO', {
      repositoryName: "expense-type-mapper-dev"
    })

new ecs.LoadBalancedFargateService(this, "EXMS", {
      cluster: cluster,
      image:ecs.ContainerImage.fromEcrRepository(repo),
    })

Я ожидал, что балансировщик нагрузки будет использовать подсети, указанные в определении VPC, но, похоже, этого не происходит.Нужно ли мне определять, какие подсети использовать где-то в определении LoadBalancedFargateService?

1 Ответ

1 голос
/ 11 апреля 2019

По умолчанию LoadBalancedFargateService создает балансировщик нагрузки приложения для Интернета, но вы не указываете общедоступные подсети при импорте.

Кроме того, при импорте VPC privateSubnetIds / publicSubnetIds должно точно соответствовать зонам доступности по длине и порядку.

const vpc = ec2.VpcNetwork.import(this, "TB-DEV", {
  vpcId: 'vpc-xxxxxx',
  availabilityZones: ['eu-west-1a', 'eu-west-1b', 'eu-west-1c'],
  publicSubnetIds: ['subnet-xxxxx', 'subnet-xxxxx', 'subnet-xxxxx'],
  privateSubnetIds: ['subnet-xxxxxxx', 'subnet-xxxxx', 'subnet-xxxx']
});

Другое решение заключается в использовании importFromContext, который будет выполнять вызов API для сбора правильной информации для вашего VPC:

const vpc = ec2.VpcNetwork.importFromContext(this, "TB-DEV", {
  vpcId: 'vpc-xxxxxx'
});
...