删除Lambda支持的自定义资源的支持Lambda函数

问题描述 投票:1回答:3

我有一个AWS CloudFormation模板,可以创建OpsWorks堆栈并部署应用程序。为了部署应用程序,我使用Lambda函数和使用该函数的自定义资源。我的问题是:Lambda函数只会在创建堆栈期间执行一次,然后再也不会再使用它。有没有办法在堆栈执行结束时通过AWS CloudFormation删除Lambda函数?

json instance aws-lambda amazon-cloudformation aws-opsworks
3个回答
2
投票

首先,我应该说Aditya是对的,你不应该删除在整个生命周期中使用的支持Lambda。

但是,如果你真的想要这样做,一种方法是在运行后简单地让函数delete自身(以及相关的资源,例如,角色)。


1
投票

Lambda函数只会在创建堆栈期间执行一次,然后再也不会再使用它。

^^事实并非如此。每次触摸(即创建,更新或删除)相应的资源时,将调用用于Lambda支持的自定义资源的支持Lambda函数。 AWS CloudFormation每次看到资源被触摸时都会将RequestType参数传递给该函数,并将其传递给these valuesCreateUpdateDelete。您的Lambda函数应该执行将该参数考虑在内的必要操作。根据您的问题,您的Lambda函数似乎只适合RequestType = Create

此外,根据AWS docs,您不需要为创建Lambda函数付费,但只有在您实际调用它时才会收费。因此,成本不能阻止保持功能的因素。相反,如果你担心的是你不想要额外的混乱,你可以尝试创建一个共同的CloudFormation堆栈,他的工作是创建共享资源,然后你可以在那里定义Lambda函数?我必须知道您的整个工作流程,以确定该方法是否有效。

对于它的价值,我建议不要删除Lambda支持的自定义资源的支持功能,因为当有人将来触摸相应的资源或想要创建相同资源类型的另一个实例时,这将是一个痛苦。


0
投票

您对自定义资源的一些假设不正确。在Lambda支持的自定义资源中,您可以实现逻辑以支持资源的创建,更新和删除。这些指示通过事件从CloudFormation发送,并为您提供有关堆栈过程的信息。

了解自定义资源生命周期非常重要,以防止删除数据。

创建 - 这很容易,当创建资源时,请求类型为Create的事件将发送到您的函数。

删除 - 这个更棘手。删除资源时,将发送删除请求类型。但是除了资源删除之外还有更多场景。我们必须首先解释更新。

更新 - 如果更改了任何自定义资源属性,则会调用它。例如,在我们的应用程序中,我们可以修改允许的回调URL,这将触发具有Update请求类型的函数

我欢迎您阅读有关在this blog post中创建自定义资源的最佳实践的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.