我有一个 AWS CloudFormation 模板,用于创建 OpsWorks 堆栈并部署应用程序。为了部署应用程序,我使用Lambda函数和使用该函数的自定义资源。我的问题是:Lambda函数只会在创建堆栈期间执行一次,然后再也不会再使用它。有没有办法在堆栈执行结束时通过 AWS CloudFormation 删除Lambda函数?
答案 0 :(得分:2)
首先,我应该说Aditya是对的,你不应该删除在整个生命周期中使用的支持Lambda。
但是,如果您真的想要这样做,一种方法是在运行后简单地使用删除自身(和相关资源,例如角色)功能。
答案 1 :(得分:1)
Lambda函数只会在执行期间执行一次 创建堆栈,然后永远不会再使用它。
^^情况并非如此。每次触摸(即创建,更新或删除)相应的资源时,将调用用于Lambda支持的自定义资源的支持Lambda函数。 AWS CloudFormation每次看到正在触摸资源时都会将 RequestType 参数传递给该函数,并将其传递给these values: &fl=*,[child parentFilter="isparent:true" limit=10]
,Create
,{ {1}}。您的Lambda函数应该执行将该参数考虑在内的必要操作。根据您的问题,您的Lambda函数似乎只适合Update
?
此外,根据AWS docs,您不需要为创建Lambda函数付费,但只有在您实际调用它时才会收费。因此,成本不能阻止保持功能的因素。 相反,如果您担心的是您不想要额外的 clutter ,您可以尝试创建一个通用 CloudFormation堆栈,其工作将是创建共享资源,而您那么可以在那里定义Lambda函数吗?我必须知道您的整个工作流程,以确定该方法是否有效。
对于它的价值,我建议不要删除Lambda支持的自定义资源的支持功能,因为当某人将来触摸相应的资源时,或者想要创建相同的另一个实例时会很痛苦资源类型。
答案 2 :(得分:0)
您对自定义资源的一些假设并非如此。在Lambda支持的自定义资源中,您可以实现逻辑以支持资源的创建,更新和删除。这些指示是通过事件从CloudFormation发送的,并为您提供有关堆栈过程的信息。
了解自定义资源生命周期非常重要,以防止删除数据。
创建 - 这很容易,当创建资源时,请求类型为Create的事件将发送到您的函数。
删除 - 这个更棘手。删除资源时,将发送删除请求类型。但是除了资源删除之外还有更多场景。我们必须首先解释更新。
更新 - 如果更改了任何自定义资源属性,则会调用它。例如,在我们的应用程序中,我们可以修改允许的回调URL,这将触发具有更新请求类型的函数
我们欢迎您详细了解在this blog post
中创建自定义资源的最佳做法