gpt4 book ai didi

aws-cloudformation - 将应用程序自动缩放组与 ELB 运行状况检查结合使用

转载 作者:行者123 更新时间:2023-12-03 07:44:45 27 4
gpt4 key购买 nike

是否有人成功使用应用程序自动缩放组进行 ELB 运行状况检查。它一遍又一遍地替换实例。有没有办法防止这种情况发生?

我的模板看起来像这样:

Resources:
ECSAutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
AvailabilityZones:
- Fn::Select:
- '0'
- Fn::GetAZs:
Ref: AWS::Region
- Fn::Select:
- '1'
- Fn::GetAZs:
Ref: AWS::Region
- Fn::Select:
- '2'
- Fn::GetAZs:
Ref: AWS::Region
VPCZoneIdentifier:
- Fn::ImportValue: !Sub ${EnvironmentName}-PrivateEC2Subnet1
- Fn::ImportValue: !Sub ${EnvironmentName}-PrivateEC2Subnet2
- Fn::ImportValue: !Sub ${EnvironmentName}-PrivateEC2Subnet3
HealthCheckGracePeriod: !Ref ASGHealthCheckGracePeriod
HealthCheckType: !Ref ASGHealthCheckType
LaunchTemplate:
LaunchTemplateId: !Ref ECSLaunchTemplate
Version: 1
MetricsCollection:
- Granularity: 1Minute
ServiceLinkedRoleARN:
!Sub arn:aws:iam::${AWS::AccountId}:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling
DesiredCapacity: !Ref ASGDesiredCapacity
MinSize: !Ref ASGMinSize
MaxSize: !Ref ASGMaxSize
TargetGroupARNs:
- Fn::ImportValue: !Sub ${EnvironmentName}-WebTGARN
Fn::ImportValue: !Sub ${EnvironmentName}-DataTGARN
Fn::ImportValue: !Sub ${EnvironmentName}-GeneratorTGARN
TerminationPolicies:
- OldestInstance

启动模板如下所示:

ECSLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateName: ECSLaunchtemplate
LaunchTemplateData:
ImageId: !FindInMap [AWSRegionToAMI, !Ref "AWS::Region", AMI]
InstanceType: !Ref InstanceType
SecurityGroupIds:
- Fn::ImportValue: !Sub ${EnvironmentName}-ECSInstancesSecurityGroupID
IamInstanceProfile:
Arn:
Fn::ImportValue:
!Sub ${EnvironmentName}-ecsInstanceProfileARN
Monitoring:
Enabled: true
CreditSpecification:
CpuCredits: standard
TagSpecifications:
- ResourceType: instance
Tags:
- Key: "keyname1"
Value: "value1"
KeyName:
Fn::ImportValue:
!Sub ${EnvironmentName}-ECSKeyPairName
UserData:
"Fn::Base64": !Sub
- |
#!/bin/bash
yum update -y
yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
yum update -y aws-cfn-bootstrap hibagent
/opt/aws/bin/cfn-init -v --region ${AWS::Region} --stack ${AWS::StackName} --resource ECSLaunchTemplate --region ${AWS::Region}
/opt/aws/bin/cfn-signal -e $? --region ${AWS::Region} --stack ${AWS::StackName} --resource ECSAutoScalingGroup
/usr/bin/enable-ec2-spot-hibernation
echo ECS_CLUSTER=${ECSCluster} >> /etc/ecs/ecs.config
PATH=$PATH:/usr/local/bin
- ECSCluster:
Fn::ImportValue:
!Sub ${EnvironmentName}-ECSClusterName

负载均衡器配置如下所示:

ApplicationLoadBalancerInternet:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: !Sub ${EnvironmentName}-${Project}-ALB-Internet
IpAddressType: !Ref ELBIpAddressType
Type: !Ref ELBType
Scheme: internet-facing
Subnets:
- Fn::ImportValue:
!Sub ${EnvironmentName}-PublicSubnet1
- Fn::ImportValue:
!Sub ${EnvironmentName}-PublicSubnet2
- Fn::ImportValue:
!Sub ${EnvironmentName}-PublicSubnet3
SecurityGroups:
- Fn::ImportValue:
!Sub ${EnvironmentName}-ALBInternetSecurityGroupID

如前所述,它与 EC2 Healthchecks 配合使用效果良好,但当我切换到 ELB Healthchecks 时,实例将被耗尽,并且 ASG 会启动一个新实例。

感谢A

最佳答案

  • 我会这样解决问题:
    1. 删除此堆栈。
    2. 编辑您的模板并将 ASG 运行状况检查类型更改为 ELB(目前)。
    3. 从 CLI 或控制台创建新堆栈。我推荐 CLI,因为您可能需要重新创建它,而且它比控制台更简单/更快。 最重要的一步是当堆栈失败时启用“禁用回滚”功能,否则,您将无法找出失败的原因
    4. 我相信您还将创建一些 IAM 资源作为此模板的一部分,因此 CLI 命令示例如下以供您快速引用: aws cloudformation create-stack --stack-name Name-of-your-stack --template-body file://template.json --tags Key=Name,Value=Your_Tag_Value --profile default --region region --capabilities CAPABILITY_NAMED_IAM --disable-rollback yes
    5. 有关 CAPABILITY_NAMED_IAM 要求的更多信息,请参阅 this所以回答。
    6. 现在,当您创建堆栈时,它仍然会失败,但现在我们可以对其进行故障排除。我们在步骤 2 中将运行状况检查类型保留为 ELB 的原因是,我们实际上希望 ASG 替换运行状况检查失败的实例,并且我们可以从控制台的 ASG 的“事件历史记录选项卡”中找到原因。
    7. 您很有可能会看到一条比 CloudFormation 返回的消息更有意义的消息。
    8. 现在您已收到该错误消息,请将 ASG 的运行状况检查类型从控制台更改为 EC2,因为我们不希望 ASG 开始 EC2 实例的“启动和终止”循环 .
    9. 现在,登录您的 EC2 实例并查找访问日志,以查找来自 ELB 运行状况检查的命中。在 httpd 中,成功的运行状况检查会收到 HTTP 408。
    10. 另请注意,如果 ELB 健康检查类型为 TCP:80,则您的服务器上不存在任何端口冲突,如果您选择了 HTTP:80,则您已指定路径/​​文件以及 ping 目标。
    11. 由于您的脚本也包含一些用户数据,因此还请查看/var/log/cfn-init.log 和其他条目以了解任何错误消息。一个简单的选项是 grep error /var/log/*
    12. 现在,您只需确保 ELB 运行状况检查成功并且 ELB 后面的实例“正常运行”,最重要的步骤是记录所有故障排除步骤,因为您永远不会要知道,您尝试过的众多步骤中,哪一步实际上修复了此健康检查。
    13. 一旦找到原因,只需将其放入模板中即可。我发现许多模板在第 8 步出错。
    14. 此外,不要错过再次将 ASG 运行状况检查更改为 ELB。

关于aws-cloudformation - 将应用程序自动缩放组与 ELB 运行状况检查结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52782997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com