使用CloudFormation创建IdentityPool

时间:2017-07-11 13:26:19

标签: serverless-framework aws-cognito amazon-cloudformation

我正在尝试按照位于http://serverless-stack.com/chapters/create-a-cognito-identity-pool.html的教程创建标识池,并使用cloudformation记录创建,以便在完成后可以轻松撤消所有内容。但是,我无法找到任何显示如何使用模板语法有效执行此操作的示例。我目前拥有的是以下

ScratchUserPool:
      Type: AWS::Cognito::UserPool
      Properties:
        UserPoolName: notes-user-pool

ScratchUserPoolClient:
  Type: AWS::Cognito::UserPoolClient
  Properties:
    ClientName: notes-client
    ExplicitAuthFlows: [ADMIN_NO_SRP_AUTH]
    UserPoolId:
      Ref: ScratchUserPool

ScratchIdentityPool:
  Type: AWS::Cognito::IdentityPool
  Properties:
    IdentityPoolName: ScratchIdentityPool
    AllowUnauthenticatedIdentities: false
    CognitoIdentityProviders:
      - ClientId:
          Ref: ScratchUserPoolClient
        ProviderName:
          Ref: ScratchUserPool

尝试创建ScratchIdentityPool时,部署步骤失败。我收到一条错误声明:

  

配置堆栈时发生错误:ScratchIdentityPool -   无效的Cognito身份提供商(服务:AmazonCognitoIdentity;   状态代码:400;错误代码:InvalidParameterException;请求ID:   bc058020-663b-11e7-9f2a-XXXXXXXXXX)

我没有正确引用客户端或提供商名称吗?

1 个答案:

答案 0 :(得分:6)

在我发布问题后几乎立即,我想我能够回答它。我的身份池的问题是我需要以下列方式引用提供者名称:

ScratchIdentityPool:
  Type: AWS::Cognito::IdentityPool
  Properties:
    IdentityPoolName: ScratchIdentityPool
    AllowUnauthenticatedIdentities: false
    CognitoIdentityProviders:
      - ClientId:
          Ref: ScratchUserPoolClient
        ProviderName:
          Fn::GetAtt: [ScratchUserPool, ProviderName]

我需要使用特殊的亚马逊函数Fn::GetAtt才能使其正常工作。