自动化Opsworks:您如何执行食谱?

时间:2013-11-25 22:17:12

标签: amazon-web-services amazon-ec2 automation

我正在使用awscli尝试自动化部署过程(将菜谱更改为s3,点击更新菜谱,点击内容以运行收件人,输入我想要执行的食谱名称)。 / p>

我非常接近,但我找不到任何关于如何通过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在给定实例上执行配方的正确JSON架构是什么?

2 个答案:

答案 0 :(得分:5)

编辑:已修复示例,添加了解释

awscli元数据非常精巧,低/大写很重要。您只需将命名参数“Recipes”更改为“recipes”,您的命令就应该向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 :(得分:0)

由于在使用vanilla aws-cli时做OpsWorks有点冗长,我想出了一个非常好的包装脚本,特别是在创建OpsWorks配方的cron作业时。使用堆栈ID,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