跳转到主要内容

使用Python Lambda函数实现自定义AWS CloudFormation资源。

项目描述

使用Python Lambda函数实现 自定义AWS CloudFormation资源

这有助于您在CloudFormation中引用非AWS资源 - 例如,让我们在我们的堆栈中获取一个StatusCake警报

Type: Custom::StatusCakeTest
Version: 1.0
Properties:
  WebsiteName: vitalwebsite.com
  WebsiteURL: http://vitalwebsite.com
  CheckRate: 300
  TestType: HTTP

(实现留给读者作为练习)

另请参阅

  • examples 目录中的示例代码。

  • AWS文档

Lambda处理器

这是一个简单的资源

from custom_resource import BaseHandler

class Handler(BaseHandler):
    def create(self, event, context):
        return "CreatedId", {"AndSome": "MetaData"}

    def update(self, event, context):
        return "UpdatedId", {"AndSome": "MetaData"}

    def delete(self, event, context):
        return "DeletedId", {"AndSome": "MetaData"}

handler = Handler()

我们扩展了 BaseHandler 类,并实现了 createupdatedelete 方法。所有这些方法都是必需的。

这些方法必须

  • 返回一个表示资源ID的字符串。这可以通过 Ref函数 在您的CFN模板中使用。

  • 返回一个资源ID字符串,以及一个包含字符串键和值的字典。这些键值对可以与 GetAtt函数 一起使用。

  • 返回一个 custom_resource.Successcustom_resource.Failed 对象。

  • 返回一个 custom_resource.Defer 对象,表示您将异步处理此操作。请参阅下面的 异步响应

  • 引发异常。

BaseHandler 将对CloudFormation做出响应,除非返回 Defer

异步响应

您的 Handler 方法可以返回 Defer 以表示异步处理。

为了稍后响应,您需要原始事件对象的副本。这将被传递给响应器类,例如

with Responder(event) as responder:
    responder.success(physical_resource_id="123", data={"Meta": "Data"})
    # or
    responder.failure(physical_resource_id="456", reason="Something went wrong")

使用with语句,即使在发生异常的情况下,您的资源也始终会对CloudFormation做出响应 - 确保您的堆栈不会停滞并最终超时。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

custom_resource-0.1.9.tar.gz (5.2 kB 查看散列值)

上传时间:

支持者