【问题标题】:Add Lambda trigger to imported Cognito User Pool with AWS CDK使用 AWS CDK 将 Lambda 触发器添加到导入的 Cognito 用户池
【发布时间】:2020-09-01 02:29:14
【问题描述】:

我正在尝试使用 AWS CDK 创建一个新的 lambda,该 lambda 与现有的 AWS 资源相关联,这些资源不是使用 CDK 创建的,并且是不同堆栈的一部分。

我可以使用 CDK 从现有的用户池中触发我的 lambda 吗?我已使用以下方法将用户池导入新堆栈:

const userPool = UserPool.fromUserPoolArn(this, 'poolName, 'arn:aws:cognito-idp:eu-west-1:1234567890:userpool/poolName')

但是,这给了我一个IUserPool,它没有addTrigger 方法。有没有办法将其转换为 UserPool 以便能够触发 lambda(因为我可以看到 UserPool 具有 addTrigger 方法)?

我已经看到有可能,例如授予我的新 lambda 使用 CDK 读取/写入现有 DynamoDB 表的权限。而且我不太了解这里的区别:DynamoDB 是现有的 AWS 资源,我使用 CDK 将其导入新堆栈,然后允许我的新 lambda 对其进行修改。 Cognito 用户池也是现有的 AWS 资源,我可以将其导入 CDK,但似乎无法修改它?为什么?

【问题讨论】:

  • 我正面临同样的问题。您找到解决方案了吗?
  • 很遗憾没有。我不得不手动添加触发器:(
  • 在那里引发了一个问题:github.com/aws/aws-cdk/issues/10002
  • 你可以试试这个:- const userPool:UserPool = UserPool.fromUserPoolArn(this,"poolName", "arn:aws:cognito-idp:eu-west-1:1234567890:userpool/poolName") as UserPool;

标签: amazon-web-services aws-lambda amazon-cognito aws-cdk


【解决方案1】:

这已在this issue 中讨论过。您可以使用自定义资源将触发器添加到现有用户池:

import * as CustomResources from '@aws-cdk/custom-resources';
import * as Cognito from '@aws-cdk/aws-cognito';
import * as Iam from '@aws-cdk/aws-iam';

const userPool = Cognito.UserPool.fromUserPoolId(this, "UserPool", userPoolId);

new CustomResources.AwsCustomResource(this, "UpdateUserPool", {
      resourceType: "Custom::UpdateUserPool",
      onCreate: {
        region: this.region,
        service: "CognitoIdentityServiceProvider",
        action: "updateUserPool",
        parameters: {
          UserPoolId: userPool.userPoolId,
          LambdaConfig: {
            PreSignUp: preSignUpHandler.functionArn
          },
        },
        physicalResourceId: CustomResources.PhysicalResourceId.of(userPool.userPoolId),
      },
      policy: CustomResources.AwsCustomResourcePolicy.fromSdkCalls({ resources: CustomResources.AwsCustomResourcePolicy.ANY_RESOURCE }),
    });

const invokeCognitoTriggerPermission = {
        principal: new Iam.ServicePrincipal('cognito-idp.amazonaws.com'),
        sourceArn: userPool.userPoolArn
}

preSignUpHandler.addPermission('InvokePreSignUpHandlerPermission', invokeCognitoTriggerPermission)

你也可以用这个方法修改other User Pool settings

【讨论】:

    猜你喜欢
    • 2020-09-19
    • 2022-07-21
    • 2016-09-22
    • 2018-12-11
    • 2018-09-08
    • 2021-05-20
    • 2018-08-23
    • 2019-05-15
    • 2020-02-25
    相关资源
    最近更新 更多