cfn-signal UPDATE_ROLLBACK_COMPLETE状态且无法发出信号

问题描述 投票:1回答:1

有时,cfn-signal命令会崩溃并显示以下消息:

ValidationError:Stack arn:aws:cloudformation:eu-west-1:XXXXX:stack / XXX / XXXXX处于UPDATE_ROLLBACK_COMPLETE状态且无法发出信号

使用此命令:

/usr/local/bin/cfn-signal -e 0 \ 
  --stack arn:aws:cloudformation:eu-west-1:XXX:stack/XXX/XXXX \
  --resource AutoScalingGroup \
  --region eu-west-1

我不明白为什么CloudFormation状态是相关的?我相信正在等待生命周期事件的AutoScalingGroup?

当我手动完成实例生命周期时,没有问题:

aws autoscaling complete-lifecycle-action \
  --auto-scaling-group-name XXXX \
  --lifecycle-hook-name CodeDeploy-managed-automatic-launch-deployment-hook-XX \
  --instance-id i-XX \
  --lifecycle-action-result CONTINUE \
  --region eu-west-1

UserData脚本的一部分:

 UserData:
    Fn::Base64: !Sub |
      [...]
      # Setup CodeDeploy
      sudo /home/ubuntu/install-codedeploy-agent auto
      rm /home/ubuntu/install-codedeploy-agent

      # Install the files and packages from the metadata
      /usr/local/bin/cfn-init -v \
        --stack ${AWS::StackId} \
        --resource LaunchConfiguration \
        --region ${AWS::Region}

      # All done so signal success to CloudFormation
      /usr/local/bin/cfn-signal -e $? \
        --stack ${AWS::StackId} \
        --resource AutoScalingGroup \
        --region ${AWS::Region}

      # Start CodeDeploy agent
      sudo service codedeploy-agent start
      sudo service codedeploy-agent status

AutoScaling组定义:

AutoScalingGroup:
  Type: AWS::AutoScaling::AutoScalingGroup
  Properties:
    AvailabilityZones:
      Fn::GetAZs: !Ref AWS::Region
    LaunchConfigurationName: !Ref LaunchConfiguration
    MinSize: 1
    MaxSize: 2
    DesiredCapacity: 1
    TargetGroupARNs:
      - !Ref ElasticLoadBalancerTargetGroup
    HealthCheckType: ELB
    HealthCheckGracePeriod: 600 # in seconds
  CreationPolicy:
    ResourceSignal:
      Count: 1
      Timeout: PT15M # 15 minutes
  UpdatePolicy:
    AutoScalingRollingUpdate:
      PauseTime: PT15M # 15 minutes
      WaitOnResourceSignals: true
amazon-web-services amazon-ec2 amazon-cloudformation
1个回答
1
投票

据我所知,cfn-signal与自动缩放生命周期钩子完全无关。

其目的是向CloudFormation发出信号,表明给定的自动缩放组中的实例已准备就绪。当CloudFormation收到一定数量的成功信号时,它会认为ASG是CREATE_COMPLETEUPDATE_COMPLETE。如果由于模板中的一些其他问题而应该接收信号的堆栈已回滚,则cfn-signal将失败,因为其信号不再与_COMPLETE状态中的堆栈相关。

© www.soinside.com 2019 - 2024. All rights reserved.