使用python lambda函数实现自定义aws云信息资源。
custom_resource的Python项目详细描述
使用python lambda函数实现custom AWS CloudFormation resources。
这有助于您在cloudformation中引用非aws资源-例如, 让我们在堆栈中获取statuscake警报:
Type:Custom::StatusCakeTestVersion:1.0Properties:WebsiteName:vitalwebsite.comWebsiteURL:http://vitalwebsite.comCheckRate:300TestType:HTTP
(作为练习留给读者的实现)
另请参见
- examples目录中的示例代码。
- AWS docs
lambda处理程序
这里有一个简单的资源:
fromcustom_resourceimportBaseHandlerclassHandler(BaseHandler):defcreate(self,event,context):return"CreatedId",{"AndSome":"MetaData"}defupdate(self,event,context):return"UpdatedId",{"AndSome":"MetaData"}defdelete(self,event,context):return"DeletedId",{"AndSome":"MetaData"}handler=Handler()
我们扩展了BaseHandler类,并实现了create, update和delete方法所有这些方法都是必需的。
方法必须是:
- 返回一个表示资源ID的字符串。可以在 您的CFN模板通过Ref function
- 返回一个资源ID字符串和一个包含键字符串的dict 和价值观。这些键/值对可以与GetAtt function一起使用。
- 返回custom_resource.Success或custom_resource.Failed 反对。
- 返回一个custom_resource.Defer对象,表示您将处理 这是异步的请参见下面的async responses。
- 提出一个例外
BaseHandler将响应cloudformation,除非Defer是 返回。
异步响应
您的Handler方法可以返回Defer来表示异步 处理。
要稍后响应,您需要原始event对象的副本这个 将传递给Responder类,例如:
withResponder(event)asresponder:responder.success(physical_resource_id="123",data={"Meta":"Data"})# orresponder.failure(physical_resource_id="456",reason="Something went wrong")
使用with,您的资源将始终响应cloudformation,甚至 异常时-确保堆栈不会停止并最终超时