微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cloudformation中如何访问跨地域资源

如何解决Cloudformation中如何访问跨地域资源

我有一个部署到 us-east-1 的静态网站堆栈。我只需要在 eu-west-1 区域部署 s3 存储桶,因此为了实现这一点,我使用了这样的堆栈集;

  StackSet:
    Type: AWS::CloudFormation::StackSet
    Properties:
      Description: Multiple S3 buckets in multiple regions
      PermissionModel: SELF_MANAGED
 
      StackInstancesGroup:
        - DeploymentTargets:
            Accounts:
              - !Ref "AWS::AccountId"
          Regions: 
            - eu-west-1
 
      StackSetName: !Sub "AppBucketStack"
      TemplateBody: |
        AWstemplateFormatVersion: 2010-09-09
        Description: Create a S3 bucket
        Resources:
          WebsiteBucket:
            Type: AWS::S3::Bucket
            DeletionPolicy: Retain
            UpdateReplacePolicy: Retain
            Properties:
              BucketName: !Join
                - ''
                - - aMeta-app-
                  - !Ref 'AWS::Region'
                  - '-'
                  - !Ref 'AWS::AccountId'
              AccessControl: Private
              CorsConfiguration:
                CorsRules:
                - AllowedHeaders:
                  - "*"
                  AllowedMethods:
                  - GET
                  - POST
                  - PUT
                  AllowedOrigins:
                  - "*"
                  MaxAge: 3600
              WebsiteConfiguration:
                IndexDocument: index.html
                ErrorDocument: 404.html
              Tags:
                - Key: Company
          WebsiteBucketPolicy:
            Type: AWS::S3::BucketPolicy
            Properties:
              Bucket: !Ref 'WebsiteBucket'
              PolicyDocument:
                Version: '2012-10-17'
                Statement:
                  - Action:
                      - s3:Getobject
                    Effect: Allow
                    Resource: !Join
                      - ''
                      - - 'arn:aws:s3:::'
                      - !Ref 'WebsiteBucket'
                      - /*
                    Principal:
                      CanonicalUser: !GetAtt OriginAccessIdentity.S3CanonicalUserId

但是现在我需要在部署在 us-east-1 的 cloudfront 中解决存储桶的域名 (!GetAtt WebsiteBucket.DomainName)。好像不能使用StackSet的输出,因为资源是不同的区域。

大家有什么建议吗?

解决方法

好像不能使用StackSet的输出,因为资源是不同的区域。

没错。您不能跨区域或账户引用输出。 CloudFormation (CFN) 是特定于区域的。最简单的方法是在 us-east-1 中部署您的资源,并将它们的输出作为参数传递到不同区域的第二个堆栈。您可以手动完成,也可以从本地工作站或 ec2 实例使用 AWS CLI 或开发工具包自动完成。

但是如果想要将所有内容保留在 CFN 中,您必须为第二个堆栈开发一个 custom resource。该资源将采用 lambda 函数 的形式,它将使用 AWS 开发工具包从 us-east-1 获取输出并将它们传递到您在不同区域的堆栈。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。