我正在使用各种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
结束此问题,因为问题已经解决。事实证明SAM模板配置是正确的,但我使用错误的键引用了系统环境变量,导致返回空值。
在代码级别上纠正这一点解决了这个问题,并且似乎以我最初的方式引用域名非常好。