gre*_*Tea 6 amazon-web-services amazon-cognito aws-lambda aws-cdk
我正在尝试使用 AWS CDK 创建一个与现有 AWS 资源相关联的新 lambda,这些资源不是使用 CDK 创建的并且属于不同堆栈的一部分。
我可以使用 CDK 从已经存在的用户池中触发我的 lambda 吗?我已使用以下方法将用户池导入到我的新堆栈中:
const userPool = UserPool.fromUserPoolArn(this, 'poolName, 'arn:aws:cognito-idp:eu-west-1:1234567890:userpool/poolName')
但是,这给了我一个IUserPool没有addTrigger方法的方法。有没有办法将其转换为 aUserPool以便能够触发 lambda(因为我可以看到它UserPool具有该addTrigger方法)?
我已经看到,例如可以使用 CDK 授予我的新 lambda 读取/写入现有 DynamoDB 表的权限。而且我不太明白这里的区别:DynamoDB 是一个现有的 AWS 资源,我正在使用 CDK 将其导入新堆栈,然后允许我的新 lambda 对其进行修改。Cognito 用户池也是一个现有的 AWS 资源,我可以在 CDK 中导入它,但似乎我无法修改它?为什么?
本期对此进行了讨论。您可以使用自定义资源将触发器添加到现有用户池:
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)
Run Code Online (Sandbox Code Playgroud)
您还可以使用此方法修改其他用户池设置。
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |