Amazon s3 aws cloudformation无法导入导出变量的值

Amazon s3 aws cloudformation无法导入导出变量的值,amazon-s3,aws-lambda,amazon-cloudformation,Amazon S3,Aws Lambda,Amazon Cloudformation,我正在尝试使用cloudformation yaml文件在aws云中创建堆栈 下面是我的第一个堆栈文件的一个片段。在输出部分,我使用Lambda函数Arn的值创建导出变量 Resources: FileTriggerFunction: Type: 'AWS::Lambda::Function' Properties: FunctionName: 'Fn::Join': - '-' - - 'Fn::Impor

我正在尝试使用cloudformation yaml文件在aws云中创建堆栈

下面是我的第一个堆栈文件的一个片段。在输出部分,我使用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}-FileTriggerFunctionArn
堆栈已正确创建,并且我能够在输出中看到导出变量

现在在下一个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
有人能告诉我我做错了什么吗?

根据功能:

重要

你不能使用缩写形式的!ImportValue,当它包含!Sub.以下示例适用于AWS CloudFormation,但不适用于YAML:

!ImportValue
  !Sub "${NetworkStack}-SubnetID" 
相反,必须使用完整的函数名,例如:

Fn::ImportValue:
  !Sub "${NetworkStack}-SubnetID"

问题在于NotificationConfiguration。AWS CF在创建铲斗时不支持此操作。 因此,现在我只创建bucket而不创建NotificationConfiguration,稍后使用aws cli添加通知配置