Я пытаюсь развернуть образ ECS в существующем балансировщике нагрузки приложений с помощью CDK. Мы хотим развернуть это на существующих ALB и VPC.
// Reference existing ALB
const alb =
elbv2.ApplicationLoadBalancer.fromApplicationLoadBalancerAttributes(
this,
"ImportedALB",
{
securityGroupId: "sg-XXXXXXXX",
loadBalancerArn:
"arn:aws:elasticloadbalancing:us-east-1:XXXXXXX:listener/app/alb-appliance/XXXXX/XXXXX",
}
);
// Create higher level construct containing the Fargate service with a load balancer
new ecspatterns.ApplicationLoadBalancedFargateService(
this,
"amazon-ecs-sample"
{
loadBalancer: alb,
cluster: cluster,
circuitBreaker: {
rollback: true,
},
memoryLimitMiB: 512,
cpu: 256,
assignPublicIp: false,
desiredCount: 1,
taskImageOptions: {
image: image,
containerPort: 80,
logDriver: ecs.LogDrivers.awsLogs({
streamPrefix: id,
logRetention: logs.RetentionDays.ONE_YEAR,
}),
},
}
);
Когда я запускаю разницу CDK, я вижу следующее сообщение об ошибке:
Error: Can only call addTargets() when using a constructed Load Balancer or an imported Load Balancer with specified vpc; construct a new TargetGroup and use addTargetGroup
at ApplicationListener.addTargets (C:\Users\Documents\GitHub\cdk-workshop-ts\node_modules\aws-cdk-lib\aws-elasticloadbalancingv2\lib\alb\application-listener.js:1:5736)
at new ApplicationLoadBalancedServiceBase (C:\Users\Documents\GitHub\cdk-workshop-ts\node_modules\aws-cdk-lib\aws-ecs-patterns\lib\base\application-load-balanced-service-base.js:1:3657)
at new ApplicationLoadBalancedFargateService (C:\Users\Documents\GitHub\cdk-workshop-ts\node_modules\aws-cdk-lib\aws-ecs-patterns\lib\fargate\application-load-balanced-fargate-service.js:1:601)
at new ECSServiceStack (C:\Users\Documents\GitHub\cdk-workshop-ts\lib\cdk-workshop-ts-stack.ts:43:5)
at Object.<anonymous> (C:\Users\Documents\GitHub\cdk-workshop-ts\bin\cdk-workshop-ts.ts:7:1)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Module.m._compile (C:\Users\Documents\GitHub\cdk-workshop-ts\node_modules\ts-node\src\index.ts:1618:23)
at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
at Object.require.extensions.<computed> [as .ts] (C:\Users \Documents\GitHub\cdk-workshop-ts\node_modules\ts-node\src\index.ts:1621:12)
Какие настройки мне нужно изменить, чтобы устранить это сообщение об ошибке?
Я использую ApplicationLoadBalancedFargateService с этим образом ECS.
Также вы пропустили фактическое сообщение об ошибке. Вы предоставили трассировку стека.
Я добавил код, использующий ALB, и обновил сообщение об ошибке, чтобы правильно отображать исходное сообщение.
Он сообщает вам, что не знает, на каком VPC находится балансировщик нагрузки. Поэтому он не может создать кластер, службу и задачу в нужном VPC, где балансировщик нагрузки может получить к ним доступ.
Вам следует указать свой VPC в fromApplicationLoadBalancerAttributes
. Например:
const alb =
elbv2.ApplicationLoadBalancer.fromApplicationLoadBalancerAttributes(
this,
"ImportedALB",
{
securityGroupId: "sg-XXXXXXXX",
loadBalancerArn:
"arn:aws:elasticloadbalancing:us-east-1:XXXXXXX:listener/app/alb-appliance/XXXXX/XXXXX",
vpc: ec2.Vpc.fromLookup(this, "ImportedVpc", { vpcName: "my-vpc" })
}
);
Я добавил vpc из поиска и теперь вижу это: «Ошибка: невозможно получить значение от поставщика контекста vpc-provider, поскольку учетная запись/регион не указаны на уровне стека». Учетная запись и регион уже указаны в стеке.
Можете ли вы опубликовать код, вызывающий ошибку (как вы используете импортированный ALB?) и полное сообщение об ошибке?