【问题标题】:Authenticated File Downloads to S3 Bucket with CloudFormation使用 CloudFormation 将经过身份验证的文件下载到 S3 存储桶
【发布时间】:2020-08-04 09:31:41
【问题描述】:

下载到 EC2 实例的经过验证的文件随处可见。但我想将文件下载到存储桶中,而不是下载到 EC2 实例中。

例如,假设我正在构建一个无服务器静态网站,并且我的 index.html 在 git 存储库或其他存储桶中可用。如何将该文件下载到我的 cloudformation 脚本中新创建的存储桶中?

参考:Authenticated File Downloads with CloudFormation

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-cloudformation aws-serverless


    【解决方案1】:

    好吧,在寻找其他非常不相关的东西时偶然发现了答案。

    答案正是@jarmod 所建议的,我的答案仅仅是指向 AWS 实施相同的现有 cloudformation 示例的指针。

    引用下面的链接,以免在这里只放一个链接,

    使用此模式,只需一个存储桶预先包含 Lambda zip 文件,无需额外工作即可支持新启动的区域。由于其灵活性,这是大多数用例的首选方法。但是,它确实需要模板中的大多数额外资源:一个内联 Lambda 函数,其中包含用于复制 zip 的代码、一个关联的身份和访问管理 (IAM) 角色、一个 Amazon S3 存储桶和自定义资源。

    以下 sn-p 在 AWS CloudFormation 堆栈区域 (LambdaZipsBucket) 中创建一个新的 Amazon S3 存储桶,然后将 zip 文件 (CopyZips.Properties.Objects) 从源存储桶 (CopyZips.Properties.SourceBucket) 复制到新存储桶中.

      Resources:
        LambdaZipsBucket:
            Type: AWS::S3::Bucket
        CopyZips:
            Type: Custom::CopyZips
            Properties:
              ServiceToken: !GetAtt 'CopyZipsFunction.Arn'
              DestBucket: !Ref 'LambdaZipsBucket'
              SourceBucket: !Ref 'QSS3BucketName'
              Prefix: !Ref 'QSS3KeyPrefix'
              Objects:
                - functions/packages/MyFunction/lambda.zip
    

    请注意,Objects 采用路径列表,因此如果您的模板中有多个 Lambda 函数,则所有 zip 都可以添加到单个 CopyZips 资源中。

    现在声明我们的 Lambda 函数并将其指向新创建的存储桶。

    在创建函数时,我们将 MyFunction.Properties.Code.S3Bucket 指向 LambdaZipsBucket。

      MyFunction:
        DependsOn: CopyZips
        Type: AWS::Lambda::Function
        Properties:
          Code:
            S3Bucket: !Ref 'LambdaZipsBucket'
            S3Key: !Sub '${QSS3KeyPrefix}functions/packages/MyFunction/lambda.zip'
          ...
    

    注意 DependsOn 键指向我们的 CopyZips 自定义资源。默认情况下,AWS CloudFormation 将尝试并行启动不相互依赖的资源,因此需要确保在创建 Lambda 函数之前已经复制了 zip。

    要在您自己的模板中实现这一点,您还需要部署 CopyZips Lambda 代码和相关的 IAM 角色。 AWS Quick Start examples repository 中提供了完整的示例实现。

    https://aws.amazon.com/blogs/infrastructure-and-automation/deploying-aws-lambda-functions-using-aws-cloudformation-the-portable-way/

    【讨论】:

      【解决方案2】:

      您可以使用Custom Resource 进行这样的自定义配置。这使您可以在任何时候创建、更新或删除堆栈时灵活地运行自定义配置逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-25
        • 1970-01-01
        • 2019-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-10
        • 2019-02-16
        相关资源
        最近更新 更多