Erstellen eines ALB Zielgruppe in CloudFormation
Ich versuche, eine Anwendung zu erstellen Load Balancer in der CloudFormation, mit einer Zielgruppe, leitet den Verkehr auf EC2-Instanzen. Hier ist der entsprechende Codeausschnitt, wo ELBSubnets, ECSCluster, taskdefinition, und VpcId übergeben als Parameter:
"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": "*"
}
]
}
}
]
}
}
Bekomme ich die folgende Fehlermeldung beim erstellen der service:
Zielgruppe mit targetGroupArn arn:aws:elasticloadbalancing:us-east-1:xxxxxxxx:Zielgruppe/AlbServiceStack-Zielgruppe/6ba9c037c26cdb36 nicht über einen zugeordneten load balancer.
Was bin ich? In der Dokumentation scheint es nicht zu sein, ein Weg, um geben Sie einen load balancer für die Zielgruppe.
InformationsquelleAutor MungeWrath | 2016-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe es funktioniert - das problem war zweifach:
"elasticloadbalancing:DeregisterTargets"
"elasticloadbalancing:RegisterTargets"
"DependsOn": [ "LoadBalancerListener" ]
als zusätzliches Attribut.Aktualisierte Vorlage sieht wie folgt aus:
Für mich der Schlüssel war, dass die
AWS::ECS::Service
muss eineDependsOn
mit beidenLoadBalancerListener
und dieAWS::ElasticLoadBalancingV2::TargetGroup
mussDependsOn
mitEcsElasticLoadBalancer
, die Sie nicht rufen Sie in Ihrem zweifache Antwort. Also, ich schlage vor, Sie verwenden die offiziellen AWS PolicyDocumentarn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole
anstatt Ihre eigenen erstellen.InformationsquelleAutor MungeWrath