排查 AWS Serverless Application Repository方面的问题 - AWS Serverless Application Repository
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

排查 AWS Serverless Application Repository方面的问题

如果您使用的是 AWS Serverless Application Repository,则在创建、更新或删除应用程序时可能会遇到问题。使用此部分可帮助解决您可能遇到的常见问题。您还可以在 AWS Serverless Application Repository 论坛上搜索答案和发布问题。

注意

AWS Serverless Application Repository 中的应用程序是使用 AWS CloudFormation 部署的。有关排查 AWS CloudFormation 问题的信息,请参阅 AWS CloudFormation 问题排查指南

您无法使应用程序成为公有

如果您无法使应用程序成为公有,则可能是缺少由开源代码促进会 (OSI) 批准的应用程序的许可证文件。

为使应用程序成为公有,您需要一个 OSI 批准的许可证文件,还有一个成功发布的应用程序版本,以及该版本的源代码 URL。在应用程序创建后,您不能更新应用程序的许可证。

如果由于缺少许可证文件而无法使应用程序成为公有,请删除该应用程序并创建一个新的同名应用程序。确保您为其提供了由开源代码促进会 (OSI) 组织批准的一个或多个开源许可证。

已超过配额

如果您收到指示超出配额的错误消息,请检查您是否达到了资源配额。有关 AWS Serverless Application Repository 配额,请参阅AWS Serverless Application Repository 配额

已更新的自述文件没有立即显示

当您使应用程序成为公有时,应用程序的内容可能需要 24 小时才能更新。如果您遇到延迟时间超过 24 小时的情况,请尝试联系 AWS Support 以寻求帮助。有关详细信息,请参阅以下内容。

由于 IAM 权限不足,您无法部署应用程序

要部署 AWS Serverless Application Repository 应用程序,您需要拥有对 AWS Serverless Application Repository 资源和 AWS CloudFormation 堆栈的权限。您可能还需要权限才能使用应用程序中描述的基础服务。例如,如果您正在创建 Amazon S3 存储桶或 Amazon DynamoDB 表,则需要拥有对 Amazon S3 或 DynamoDB 的权限。

如果您遇到此类问题,请检查 AWS Identity and Access Management (IAM) 策略并验证您是否拥有必要的权限。有关更多信息,请参阅使用 AWS Identity and Access Management 控制访问权限

由于执行更改集时的 Amazon S3 权限错误,您无法部署应用程序。

例 Amazon S3 权限错误消息

Your access has been denied by S3, please make sure your request credentials have permission to GetObject for awsserverlessrepo-changesets-123456789/*. S3 Error Code: AccessDenied. S3 Error Message: Access Denied (Service: AWSLambdaInternal; Status Code: 403; Error Code: AccessDeniedException; Request ID: 12a3b14c-50d4-11e9-a005-9d36a3dd5e04)

从 AWS Serverless Application Repository 部署应用程序需要对两个服务进行 API 调用:

如果您在调用 AWS CloudFormation ExecuteChangeSet API 操作时收到一条错误消息,指示 Amazon Simple Storage Service (Amazon S3) 拒绝访问,则 aws:userid 可能与用于创建更改集的 aws:userid 不同。

此问题的一个示例是当您使用代入的角色时。有些因素可能导致 aws:userid 在不同服务的 API 调用之间进行更改,即使您使用相同的角色也是如此。要了解有关通过代入的角色分配给 aws:userid 的值的详细信息,请参阅有关 aws:userid 的更多信息

确保 Python 中具有统一的 aws:userid 的潜在编程解决方案是创建会话,然后进行调用以在该会话中创建和执行。

例 使用 Python Boto3 的会话

session = boto3.session.Session() serverlessrepo = session.client('servelessrepo') cloudformation = session.resource('cloudformation')

您无法将同一应用程序部署两次

您提供的应用程序名称用作 AWS CloudFormation 堆栈的名称。如果您部署应用程序时遇到问题,请确保没有同名的现有 AWS CloudFormation 堆栈。如果您这样做,请提供不同的应用程序名称或删除现有堆栈以部署同名的应用程序。

为何我的应用程序不能公开使用

默认情况下,应用程序是私有的。要使应用程序成为公有,请遵循此处的步骤。

联系支持人员

有些情况下,您可能无法在本部分中或通过 AWS Serverless Application Repository 论坛找到故障排除解决方案。如果您拥有 AWS Premium Support,则可在 AWS Support 中创建技术支持案例。

在与 AWS Support 联系之前,请确保为您有疑问的应用程序获取 Amazon 资源名称 (ARN)。您可以在 AWS Serverless Application Repository 控制台中找到应用程序 ARN。