问题描述
正在开发一个私有资源类型,用于AWS CloudFormation注册表。他已经设计了模型架构并开发了处理程序代码,提交了资源类型,甚至成功地使用自己的私有资源类型部署了一个堆栈。现在他需要对其进行日志检查。由于他使用cfn init
命令生成了脚手架,他只需将日志条目添加到现有的记录器对象中。
# 使用此记录器将日志消息转发到CloudWatch Logs。
LOG = logging.getLogger(__name__)
TYPE_NAME = "Myself::Test::Resourceful"
resource = Resource(TYPE_NAME, ResourceModel)
test_entrypoint = resource.test_entrypoint
@resource.handler(Action.CREATE)
def create_handler(
session: Optional[SessionProxy],
request: ResourceHandlerRequest,
callback_context: MutableMapping[str, Any],
) -> ProgressEvent:
model = request.desiredResourceState
progress: ProgressEvent = ProgressEvent(
status=OperationStatus.IN_PROGRESS,
resourceModel=model,
)
# TODO: 在此处放置代码
LOG.info('Creating....')
根据文档,在使用cfn submit
注册资源类型时,CloudFormation会在您的账户中为该资源类型创建一个CloudWatch日志组。这使您能够访问资源的日志,以帮助您诊断任何故障。日志组的名称遵循以下模式:
/my-resource-type-stack-ResourceHandler-string
当您为包含资源类型的堆栈启动堆栈操作时,CloudFormation会将资源类型发出的日志事件传递到此日志组。
然而,在提交我的资源类型时(甚至在部署时),我在CloudWatch中看不到任何创建的LogGroup。显然,我在这里遗漏了某些东西。
请帮助我理解如何查找我私有CloudFormation注册表资源类型的日志。
当然,我将乐意提供所需的任何其他信息。谢谢!
解决方案
请注意以下操作可能因版本差异或环境配置不同而有所不同。
要查找私有CloudFormation注册表资源类型的日志,您需要确保正确配置了日志记录级别,并确保资源类型的日志事件被正确地发送到CloudWatch Logs。以下是解决方案的步骤:
- 设置日志记录级别:在您的处理程序代码中,确保您的日志记录器的日志级别适当地配置。例如,您可以使用以下代码行设置日志级别为INFO:
python
LOG.setLevel(logging.INFO)
这将确保只有INFO级别及更高级别的日志消息被发送到CloudWatch Logs。
-
检查日志组是否创建:确保您正确提交了资源类型并成功部署了堆栈。一旦成功部署堆栈,CloudFormation会在CloudWatch中为您的资源类型创建一个日志组。您可以通过登录到AWS管理控制台并导航到CloudWatch Logs来查看这些日志组。
-
检查日志事件是否发送:当您执行与包含您的私有资源类型的堆栈相关的操作时,例如创建、更新或删除堆栈,CloudFormation应该会将资源类型的日志事件发送到相应的日志组。您可以在日志组中查找与操作相关的日志事件以进行故障排除。
请确保您的资源类型处理程序代码中的日志记录级别正确设置,并且在AWS管理控制台的CloudWatch Logs中查找创建的日志组和相关的日志事件。这将帮助您定位和解决任何与您的私有CloudFormation注册表资源类型相关的问题。