AWS Cloudformation - WaitCondition

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS Cloudformation - WaitCondition相关的知识,希望对你有一定的参考价值。

前面简单的学习了一下 Help scripts,他主要使用场景在于EC2和Auto Scaling里面安装配置各种服务和程序,然后我们通过creationpolicy 来获取cfn-signal脚本发送的信号。类似的,如果我们需要控制其他资源之间的优先顺序,我们一般使用dependson 和 waitcondition 来实现。 dependson本身可以实现创建的顺序,但是他并不管成功与否。waitcondition的使用可以暂时停止整个stack的创建,直到获取了成功的信号才会继续

他的官方文档在这里
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html

那么如何使用呢?下面是一个总结:

  1. wait condition本身就是一个resource,而不是像creationpolicy 只是一个resource的属性。
  2. 我们可以通过timeout来设置超时时间,最长可以是12个小时
  3. 我们通过dependson 属性来指定依赖关系,比如我可以指定在成功创建RDS之后,才能创建EC2来访问数据库
  4. Wait Handler 会创建一个 presigned URL,这个URL用来接收信号。因为他本身就是resource,我们可以通过内置函数获取到这个URL,甚至手动通过http 的POST 的方法发送信号
  5. wait condition的结果无非三种,获取所有的成功信号;超时;获取到失败的信号

下面直接通过一个例子来说明

AWSTemplateFormatVersion: ‘2010-09-09‘
Mappings:
  RegionMap:
    us-east-1:
      AMI: ami-0ff8a91507f77f867
    us-west-1:
      AMI: ami-0bdb828fd58c52235
    eu-west-1:
      AMI: ami-047bb4163c506cd98
    ap-northeast-1:
      AMI: ami-06cd52961ce9f0d85
    ap-southeast-1:
      AMI: ami-08569b978cc4dfa10
Resources:
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      UserData:
        Fn::Base64: !Ref myWaitHandle
      ImageId:
        Fn::FindInMap:
        - RegionMap
        - Ref: AWS::Region
        - AMI
  myWaitHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
    Properties: {}
  myWaitCondition:
    Type: AWS::CloudFormation::WaitCondition
    DependsOn: Ec2Instance
    Properties:
      Handle: !Ref myWaitHandle
      Timeout: ‘4500‘
Outputs:
  ApplicationData:
    Value: !GetAtt myWaitCondition.Data
    Description: The data passed back as part of signalling the WaitCondition.

执行效果

技术图片

技术图片

技术图片

以上是关于AWS Cloudformation - WaitCondition的主要内容,如果未能解决你的问题,请参考以下文章

将现有 AWS 资源整合到 CloudFormation 堆栈中

AWS Cloudformation的相关概念

CloudFormation - 将标签应用于其他 AWS 资源

AWS CloudFormation:Cognito LambdaTrigger CustomEmailSender - 属性“AWS CloudFormation 目前不支持。”和 CDK 的使用

AWS学习笔记--利用CloudFormation管理AWS资源

AWS — AWS CloudFormation