gpt4 book ai didi

amazon-web-services - 如何通过 CloudFormation YAML 将堆栈导出的现有 S3 存储桶导入另一个堆栈

转载 作者:行者123 更新时间:2023-12-03 07:35:18 25 4
gpt4 key购买 nike

像下面的 CloudformationYAML 一样有效。我最终得到了一个 lambda 函数,只要 S3 存储桶上出现新对象,就会触发该函数。

Resources:
myS3BucketResource:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref myS3BucketName
AccessControl: Private
VersioningConfiguration:
Status: Enabled

LambdaFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: main.handler
CodeUri:
Bucket: !Ref CodeBucketName
Key: !Ref CodeKey
Role: !GetAtt
- LambdaRole
- Arn
Runtime: nodejs12.x
Timeout: !Ref LambdaTimeOut
MemorySize: !Ref LambdaMemory
FunctionName: !Sub '${Environment}-${FunctionName}'
Events:
S3Event:
Type: S3
Properties:
Bucket: !Ref myS3BucketResource
Events:
- 's3:ObjectCreated:Put'

但是,我需要做的是让 lambda 函数使用现有的 S3 存储桶,该存储桶是由另一个堆栈创建的。请注意,在上面,S3 存储桶是由创建 lambda 的同一个 CF 模板创建的。

我似乎不能只引用 S3Event 的 Bucket 属性中的 S3 存储桶名称,如下所示:

      Events:
S3Event:
Type: S3
Properties:
Bucket: !Ref myS3BucketName
Events:
- 's3:ObjectCreated:Put'

所以我认为这是因为它需要是一个资源而不是一个字符串,至少基于上面可以工作的 CF 模板。

我读到了有关 Fn::ImportValue 的内容,用于导入由另一个堆栈导出的内容 - 这就是我需要使用的 S3 存储桶的情况。但我不知道如何在 CF 模板上指定它。

例如,在下面尝试过,但它不起作用。没有 Type: AWS::S3::Bucket 行。

Resources:
myS3BucketResource:
Type: AWS::S3::Bucket
Properties:
Bucket:
Fn::ImportValue: !Sub "${exportedS3Bucket}"

任何线索将不胜感激。如果有一种方法可以指定 Bucket 而无需通过导入路由,那么这确实是最好的。

谢谢!

最佳答案

However, what I need to do is to have the lambda function use an already existing S3 bucket, which was created by another stack.

假设您可以控制 S3 存储桶 存储桶堆栈,您可以 export它在其他堆栈中可见,以便它们可以 imported给他们。您已经正确指出了这一点

由于您尚未提供导出其输出的存储桶堆栈的代码,因此我必须根据示例来回答我的问题。在示例中,请注意 exportedBucket 名称的使用。

桶堆栈:

Resources:
myS3BucketResource:
Type: AWS::S3::Bucket

Outputs:
Name:
Value: !Ref myS3BucketResource
Export:
Name: exportedBucket # <---- export bucket

lambda stack 它将使用存储桶堆栈中的存储桶:

LambdaFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: main.handler
CodeUri:
Bucket: !Ref CodeBucketName
Key: !Ref CodeKey
Role: !GetAtt
- LambdaRole
- Arn
Runtime: nodejs12.x
Timeout: !Ref LambdaTimeOut
MemorySize: !Ref LambdaMemory
FunctionName: !Sub '${Environment}-${FunctionName}'
Events:
S3Event:
Type: S3
Properties:
Bucket: !ImportValue exportedBucket # <---- import bucket
Events:
- 's3:ObjectCreated:Put'

关于amazon-web-services - 如何通过 CloudFormation YAML 将堆栈导出的现有 S3 存储桶导入另一个堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62056443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com