【问题标题】:Amplify get Hosting URL in lambda as environment variable放大获取 lambda 中的托管 URL 作为环境变量
【发布时间】:2020-04-02 19:39:20
【问题描述】:

我需要使用放大 cli 添加的 Cloudfront 分发的 URL 作为环境变量。 状态:

我发现了如何在我的函数配置下的文件“api-cloudformation-template.json”中添加模板变量。 “hosting/S3AndCloudFront/template.json”的期望输出变量是CloudFrontSecureURL。 所以我在 lambda 配置文件中添加了行,如下所示:

 {
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Lambda resource stack creation using Amplify CLI",
    "Parameters": {
        ...
        "hostingS3AndCloudFrontHostingBucketName": { // working example
            "Type": "String",
            "Default": "hostingS3AndCloudFrontHostingBucketName"
        },
        "hostingS3AndCloudFrontCloudFrontSecureURL": { // my example
            "Type": "String",
            "Default": "hostingS3AndCloudFrontCloudFrontSecureURL"
        },
    },
    "Resources": {
        "LambdaFunction": {
            "Type": "AWS::Lambda::Function",
            "Metadata": {
                "aws:asset:path": "./src",
                "aws:asset:property": "Code"
            },
            "Properties": {
                ...
                "Environment": {
                    "Variables": {
                        ...
                        "HOSTING_S3ANDCLOUDFRONT_HOSTINGBUCKETNAME": {
                            "Ref": "hostingS3AndCloudFrontHostingBucketName"
                        },
                        "HOSTING_S3ANDCLOUDFRONT_CLOUDFRONTSECUREURL": {
                            "Ref": "hostingS3AndCloudFrontCloudFrontSecureURL"
                        }
                    }
                },

            }
        }
    ....
    },
    ....
}

发布功能后,我在process.env.HOSTING_S3ANDCLOUDFRONT_CLOUDFRONTSECUREURL 中得到hostingS3AndCloudFrontCloudFrontSecureURL(默认值)。

【问题讨论】:

  • 您能否发布您正在关注的教程,您正在尝试将“cloudfront”网址作为环境变量传递给 lambda,但您没有得到它,因为在通过放大部署,对吗?

标签: aws-lambda aws-amplify aws-amplify-cli


【解决方案1】:

尝试使用模板的Outputs 部分以及Fn::ImportValue 函数文档HERE

CloudFront 堆栈:

{
   ...
   "Outputs" : {
     "CloudfrontDomainOutput" : {
       "Description" : "The cloudfront domain",
       "Value" : { 
           "Fn::GetAtt": [
                           "hostingS3AndCloudFrontCloudFrontSecureURL",
                           "DomainName"
                          ]
       },
       "Export" : {
         "Name" : {"Fn::Sub": "${AWS::StackName}-hostingS3AndCloudFrontCloudFrontSecureURL" }
       }
    }
}

Lambda 堆栈



{
  ...
   "Environment": {
       "Variables": {
               "HOSTING_S3ANDCLOUDFRONT_HOSTINGBUCKETNAME": {
                   "Ref": "hostingS3AndCloudFrontHostingBucketName"
                },
                "HOSTING_S3ANDCLOUDFRONT_CLOUDFRONTSECUREURL": {
                      "Fn::ImportValue" : {"Fn::Sub" : "${CloudFront_Stack_Name}-hostingS3AndCloudFrontCloudFrontSecureURL"}
                }
         }
     }
}

【讨论】:

  • 这行不通。因为hostingS3AndCloudFrontCloudFrontSecureURL 是一个参数。我们使用ref 引用参数。你说什么
  • @ArunK 你说得对,谢谢你指出这一点,我已经更新了我的回复,你能做一个跨堆栈引用吗?
  • 语法看起来不错,要使其正常工作,cloudfront 必须是使用 cloudformation 创建的,并且应该导出 url。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2020-08-18
  • 2016-03-21
相关资源
最近更新 更多