提问者:小点点

AWS Lamdbas使用CloudTop分布域作为环境变量


我正在使用各种AWS组件以及一些自定义函数创建一个新的堆栈。我的堆栈定义了一个AWS::CrowdFronp::Dist0016 tion分发,当运行sam部署命令时创建。我想获取发行版的域名,并将其用作两个函数的环境变量。在看留档

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distribution.html

声明应能够通过以下方式使用发行版的域名:

<代码>!好的,好的

因此,is继续在我的一项职能中这样做:

 RenameAsset:
    Type: 'AWS::Serverless::Function'
    Properties:
      CodeUri: 'rename-asset/build/distributions/rename-asset-1.0.0-SNAPSHOT.zip'
      Handler: 'fts.assetiq.renamer.AssetRenamer::handleRequest'
      Role: !GetAtt LambdaExecutionRole.Arn
      Environment:
        Variables:
          PUBLIC_CDN_NAME: !GetAtt AssetIQDistribution.DomainName
      Events:
        RenameAssetEvent:
          Type: Api
          Properties:
            RestApiId: !Ref AssetIQApi
            Path: '/assetiq/assets'
            Method: put

问题是我仍然无法检索域名并将其用作env变量。我尝试了其他几种选择(例如使用!Sub而不是!GetAtt),但似乎没有任何效果。有人能解释一下吗。作为参考,我的分发配置如下:

  CloudFrontOriginAccessIdentity:
    Type: 'AWS::CloudFront::CloudFrontOriginAccessIdentity'
    Properties:
      CloudFrontOriginAccessIdentityConfig:
        Comment: 'Asset-IQ Origin Identity'

  AssetIQDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Origins:
          - DomainName: !GetAtt S3Bucket.DomainName
            Id: !Sub S3-assetiq-${ApplicationStage}
            S3OriginConfig:
              OriginAccessIdentity:
                Fn::Sub: 'origin-access-identity/cloudfront/${CloudFrontOriginAccessIdentity}'
        Enabled: 'true'
        Comment: "asset iq cloudfront distribution"
        Logging:
          IncludeCookies: 'false'
          Bucket: assetiq-logs.s3.amazonaws.com
          Prefix: assetiq-logs_
        DefaultCacheBehavior:
          Compress: 'true'
          AllowedMethods:
            - GET
            - HEAD
            - OPTIONS
          TargetOriginId: !Sub S3-assetiq-${ApplicationStage}
          ForwardedValues:
            QueryString: 'false'
          ViewerProtocolPolicy: redirect-to-https
        PriceClass: PriceClass_100
        ViewerCertificate:
          CloudFrontDefaultCertificate: 'true'
        IPV6Enabled: false

共1个答案

匿名用户

结束此问题,因为问题已经解决。事实证明SAM模板配置是正确的,但我使用错误的键引用了系统环境变量,导致返回空值。

在代码级别上纠正这一点解决了这个问题,并且似乎以我最初的方式引用域名非常好。