在 lambda 中将 get Hosting URL 作为环境变量放大

Amplify get Hosting URL in lambda as environment variable

我需要使用 amplify 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(默认值)。

尝试使用 Outputs section of the template along with Fn::ImportValue function documentation 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"}
                }
         }
     }
}