【发布时间】:2021-03-16 03:46:07
【问题描述】:
随着最近发布的用于 Lambda 函数的 Docker 映像,我决定使用 CloudFormation 尝试此功能。
因此,下面的 lambda 考虑了存储在 Elastic Container Registry 中的 docker 映像,具有访问 documentation 中示例之后的映像的权限。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: lambda-docker-image
Globals:
Function:
Timeout: 180
Resources:
DockerAsImage:
Type: AWS::Serverless::Function
Properties:
FunctionName: DockerAsImage
ImageUri: ??????????????.dkr.ecr.us-west-2.amazonaws.com/????:latest
PackageType: Image
Policies:
- Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- ecr:*
- ecr-public:*
- sts:GetServiceBearerToken
Resource: "*"
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: post
我正在使用sam 在us-west-2 中部署模板
sam deploy -t template.yaml --capabilities "CAPABILITY_NAMED_IAM" --region "us-west-2" --stack-name "lambda-docker-example" --s3-bucket "my-bucket" --s3-prefix "sam_templates/lambda-docker-example" --force-upload --no-confirm-changeset
但是,在 IAM 角色创建成功后,Lambda 函数创建失败并出现以下错误
Lambda does not have permission to access the ECR image. Check the ECR permissions. (Service: AWSLambdaInternal; Status Code: 403; Error Code: AccessDeniedException;
即使该角色有权访问任何 ecs 资源。我尝试的另一种方法是创建一个单独的角色并通过Role: !GetAtt Role.Arn将其分配给lambda,这种方法也不起作用。
【问题讨论】:
-
您的 IAM 用户/角色是否有权访问 ECR?要使用基于图像的 lambda 函数,您作为创建函数的用户/角色需要 ECR 权限,如 here 所述。你能检查一下吗?
-
@Marcin 我遇到了同样的问题,你的建议解决了!
-
@alexyz78 感谢您告诉我。如果它适用于 OP,我会在答案中提供更多信息。
-
@Marcin 是的,这两个权限确实解决了这个问题,此外,要将 docker 映像推送到 ecr,
ecr: InitiateLayerUpload是必要的。非常感谢 Marcin,AWS 文档往往不是一个简单的指南。欢迎分享您的答案。 -
@MiguelTrejo 谢谢,已添加答案。
标签: amazon-web-services aws-lambda amazon-cloudformation amazon-ecs aws-sam-cli