如何解决部署 aws lambda 函数时无法访问我的注册表中的 ecr 存储库
问题陈述:
我正在尝试使用构建的 docker 容器映像并将其用作 AWS lambda 函数的源。但是,每当我构建 lambda 函数并部署它时,我每次都会收到此错误。
The repository with name 'xxxxxxxxx' does not exist in the registry
with id '########'.
我进行了一些完整性检查,以确保我的 serverless.yml 文件创建正确,拼写正确,并且该存储库确实存在于 ECR 中。
serverless.yml
provider:
name: aws
runtime: python3.8
stage: ${env:BRANCH_NAME}
region: us-west-2
role: arn:aws:iam::#########:role/current-role
vpc:
securityGroupIds:
- ${env:SG_ID}
subnetIds:
- ${env:SUBNET_ID}
tracing:
lambda: true
environment:
REGION_NAME: us-west-1
PYTHONPATH: '/var/task/packages:/var/runtime'
S5_QUEUE_URL: ${env:S5_QUEUE_URL}
SECRET_NAME: ${env:SECRET_NAME}
iamRoleStatements:
- Effect: Allow
Action:
- 'ecr:SetRepositoryPolicy'
- 'ecr:GetRepositoryPolicy'
Resource: 'arn:aws:ecr:us-west-2:########:xxxxxxxxx/directory/'
functions:
function1:
image: '#######.dkr.ecr.us-west-2.amazonaws.com/xxxxxxxxx/directory:tag'
但是,由于某种原因,我仍然无法访问此存储库,无论发生什么变化 我已将其添加到我的 serverless.yml 文件中。起初,我认为这可能是权限问题,但我没有发现我声明的权限有任何问题......有人可以帮忙吗?
解决方法
将运行时从 python3.8
更改为 provided
,参见 Custom runtimes with the Serverless Framework
根据错误,您的帐户和您要查找的区域中没有这样的注册表。
话虽如此,您的图像 URI 看起来有点奇怪:
'#######.dkr.ecr.us-west-2.amazonaws.com/xxxxxxxxx/directory:tag'
如果 xxxxxxxxx 是您的存储库(注册表)名称,那么我不确定该目录来自哪里。如果目录是您的存储库名称,那么您需要省略 xxxxxxxx。您的政策声明中的 ARN 具有相同的内容。
如果,如您所说,您已确保存储库确实存在于您的帐户中,请复制它的图像 URI 并将其与 serverless.yml 中的内容进行比较
常见的 ECR 图像 URI 结构是:
<account_ID>.dkr.ecr.<region>.amazonaws.com/<repo_name>:tag
来自 serverless blog post on the topic 的代码片段:
functions:
someFunction:
image: <account>.dkr.ecr.<region>.amazonaws.com/<repository>@<digest>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。