我正在使用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架构是什么?
答案 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񲭋
答案 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