Próbuję utworzyć moduł równoważenia obciążenia aplikacji w CloudFormation, z grupą docelową, która przekazuje ruch do instancji EC2. Oto odnośny fragment, gdzie ELBSubnets, ECSCluster, taskdefinition i VpcId są przekazywane jako parametry:Tworzenie grupy docelowej ALB w CloudFormation
"EcsElasticLoadBalancer" : {
"Type" : "AWS::ElasticLoadBalancingV2::LoadBalancer",
"Properties" : {
"Subnets" : { "Ref" : "ELBSubnets" },
"SecurityGroups": [
{ "Ref": "ELBAccessSecurityGroup" }
]
}
},
"LoadBalancerListener": {
"Type": "AWS::ElasticLoadBalancingV2::Listener",
"Properties": {
"DefaultActions": [{
"Type": "forward",
"TargetGroupArn": { "Ref": "TargetGroup" }
}],
"LoadBalancerArn": { "Ref": "EcsElasticLoadBalancer" },
"Port": 80,
"Protocol": "HTTP"
}
},
"TargetGroup": {
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
"Properties": {
"Name": { "Fn::Join": [ "-", [ { "Ref": "AWS::StackName" }, "TargetGroup" ] ] },
"Port": 80,
"Protocol": "HTTP",
"VpcId": { "Ref": "VpcId" }
},
"DependsOn": [ "EcsElasticLoadBalancer" ]
},
"service": {
"Type": "AWS::ECS::Service",
"Properties" : {
"Cluster": { "Ref": "ECSCluster" },
"DesiredCount": "1",
"LoadBalancers": [
{
"ContainerName": "main-app",
"ContainerPort": 3000,
"TargetGroupArn": { "Ref": "TargetGroup" }
}
],
"Role" : {"Ref":"ECSServiceRole"},
"TaskDefinition" : {"Ref":"taskdefinition"}
}
},
"ECSServiceRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"ecs.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
]
}
]
},
"Path": "/",
"Policies": [
{
"PolicyName": "ecs-service",
"PolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:Describe*",
"elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
"elasticloadbalancing:RegisterInstancesWithLoadBalancer",
"ec2:Describe*",
"ec2:AuthorizeSecurityGroupIngress"
],
"Resource": "*"
}
]
}
}
]
}
}
otrzymuję następujący błąd podczas tworzenia usługi:
grupy docelowej z targetGroupArn arn : aws: elasticloadbalancing: us-east-1: xxxxxxxx: targetgroup/AlbServiceStack-TargetGroup/6ba9c037c26cdb36 nie ma powiązanego systemu równoważenia obciążenia.
Czego mi brakuje? W dokumentacji nie ma sposobu na określenie modułu równoważenia obciążenia dla grupy docelowej.
DependsOn Atrybut: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html – lasec0203
Dla mnie Kluczem było to, że 'AWS :: ECS :: Service' musi mieć' DependsOn' z obydwoma 'LoadBalancerListener' * i * grupa' AWS :: ElasticLoadBalancingV2 :: TargetGroup' musi mieć 'DependsOn' z' EcsElasticLoadBalancer', którą możesz nie przywołuj swojej podwójnej odpowiedzi. Proponuję raczej użyć oficjalnego dokumentu AWS PolicyDocument 'arn: aws: iam :: aws: policy/service-role/AmazonEC2ContainerServiceRole', zamiast tworzyć własne. – Pete