我试图使用cloudformation文件在aws云中创建堆栈。
下面是我的第一个堆栈文件的片段。在Output部分,我创建了带有Lambda函数Arn值的导出变量。
Resources:
FileTriggerFunction:
Type: 'AWS::Lambda::Function'
Properties:
FunctionName:
'Fn::Join':
- '-'
- - 'Fn::ImportValue': !Sub '${EnvironmentStackName}-EnvironmentId'
- Arc
- FileTrigger
Description: ARC File Trigger for offline files
Runtime: dotnetcore2.1
MemorySize: 256
Handler: >- Offline.FileTrigger::Offline.FileTrigger.TriggerFileHandler::ReadFileFromS3
Role: !GetAtt FileTriggerLambdaRole.Arn
VpcConfig:
SecurityGroupIds:
- !Ref FileTriggerSecurityGroup
SubnetIds:
'Fn::Split':
- ','
- 'Fn::ImportValue': !Sub '${EnvironmentStackName}-PrivateSubnets'
Timeout: 300
Code: Offline.FileTrigger.zip
Outputs:
FileTriggerLambdaFunction:
Description: FileTrigger Lambda Function Arn
Value: !GetAtt FileTriggerFunction.Arn
Export:
Name: !Sub ${EnvironmentStackName}-FileTriggerFunctionArnStack是正确创建的,我能够在输出中看到导出变量。

现在,在下一个cloudformation中,我尝试使用ImportValue获得值,如下所示。
OfflineBucket:
Type: 'AWS::S3::Bucket'
Properties:
BucketName:
'Fn::Join':
- .
- - offline-files
- !Ref LowerBusinessUnit
- 'Fn::Sub': '${LowerEnvStackName}'
NotificationConfiguration:
LambdaConfigurations:
- Event: 's3:ObjectCreated:*'
- Function: !ImportValue
'Fn::Sub': '${EnvironmentStackName}-FileTriggerFunctionArn'在创建第二个堆栈时,我会得到跟踪错误。
CREATE_FAILED AWS::S3::Bucket OfflineBucket Property Function cannot be empty.看起来,ImportValue无法从导出的变量读取值。我已经证实了EnvironmentStackName是正确的。我也尝试将变量名直接放入,但仍然是相同的错误。
OfflineBucket:
Type: 'AWS::S3::Bucket'
Properties:
BucketName:
'Fn::Join':
- .
- - offline-files
- !Ref LowerBusinessUnit
- 'Fn::Sub': '${LowerEnvStackName}'
NotificationConfiguration:
LambdaConfigurations:
- Event: 's3:ObjectCreated:*'
- Function: !ImportValue ocsdebug-kd-environment-FileTriggerFunctionArn有人能告诉我我做错了什么吗?
发布于 2018-09-23 11:40:30
问题是NotificationConfiguration。AWS CF在创建桶时不支持这一点。因此,现在我只创建没有NotificationConfiguration的桶,然后使用aws添加通知配置。
发布于 2018-08-22 14:21:12
重要
当ImportValue包含!Sub时,不能使用它的简短形式。以下示例对于AWS CloudFormation有效,但对YAML无效:
!ImportValue
!Sub "${NetworkStack}-SubnetID" 相反,您必须使用完整的函数名,例如:
Fn::ImportValue:
!Sub "${NetworkStack}-SubnetID"https://stackoverflow.com/questions/51942429
复制相似问题