使用 CloudFormation 创建 IdentityPool

Posted

技术标签:

【中文标题】使用 CloudFormation 创建 IdentityPool【英文标题】:IdentityPool Creation with CloudFormation 【发布时间】:2017-12-15 14:18:48 【问题描述】:

我正在尝试按照位于 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;错误代码:无效参数异常;请求编号: bc058020-663b-11e7-9f2a-XXXXXXXXXX)

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

也可能是必要的:DependsOn: ScratchUserPoolClient。在没有它的情况下失败并出现同样的错误。

以上是关于使用 CloudFormation 创建 IdentityPool的主要内容,如果未能解决你的问题,请参考以下文章

使用 CloudFormation 创建 IdentityPool

如何修复与 AWS::CloudFormation::Init 一起创建 EC2 的 cloudformation 模板

标记使用 cloudformation 创建的 Beanstalk 环境

如何使用 CloudFormation 创建 OpsWorks 用户?

有没有办法使用 cloudformation 创建 aws lambda 执行角色?

使用Cloudformation创建技能时出错