删除 Lambda 支持的自定义资源的支持 Lambda 函数
Delete the backing Lambda function for a Lambda-backed custom resource
我有一个 AWS CloudFormation 模板,用于创建 OpsWorks 堆栈并部署应用程序。为了部署应用程序,我使用了 Lambda 函数和利用该函数的自定义资源。我的问题是:Lambda 函数只会在堆栈创建期间执行一次,然后就再也不会使用了。有没有办法在堆栈执行结束时通过AWS CloudFormation删除Lambda函数?
that Lambda function will only be executed one time during the
creation of the stack, and then it will never be used again.
^^不是这样的。每次接触(即创建、更新或删除)相应资源时,都会调用 Lambda 支持的自定义资源的支持 Lambda 函数。 AWS CloudFormation 每次看到资源被触及时都会将 RequestType 参数传递给该函数,并将其传递给 these values 之一:Create
、Update
, Delete
.您的 Lambda 函数应在考虑该参数的情况下执行必要的操作。根据您的问题,您的 Lambda 函数似乎只适用于 RequestType = Create
?
此外,根据 AWS docs,您无需为创建 Lambda 函数付费,但仅当您实际调用它时才付费。因此,成本不能成为保留该功能的阻碍因素。
相反,如果您担心不想要额外的 混乱 ,您可以尝试创建一个 common CloudFormation 堆栈,它的工作是创建共享资源,然后您可以在那里定义 Lambda 函数?我必须了解您的整个工作流程才能确定该方法是否有效。
对于它的价值,我建议不要删除 Lambda 支持的自定义资源的支持功能,因为当有人将来接触相应的资源或想要创建另一个实例时会很痛苦相同的资源类型。
首先,我应该说 Aditya 是对的,您不应该删除支持 Lambda,因为它在整个生命周期中都在使用。
但是,如果您真的很想这样做,一种方法是让函数删除自身(以及相关资源,例如角色)在[=16=之后].
您关于自定义资源的一些假设是不正确的。在 Lambda 支持的自定义资源中,您可以实现您的逻辑来支持资源的创建、更新和删除。这些指示通过事件从 CloudFormation 发送,并为您提供有关堆栈过程的信息。
It’s important to understand the custom resource life cycle, to prevent your data from being deleted.
Create - that’s easy, when a resource is being created an event with request type Create is sent to your function.
Delete - this one is more tricky. When a resource is being deleted a Delete request type is sent. But there are more scenarios other than resource Delete. We will have to explain Update first.
Update - gets called if any of your custom resource properties were changed. For example, in our app we can modify the allowed callback urls, which will trigger the function with an Update request type
欢迎您在 this blog post
中阅读有关创建自定义资源的最佳实践的更多信息
我有一个 AWS CloudFormation 模板,用于创建 OpsWorks 堆栈并部署应用程序。为了部署应用程序,我使用了 Lambda 函数和利用该函数的自定义资源。我的问题是:Lambda 函数只会在堆栈创建期间执行一次,然后就再也不会使用了。有没有办法在堆栈执行结束时通过AWS CloudFormation删除Lambda函数?
that Lambda function will only be executed one time during the creation of the stack, and then it will never be used again.
^^不是这样的。每次接触(即创建、更新或删除)相应资源时,都会调用 Lambda 支持的自定义资源的支持 Lambda 函数。 AWS CloudFormation 每次看到资源被触及时都会将 RequestType 参数传递给该函数,并将其传递给 these values 之一:Create
、Update
, Delete
.您的 Lambda 函数应在考虑该参数的情况下执行必要的操作。根据您的问题,您的 Lambda 函数似乎只适用于 RequestType = Create
?
此外,根据 AWS docs,您无需为创建 Lambda 函数付费,但仅当您实际调用它时才付费。因此,成本不能成为保留该功能的阻碍因素。 相反,如果您担心不想要额外的 混乱 ,您可以尝试创建一个 common CloudFormation 堆栈,它的工作是创建共享资源,然后您可以在那里定义 Lambda 函数?我必须了解您的整个工作流程才能确定该方法是否有效。
对于它的价值,我建议不要删除 Lambda 支持的自定义资源的支持功能,因为当有人将来接触相应的资源或想要创建另一个实例时会很痛苦相同的资源类型。
首先,我应该说 Aditya 是对的,您不应该删除支持 Lambda,因为它在整个生命周期中都在使用。
但是,如果您真的很想这样做,一种方法是让函数删除自身(以及相关资源,例如角色)在[=16=之后].
您关于自定义资源的一些假设是不正确的。在 Lambda 支持的自定义资源中,您可以实现您的逻辑来支持资源的创建、更新和删除。这些指示通过事件从 CloudFormation 发送,并为您提供有关堆栈过程的信息。
It’s important to understand the custom resource life cycle, to prevent your data from being deleted.
Create - that’s easy, when a resource is being created an event with request type Create is sent to your function.
Delete - this one is more tricky. When a resource is being deleted a Delete request type is sent. But there are more scenarios other than resource Delete. We will have to explain Update first.
Update - gets called if any of your custom resource properties were changed. For example, in our app we can modify the allowed callback urls, which will trigger the function with an Update request type
欢迎您在 this blog post
中阅读有关创建自定义资源的最佳实践的更多信息