2

我已經爲各種項目使用了cfn-hup,並且針對cfn-hup遵循了AWS documentation。該網頁上記載,有下面列出的觸發類型:cfn-hup「on.demand」Elastic Beanstalk中的觸發器

  • post.add
  • post.update
  • post.remove

我用這些巨大的成功。最近,我正在審閱用於學習目的的Elastic Beanstalk CloudFormation模板。 Elastic Beanstalk使用CloudFormation來配置和引導資源。他們使用CFN-HUP,但在它們的配置文件中一個奇怪的觸發類型:

"\/etc\/cfn\/hooks.d\/aws-eb-command-handler.conf":{ 
    "content":{ 
    "Fn::Join":[ 
     "", 
     [ 
     "[aws-eb-command-handler]", 
     "\n", 
     "triggers=on.command", 
     "\n", 
     "path=ElasticBeanstalkCommand-", 
     "AWSEBAutoScalingGroup", 
     "\n", 
     "action=commandWrapper.py", 
     "\n" 
     ] 
    ] 
    } 
}, 

正如你所看到的,他們有一個「on.command」觸發類型。也許我是盲人,但我無法在任何地方找到記錄。這是否只允許使用Elastic Beanstalk的特殊內部觸發器類型?或者這只是另一個無證的功能,如果有的話,它是做什麼的?

回答

1

這個鉤子類型的確是一個沒有記錄的類型。

on.command是CloudFormation將cfn-hup命令綁定到SQS隊列的方式。

要使用它配置您的SQS隊列的主要部分:在消息然後

[main] 
sqs_url=https://sqs.eu-west-1.amazonaws.com/XXXXXXXX/cfn-hook-trigger 

到隊列中,您的命令將在實例上執行。消息格式如下:

{ 
"InvocationId": "unique", 
"DispatcherId": "some value, participating in message and leader elections", 
"Expiration": "1433617216000", //timestamp 
"CommandName": "cfn-auto-reloader-hook", //or any other hook name 
"ResultQueue": "https://eu-west-1.queue.amazonaws.com/...", // mandatory if hook.send_result was 
initialized 
"Data": null, //will populate ENV[CMD_DATA] env var; optional 
"EventHandle": null //will populate ENV[EVENT_HANDLE] env var; optional 
} 

如果send_result =真對於所選擇的鉤,然後指定ResultQueue用於轉儲在執行結果的消息格式如下:

{ 
"DispatcherId" : "copied from the inbound message", 
"InvocationId" : "copied from the inbound message", 
"CommandName" : "copied from the inbound message", 
"Status" : "FAILURE" | "SUCCESS", 
"ListenerId" : "FQDN or AWS instance id if applicable", 
"Data": "STDOUT", // data > 1Kb is treated as FAILURE 
"Message": "STDERR, if $? != 0" //or first 100 bytes of STDOUT if it was > 1Kb 
} 

此處的信息從2015年6月的python sources開採。

實際上沒有進行測試。

此外,AWS可能已經改變了行爲,因爲它甚至沒有記錄。