Настраиваемый стек Serverless.yml с выходной переменной cloudformation - PullRequest
0 голосов
/ 01 июня 2018

Я новичок для безсерверных, так что извините, если это очень просто.У меня проблема с созданием AMAZON COGNITO POOL, и я хочу использовать этот userPoolId в моем пользовательском блоке стека, чтобы соединить его с appsync.Ниже мой serverless.yml

 custom:
  accountId: 123xxxxxxxx
  appSync:
    apiId: 123xyzxxxxxxx # only required for update-appsync
    authenticationType: AMAZON_COGNITO_USER_POOLS
    userPoolConfig:
      awsRegion: ap-southeast-1
      defaultAction: ALLOW
      userPoolId: (here it only takes string but i want to reference)
  resources:
    Resources:
    # Cognito - User pool
    CognitoUserPool:
      Type: AWS::Cognito::UserPool
      Properties:
         UserPoolName: abc_xyz_pool
    # Cognito - Client
    CognitoUserPoolClient:
      Type: AWS::Cognito::UserPoolClient
      Properties:
        ClientName: abc_xyz_pool
        GenerateSecret: false
        UserPoolId:
          Ref: CognitoUserPool
    # Cognito - Identity
    CognitoIdentityPool:
      Type: AWS::Cognito::IdentityPool
      Properties:
        IdentityPoolName: sc_identity_pool
        AllowUnauthenticatedIdentities: false
        CognitoIdentityProviders:
          - ClientId:
              Ref: CognitoUserPoolClient
            ProviderName:
              Fn::GetAtt: [CognitoUserPool, ProviderName]

Я могу ссылаться в блоке ресурсов, но не могу ссылаться на него внутри пользовательского блока

1 Ответ

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

Пользовательский блок в serverless.yml оценивается до создания ресурсов и поэтому не может ссылаться на эти выходные данные.Даже в пределах CFN существуют ограничения на то, где и как вы ссылаетесь на них.

Однако вы можете ссылаться на выходные данные из других стеков CloudFormation.

Вы должны разделить свой серверный проект на два проекта, первый из которых устанавливаетпул пользователей, а второй использует эту инфраструктуру.

В вашем первом проекте у вас есть ресурсы пула пользователей, и вы экспортируете идентификатор для будущего использования в другие стеки, например:

Resources:
  Outputs:
    MyUserPoolId:
      Value:
        Ref: CognitoUserPool # Key name of user pool resource
      Export:
        Name: MyUserPoolId

InВаш второй проект, которому нужен идентификатор пула, вы бы импортировали его:

custom:
  appSync:
    userPoolConfig:
      userPoolId:
        Fn::ImportValue: MyUserPoolId

Ваш первый проект должен быть развернут для второго проекта для импорта экспортируемого значения.

Вы также можете использоватьПеременные ENV, но для этого все же требуется сначала установить пул пользователей.

...