首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法对导出变量进行ImportValue的cloudformation

无法对导出变量进行ImportValue的cloudformation
EN

Stack Overflow用户
提问于 2018-08-21 05:57:01
回答 2查看 4.6K关注 0票数 1

我试图使用cloudformation文件在aws云中创建堆栈。

下面是我的第一个堆栈文件的片段。在Output部分,我创建了带有Lambda函数Arn值的导出变量。

代码语言:javascript
复制
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

Stack是正确创建的,我能够在输出中看到导出变量。

现在,在下一个cloudformation中,我尝试使用ImportValue获得值,如下所示。

代码语言:javascript
复制
  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'

在创建第二个堆栈时,我会得到跟踪错误。

代码语言:javascript
复制
CREATE_FAILED   AWS::S3::Bucket OfflineBucket   Property Function cannot be empty.

看起来,ImportValue无法从导出的变量读取值。我已经证实了EnvironmentStackName是正确的。我也尝试将变量名直接放入,但仍然是相同的错误。

代码语言:javascript
复制
  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

有人能告诉我我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-23 11:40:30

问题是NotificationConfiguration。AWS CF在创建桶时不支持这一点。因此,现在我只创建没有NotificationConfiguration的桶,然后使用aws添加通知配置。

票数 1
EN

Stack Overflow用户

发布于 2018-08-22 14:21:12

根据新生力量官方文件::ImportValue函数:

重要

当ImportValue包含!Sub时,不能使用它的简短形式。以下示例对于AWS CloudFormation有效,但对YAML无效:

代码语言:javascript
复制
!ImportValue
  !Sub "${NetworkStack}-SubnetID" 

相反,您必须使用完整的函数名,例如:

代码语言:javascript
复制
Fn::ImportValue:
  !Sub "${NetworkStack}-SubnetID"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51942429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档