在heat中,一個instance的建立成功信号是在這個instance狀态成為active之後發出的,這時候user-data可能還沒有執行。但是heat已經認為這個resource建立成功了,開始排程下一個resource的建立。
如果我們要建立一個webserver,這個webserver需要在databaseServer執行完user-data之後才開始建立,就需要使用AWS的waitcondition通訊機制。
整個流程如下:
Create WaitHandler ->
WaitHandler Done ->
Create "Database" (Dependon WaitHandler) ->
Database Done ->
Create "WaitCondition" (Dependon Database) ->
Wait for Database signal ->
Database send signal to WaitHandler ->
WaitCondition Done ->
Create WebServer (Dependon WaitCondition)->
WebServer Done
Template例子:
WaitHandle: {Type: ‘AWS::CloudFormation::WaitConditionHandle‘}
WaitCondition:
Type: AWS::CloudFormation::WaitCondition
DependsOn: WikiDatabase
Properties:
Handle: {Ref: WaitHandle}
Count: ‘1‘
Timeout: ‘600‘
Database:
Type: AWS::EC2::Instance
Properties:
UserData:
Fn::Base64:
Fn::Join:
- /opt/aws/bin/cfn-signal -e 0 -r "Wiki server setup complete" ‘
- {Ref: WaitHandle}
- ‘‘‘
‘
WebServer:
DependsOn: WaitCondition
