【问题标题】:How to set the dockerfile and environment variables while making lambda in CDK在 CDK 中制作 lambda 时如何设置 dockerfile 和环境变量
【发布时间】:2022-02-09 21:59:30
【问题描述】:

我在template.yml 有 SAM 项目

Globals:
  Function:
    Timeout: 30
    Environment:
      Variables:
        DBNAME: !Ref DBNAME

Resources:
  MessageFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      Architectures:
        - x86_64
      Events:
        Message:
          Type: Api
          Properties:
            Path: /message
            Method: post
    Metadata:
      Dockerfile: Dockerfile.message
      DockerContext: ./botapp
      DockerTag: python3.9-v1

然后像这样部署

sam deploy --guided --parameter-overrides DBNAME=mydb

这意味着我将设置环境变量DBNAME=mydb 并从Dockerfile.message 构建映像。

目前效果很好。

但是现在我想把它移到cdk

所以,我首先在 cdk 中编写了这段代码

const messageLambda = new lambda.DockerImageFunction(this, "BotLambda", {
  code: lambda.DockerImageCode.fromImageAsset("chatbot-sam/botapp"),
});

但是我想设置dockerfileenvironment variables

例如

const messageLambda = new lambda.DockerImageFunction(this, "BotLambda", {
  code: lambda.DockerImageCode.fromImageAsset(
         "chatbot-sam/botapp",
         dockerfile: Dockerfile.message,
         enviroment_variables: { DBNAME:'mydb'}
       ),
});

上面的代码不正确,但是我的想法可以吗?

如何指明Dockerfileenvironment variables

【问题讨论】:

    标签: typescript amazon-web-services docker aws-cdk


    【解决方案1】:

    正如您在the DockerImageCode.fromImageAsset() docs 中看到的,您可以在file 参数中指定Dockerfile 的相对路径。

    至于 lambda 本身的环境变量,the docs for lambda.DockerImageFunction 也解释了这一点。您使用environment 属性定义环境变量:

    环境?

    类型:{ [string]: string }(可选,默认:无环境 变量。)

    Lambda 缓存并提供给您的 Lambda 的键值对 功能。

    所以它看起来像这样:

    const messageLambda = new lambda.DockerImageFunction(this, "BotLambda", {
      code: lambda.DockerImageCode.fromImageAsset(
             "chatbot-sam/botapp",
             {
                file: "Dockerfile.message",
             }
           ),
      environment: { DBNAME:'mydb'}
    });
    

    【讨论】:

    • 非常感谢!但是file 属性在 AssetImageCodeProps 中,所以可能是code: lambda.DockerImageCode.fromImageAsset( "chatbot-sam/chatbotapp", { "file": "Dockerfile.message" } ), environment:{ }
    • 正确,更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多