Я создаю новый стек, используя различные компоненты AWS, а также несколько пользовательских функций. Мой стек определяет распределение AWS::CloudFront::Distribution
, которое будет создано при запуске команды sam
deploy. Я хотел бы получить доменное имя дистрибутива и использовать его в качестве переменной среды для двух моих функций. Читая документацию здесь
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distribution.html
утверждает, что можно использовать доменное имя дистрибутива, выполнив это:
!GetAtt <logical_id>.DomainName
Таким образом, мы пошли дальше и сделали это в одной из моих функций:
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 var. Я пробовал несколько других альтернатив (например, использование !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