尝试使用以下Cloudformation资源定义创建ECS服务:
MyUIService:
Type: AWS::ECS::Service
Properties:
Cluster: !ImportValue MyClusterName
DesiredCount: 1
LaunchType: EC2
LoadBalancers:
- !ImportValue ALBDemo
Role: !Ref MyServiceRole
ServiceName: my-ui-service
ServiceRegistries:
- arn:aws:servicediscovery:eu-west-1:2398942890842:service/srv-ohc098mdj55yesez7
TaskDefinition: !ImportValue MyTaskArn
但是它失败并出现以下错误:
LoadBalancers属性的值必须是对象列表
但是我正在定义一个列表(尽管有一个元素)。
该列表包含ALB的arn的导出。
确切的语法是什么?
编辑:这是与错误似乎不一致的相关documentation:
LoadBalancers
要与集群关联的负载均衡器对象列表。如果指定Role属性,则必须将LoadBalancers指定为 好。有关可以使用的负载均衡器数量的信息 指定每个服务,请参阅Amazon Elastic中的服务负载平衡 容器服务开发人员指南。 必需:有条件 类型:Amazon Elastic Container Service服务负载平衡器列表
答案 0 :(得分:2)
我看到您从AWS templates复制了相同的模板。
[HttpPost]
public async Task<IActionResult> Post([FromBody] ScheduleModel schedule)
{
_logger.LogInformation(JsonConvert.SerializeObject(schedule));
var recurringSchedule = new AcmeRecurringSchedule
{
Description = schedule.Description,
CronExpression = schedule.CronExpression,
ScheduleId = schedule.JobIdentifier,
ScheduleGroup = schedule.Group
};
var schedulerUrl = new Uri($"{_massTransitSettings.Protocol}://{_massTransitSettings.RabbitMqHost}/scheduler");
var endpoint = await _busControl.GetSendEndpoint(schedulerUrl);
await endpoint.ScheduleRecurringSend(schedulerUrl, recurringSchedule, new ScheduledRestInvocationMessage()
{
Url = new Uri("http://wwww.google.com")
});
return Ok(schedule.Key);
}
请注意,LoadBalancers并没有真正直接引用负载均衡器。它引用目标组。鉴于命名,这很奇怪,但是如果您通过Web控制台浏览,您将得出相同的结论。
如果您查看AWS documentation:
MyUIService:
Type: AWS::ECS::Service
Properties:
Cluster: !ImportValue MyClusterName
DesiredCount: 1
LaunchType: EC2
LoadBalancers:
- ContainerName: simple-app
ContainerPort: '80'
TargetGroupArn: !Ref 'ECSTG'
Role: !Ref MyServiceRole
ServiceName: my-ui-service
ServiceRegistries:
- arn:aws:servicediscovery:eu-west-1:2398942890842:service/srv-ohc098mdj55yesez7
TaskDefinition: !ImportValue MyTaskArn
这些是必需,但是您永远无法通过导入负载均衡器来获得它们。
如果考虑到此问题,可以通过引用目标组而不是负载平衡器来为多个目标组共享相同的ALB,这对成本有利。因此,总而言之,引用目标组是有意义的,但是属性名称的确确实具有误导性。