最近发布了针对
因此,下面的Lambda函数考虑了存储在
尽管该角色可以访问任何
Lambda
函数的Docker镜像,我决定使用CloudFormation
来尝试这个功能。因此,下面的Lambda函数考虑了存储在
Elastic Container Registry
中的Docker镜像,并遵循文档中的示例来访问该镜像。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,这种方法也不起作用。
ecr: InitiateLayerUpload
权限。非常感谢你,Marcin,AWS文档往往不是一个易于理解的指南。欢迎分享你的答案。 - Miguel Trejo