2013-11-25 22 views
4

我正在使用awscli嘗試自動執行部署過程(將cookbook更改上傳到s3,單擊更新食譜的東西,單擊東西運行recipie,輸入我想要執行的食譜的名稱)。自動化Opsworks:你如何執行食譜?

我真的很接近,但我找不到任何關於如何通過awscli在opsworks中實際執行給定食譜的任何信息。我想,這一定是非常接近更新定製食譜:

$ aws opsworks create-deployment --command "{\"Name\":\"update_custom_cookbooks\"}" --stack-id xxxxx --instance-ids xxxxxxxxx 
xxxxxxxx #deployment id 

文檔沒有告訴我是什麼格式的「execute_recipes」命令:http://docs.aws.amazon.com/cli/latest/reference/opsworks/create-deployment.html

它發送了一堆猜測和後使用光榮精闢「的無效值」,SerializationException和ValidationExceptions我已經推斷出以下可能接近我想要的東西:

$ aws opsworks create-deployment --command "{\"Name\":\"execute_recipes\", \"Args\":{\"Recipes\":[\"book::recipe\"]}}" --stack-id xxxxxx --instance-ids xxxxxxxx                                 
A client error (ValidationException) occurred 

是什麼讓Opsworks到EXECUT正確的JSON模式e給定實例中的配方?

回答

5

編輯:例如固定的,說明加入

awscli元數據是非常finnicky和下/上殼體的事項。您只需將命名參數「食譜」更改爲「食譜」,並且您的命令應向AWS發送新的部署命令。

aws opsworks create-deployment --stack-id xxxx --command '{ "Name": "execute_recipes", "Args": {"recipes": ["book:rec"]}}' --instance-ids xxxx 

更多討論: https://forums.aws.amazon.com/thread.jspa?messageID=469835&#469835

+1

JSON格式是區分大小寫的,你張貼不起作用。然而,您的嘗試導致我與API的謎語大師進行了另一次探索性對話,並通過玩弄案例發現了正確的模式。命名的參數在傳遞給命令時是小寫的,但傳遞關於該命令的元數據在Capitals中。 –

0

既然做OpsWorks是一個有點冗長,使用香草AWS-CLI時,我想出了一個包裝腳本創建OpsWorks食譜cron作業時,工程相當不錯更是如此。使用堆棧標識,opsworks實例ID以及所有這些功能可以節省您執行查找的繁瑣任務。

https://github.com/ardeearam/opsworks_local

# Run custom recipe to current instance 
$ ruby opsworks_local.rb -r mycookbook::jump_high 

# Deploy all applications to current instance 
$ ruby opsworks_local.rb -c deploy 

# Invoke deploy on another server instance 
$ ruby opsworks_local.rb -c deploy -i i-7f9811b1 

# Update custom cookbook 
$ ruby opsworks_local.rb -c update_custom_cookbooks