【发布时间】:2021-05-06 02:35:44
【问题描述】:
在 Cloudformation 模板中,我定义了两个 S3 存储桶。
Bucket1:
Type: AWS::S3::Bucket
Properties:
...
Bucket2:
Type: AWS::S3::Bucket
Properties:
...
Outputs:
Bucket1:
Description: S3 Bucket
Value: !Ref Bucket1
Export:
Name: !Sub "${AWS::StackName}:Bucket1"
Bucket2:
Description: S3 Bucket
Value: !Ref Bucket2
Export:
Name: !Sub "${AWS::StackName}:Bucket2"
我在两个不同的 cloudformation 模板中使用这些导出的存储桶。
模板 1
Parameters:
LoaderCodeBucket:
Type: String
Resources:
MyLambdaFunction:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket:
Fn::ImportValue:
!Sub "${LoaderCodeBucket}:Bucket1"
模板 2
Parameters:
ProcessorCodeBucket:
Type: String
Resources:
MyOtherLambdaFunction:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket:
Fn::ImportValue:
!Sub "${ProcessorCodeBucket}:Bucket2"
模板 1 通过 aws cloudformation validate-template --template-body ... 而模板 2 由于
模板错误:Fn::ImportValue 中的属性不能依赖于任何资源、导入的值或 Fn::GetAZs。
唯一的区别是模板 2 中的 lambda 函数用于同样在模板 2 中定义的 aws 分析应用程序。
我确定是 S3 存储桶引起了问题,因为当我删除那段代码时,它通过了验证检查。
我一直在使用这个网站来尝试调试这个问题,但似乎没有一个问题能回答这个特定的问题。
这是在同一地区/同一帐户中。
我的问题是: 为什么当模板 1 通过且没有错误时,这段特定的代码(模板 2)会抛出模板错误?
【问题讨论】:
-
ProcessorCodeBucket在哪里被分配?差异可能在于ProcessorCodeBucket的填充方式与LoaderCodeBucket的填充方式 -
分配方式是什么意思?存储桶是从外部存储库中填充的,该存储库会上传外部存储库中代码的 zip 文件。两个存储桶都是从同一个外部存储库中填充的。
标签: amazon-web-services amazon-s3 aws-lambda yaml amazon-cloudformation