【发布时间】:2022-01-06 00:52:28
【问题描述】:
【问题讨论】:
标签: amazon-web-services aws-lambda amazon-cloudformation
【问题讨论】:
标签: amazon-web-services aws-lambda amazon-cloudformation
cloudformation 是否支持使用容器镜像来部署 AWS Lambda?
是的。 AWS::Lambda::Function 具有特定于容器映像的新属性,例如:
ImageConfigPackageTypeImageUri【讨论】:
@Marcin 指向正确的文档。 @Jenson 的回答依赖于 AWS SAM。
这是纯 CloudFormation 模板。
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
EcrImageUri:
Description: ECR image URI
Type: String
Resources:
LambdaShogi:
Type: AWS::Lambda::Function
Properties:
PackageType: Image
Role:
Fn::GetAtt:
- LambdaShogiRole
- Arn
Code:
ImageUri: !Ref 'EcrImageUri'
Architectures:
- x86_64
MemorySize: 1024
Timeout: 300
LambdaShogiRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
通过传递图像 URI,您可以部署容器 Lambda 函数。
$ aws cloudformation deploy \
--stack-name lambda-container-test \
--template-file ./cfn.yml \
--parameter-overrides EcrImageUri=<YOUR-ACCOUNT-ID>.dkr.ecr.<REGION>.amazonaws.com/test:latest \
--capabilities CAPABILITY_IAM
【讨论】:
示例模板:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
TestNode12Lambda:
Type: AWS::Serverless::Function
Properties:
PackageType: Image
FunctionName: testnode12lambda
Role:
Fn::GetAtt:
- TestNode12LambdaRole
- Arn
ImageUri: {aws_account_id}.dkr.ecr.us-east-1.amazonaws.com/lambda-container:latest
Timeout: 300
TestNode12LambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: TestNode12LambdaRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
Path: /
Policies:
- PolicyName: AWSLambdaBasicExecutionRole
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: '*'
部署命令:
aws cloudformation deploy --template-file resources.yml --stack-name lambdacft --capabilities CAPABILITY_NAMED_IAM
将 node12 Lambda 部署为容器镜像的示例代码:https://github.com/jensonjoseph/lambda-cft
【讨论】: