【问题标题】:Container image support for AWS Lambda via cloudformation通过 cloudformation 对 AWS Lambda 的容器映像支持
【发布时间】:2022-01-06 00:52:28
【问题描述】:

AWS Lambda 现在支持将容器图像作为打包格式。 Ref

cloudformation 是否支持使用容器镜像来部署 AWS Lambda?

类似于通过 S3 的打包和部署支持Ref

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation


    【解决方案1】:

    cloudformation 是否支持使用容器镜像来部署 AWS Lambda?

    是的。 AWS::Lambda::Function 具有特定于容器映像的新属性,例如:

    • ImageConfig
    • PackageType
    • ImageUri

    【讨论】:

    • 酷不知道这个。这有哪些可能的用例?
    • OP 是@jenson。我投了赞成票,感谢您提供的信息。
    • @RodrigoM 哦。对不起。感到困惑:-)
    • @Marcin,另一个相关问题:它是否支持 AWS ECR 以外的注册表?像 Docker hub 还是私有 JFrog?谢谢!
    • @Jenson 是的,ECR public 和 docker hub 都应该可以工作。
    【解决方案2】:

    @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
    

    【讨论】:

      【解决方案3】:

      示例模板:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-01
        • 2020-09-03
        • 2015-04-30
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        相关资源
        最近更新 更多