因此,我目前正在编写大量基础设施自动化内容,主要围绕 Cloudformation,并且我有一个用于管理 CF 部署的包装器/框架工具(Sceptre)。我遇到了一个不受 CF 支持但对于完成任务必不可少的任务,而且我厌倦了在任务中途添加手动干预步骤。因此,我想要一种在运行特定命令时触发命令的方法。例如:
sceptre create-stack example mystack
当有人运行这个命令时,我会触发一个 aws cli 命令。
aws module command --option=lol
谢谢。
编辑:如果有人有 Linux 原生的方式来执行此操作,请提供,我想了解完成此任务的多种方法。
答案1
所以我实际上找到了一种方法来做到这一点,但它不是一个很好的超级用户答案,所以如果 mods 想要删除、移动或无论这个答案/问题是什么,请随意。
借助 Lambda 函数和自定义资源,您可以运行自定义代码来响应堆栈事件(创建、更新和删除)。以下自定义资源调用 Lambda 函数并将其 StackName 属性作为输入发送。该函数使用此属性从相应的堆栈获取输出。
JSON
"MyCustomResource" : {
"Type" : "Custom::TestLambdaCrossStackRef",
"Properties" : {
"ServiceToken": { "Fn::Join": [ "", [ "arn:aws:lambda:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":function:", {"Ref" : "LambdaFunctionName"} ] ] },
"StackName": {
"Ref": "NetworkStackName"
}
}
}
YAML
MyCustomResource:
Type: "Custom::TestLambdaCrossStackRef"
Properties:
ServiceToken:
!Sub |
arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${LambdaFunctionName}
StackName:
Ref: "NetworkStackName"
答案2
我很惭愧地说,我找到了另一种方法,为什么我不直接阅读手册呢?所以这实际上是 Sceptre 的一种方法。
Hooks 允许在 Sceptre 操作发生时运行自定义命令。
当 Sceptre 运行时,会在特定的挂钩点执行一个钩子。
如果需要,用户可以创建自己的钩子,如自定义钩子部分所述。钩子点
before_create 或 after_create - 在堆栈创建之前或之后运行钩子。
before_update 或 after_update - 在堆栈更新之前或之后运行钩子。
before_delete 或 after_delete - 在堆栈删除之前或之后运行钩子。
句法:
钩子在堆栈的配置文件中指定,使用以下语法:
hooks:
hook_point:
- !command_type command 1
- !command_type command 2