Linux - 在运行另一个命令时运行命令

Linux - 在运行另一个命令时运行命令

因此,我目前正在编写大量基础设施自动化内容,主要围绕 Cloudformation,并且我有一个用于管理 CF 部署的包装器/框架工具(Sceptre)。我遇到了一个不受 CF 支持但对于完成任务必不可少的任务,而且我厌倦了在任务中途添加手动干预步骤。因此,我想要一种在运行特定命令时触发命令的方法。例如:

sceptre create-stack example mystack

当有人运行这个命令时,我会触发一个 aws cli 命令。

aws module command --option=lol

谢谢。

编辑:如果有人有 Linux 原生的方式来执行此操作,请提供,我想了解完成此任务的多种方法。

答案1

所以我实际上找到了一种方法来做到这一点,但它不是一个很好的超级用户答案,所以如果 mods 想要删除、移动或无论这个答案/问题是什么,请随意。

在自定义资源中使用 AWS Lambda 函数

借助 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

相关内容