【问题标题】:What does `|-` mean in cloudformation Sub function?cloudformation子函数中的`|-`是什么意思?
【发布时间】:2019-12-29 23:42:56
【问题描述】:

考虑示例 (source)

  # State machine for testing Athena Runner
  AthenaRunnerTestETLOrchestrator:
    Type: "AWS::StepFunctions::StateMachine"
    Properties:
      StateMachineName: AthenaRunnerTestETLOrchestrator
      DefinitionString:
        Fn::Sub:
          - |-
            {
              "StartAt": "Configure Athena Query",
              "States": {
                "Configure Athena Query":{
                  "Type": "Pass",
                  "Result": "{ \"AthenaQueryString\" : \"SELECT * FROM ${GlueTableName} limit 10;\", \"AthenaDatabase\": \"${GlueDatabaseName}\", \"AthenaResultOutputLocation\": \"${AthenaResultOutputLocation}\", \"AthenaResultEncryptionOption\": \"${AthenaResultEncryptionOption}\"}",
                  "Next": "Execute Athena Query"
                },
                "Execute Athena Query":{
                  "Type": "Task",
                  "Resource": "${AthenaRunnerActivityArn}",
                  "End": true
                }
              }
            }
          - {
            GlueDatabaseName: !Ref MarketingAndSalesDatabaseName,
            GlueTableName: !Ref MarketingTableName,
            AthenaRunnerActivityArn: !Ref AthenaRunnerActivity,
            AthenaResultOutputLocation: !Sub "s3://${SourceDataBucketName}/athena-runner-output/",
            AthenaResultEncryptionOption: "SSE_S3"
        }
      RoleArn: !GetAtt StateExecutionRole.Arn

函数Sub 应该接收参数数组:sourcereplacements,但是为什么|- 在这里传递?是yaml 还是aws Sub 功能特性?

【问题讨论】:

    标签: amazon-web-services yaml amazon-cloudformation


    【解决方案1】:

    我认为这是yaml 功能。我指的是YAML-Wikipedia,正如它所说:

    字符串不需要引号。有两种写多行字符串的方法,一种是保留换行符(使用 | 字符),另一种是折叠换行符(使用 > 字符),两者都后跟换行符。

    并参考How do I break a string over multiple lines?,可以得到

    如果您不想在末尾附加换行符,请使用 >- 或 |-。

    所以,|- 只是将此部分转换为 string

                {
                  "StartAt": "Configure Athena Query",
                  "States": {
                    "Configure Athena Query":{
                      "Type": "Pass",
                      "Result": "{ \"AthenaQueryString\" : \"SELECT * FROM ${GlueTableName} limit 10;\", \"AthenaDatabase\": \"${GlueDatabaseName}\", \"AthenaResultOutputLocation\": \"${AthenaResultOutputLocation}\", \"AthenaResultEncryptionOption\": \"${AthenaResultEncryptionOption}\"}",
                      "Next": "Execute Athena Query"
                    },
                    "Execute Athena Query":{
                      "Type": "Task",
                      "Resource": "${AthenaRunnerActivityArn}",
                      "End": true
                    }
                  }
                }
    

    【讨论】:

      【解决方案2】:

      |- 是一个yaml 功能,它表示保留换行符且末尾没有换行符的多行字符串:

      How do I break a string over multiple lines?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        • 2014-01-29
        • 2015-01-12
        • 1970-01-01
        相关资源
        最近更新 更多