Amazon web services 使用CloudFormation将经过身份验证的文件下载到S3存储桶
下载到EC2实例的经过身份验证的文件随处可见。但我想将文件下载到bucket中,而不是下载到和EC2实例中 比如说,我正在构建一个无服务器的静态网站,我的index.html可以在git repo或其他bucket中获得。如何将该文件下载到cloudformation脚本中新创建的bucket中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
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角色。中提供了完整的示例实现