Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用CloudFormation将经过身份验证的文件下载到S3存储桶_Amazon Web Services_Amazon S3_Amazon Cloudformation_Aws Serverless - Fatal编程技术网

Amazon web services 使用CloudFormation将经过身份验证的文件下载到S3存储桶

Amazon web services 使用CloudFormation将经过身份验证的文件下载到S3存储桶,amazon-web-services,amazon-s3,amazon-cloudformation,aws-serverless,Amazon Web Services,Amazon S3,Amazon Cloudformation,Aws Serverless,下载到EC2实例的经过身份验证的文件随处可见。但我想将文件下载到bucket中,而不是下载到和EC2实例中 比如说,我正在构建一个无服务器的静态网站,我的index.html可以在git repo或其他bucket中获得。如何将该文件下载到cloudformation脚本中新创建的bucket中 Ref:您可以使用。这使您可以在创建、更新或删除堆栈时灵活地运行自定义资源调配逻辑。嗯,在搜索其他非常不相关的内容时偶然发现了答案 答案正是@jarmod所建议的,我的答案仅仅是指向AWS实现的现有cl

下载到EC2实例的经过身份验证的文件随处可见。但我想将文件下载到bucket中,而不是下载到和EC2实例中

比如说,我正在构建一个无服务器的静态网站,我的index.html可以在git repo或其他bucket中获得。如何将该文件下载到cloudformation脚本中新创建的bucket中


Ref:

您可以使用。这使您可以在创建、更新或删除堆栈时灵活地运行自定义资源调配逻辑。

嗯,在搜索其他非常不相关的内容时偶然发现了答案

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

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

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

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

  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
请注意,对象具有一个路径列表,因此,如果模板中有多个Lambda函数,则可以将所有zip添加到单个CopyZips资源中

现在声明Lambda函数并将其指向新创建的bucket

创建函数时,我们将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角色。中提供了完整的示例实现