В Cloudformation YAML используйте Ref в многострочной строке (? Use Fn: Sub) - PullRequest
0 голосов
/ 27 апреля 2018

Представьте, что у вас есть ресурс aws, такой как

  Resources:
    IdentityPool:
      Type: "AWS::Cognito::IdentityPool"
      Properties:
        IdentityPoolName: ${self:custom.appName}_${self:provider.stage}_identity
        CognitoIdentityProviders:
          - ClientId:
              Ref: UserPoolClient

Ссылка для "AWS :: Cognito :: IdentityPool" возвращает идентификатор этого ресурса. Теперь допустим, что я хочу сослаться на этот идентификатор в многострочной строке. Я пробовал

Outputs:  
  AmplifyConfig:
    Description: key/values to be passed to Amplify.configure(config);
    Value: |
      {
        'aws_cognito_identity_pool_id': ${Ref: IdentityPool}, ##<------ Error
        'aws_sign_in_enabled': 'enable',
        'aws_user_pools_mfa_type': 'OFF',
      }

Я также пытался использовать Fn: Sub, но безуспешно.

   AmplifyConfig:
      Description: key/values to be passed to Amplify.configure(config);
      Value: 
        Fn::Sub 
          - |
            {
              'aws_cognito_identity_pool_id': '${Var1Name}',
              'aws_sign_in_enabled': 'enable',
            }
          - Var1Name:
              Ref: IdentityPool

Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Использование символа трубы | в YAML превращает все следующие строки с отступом в многострочную строку.

Труба в сочетании с !Sub позволит вам использовать:

  • ваши ресурсы Ref возвращаемое значение легко, как ${YourResource}
  • их Fn::GetAtt возвращают значения только с периодом ${YourResource.TheAttribute}
  • любой псевдопараметр, такой же как ${AWS:region}

Так же просто, как и !Sub |, переход к следующей строке и добавление правильного отступа. Пример: * +1021 *

Resources:
  YourUserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      UserPoolName: blabla

Outputs:
  AmplifyConfig:
    Description: key/values to be passed to Amplify.configure(config);
    Value: !Sub |
      {
        'aws_cognito_identity_pool_id': '${YourUserPool}',
        'aws_sign_in_enabled': 'enable',
        'aws_user_pools_mfa_type': 'OFF',
      }
  AdvancedUsage:
    Description: use Pseudo Parameters and/or resources attributes
    Value: !Sub |
      {
        'aws_region': '${AWS::Region}',
        'user_pool_arn': '${YourUserPool.Arn}',
      }
0 голосов
/ 25 июня 2018

Используя YAML, вы можете написать это просто:

Outputs:  
  AmplifyConfig:
    Description: key/values to be passed to Amplify.configure(config);
    Value: !Sub '
      {
        "aws_cognito_identity_pool_id": "${IdentityPool}",
        "aws_sign_in_enabled": "enable",
        "aws_user_pools_mfa_type": "OFF",
      }'
0 голосов
/ 28 апреля 2018

Я узнал, как это сделать, используя Join

AmplifyConfig:
  Description: key/values to be passed to Amplify.configure(config);
  Value:
    Fn::Join:
      - ''
      - - "{"
        - "\n  'aws_cognito_identity_pool_id':"
        - Ref : IdentityPool
        - "\n  'aws_user_pools_id':"
        - Ref : UserPool
        - "\n  'aws_user_pools_web_client_id':"
        - Ref : UserPoolClient
        - ",\n  'aws_cognito_region': '${self:provider.region}'"
        - ",\n  'aws_sign_in_enabled': 'enable'"
        - ",\n  'aws_user_pools': 'enable'"
        - ",\n  'aws_user_pools_mfa_type': 'OFF'"
        - "\n}"

Это работает, но довольно уродливо. Я собираюсь на время оставить этот ответ неприемлемым, чтобы посмотреть, сможет ли кто-нибудь показать, как это сделать с помощью Fn :: Sub.

...