Estoy tratando de usar AWS CDK para crear una nueva lambda vinculada a recursos de AWS ya existentes que no se crearon con CDK y que forman parte de una pila diferente.
¿Puedo activar mi lambda desde un grupo de usuarios ya existente usando CDK? He importado el grupo de usuarios a mi nueva pila usando:
const userPool = UserPool.fromUserPoolArn(this, 'poolName, 'arn:aws:cognito-idp:eu-west-1:1234567890:userpool/poolName')
Sin embargo, esto me da un IUserPool que no tiene el método addTrigger . ¿Hay alguna manera de convertir esto en un UserPool para poder activar la lambda (ya que puedo ver que UserPool tiene el método addTrigger )?
He visto que es posible, por ejemplo, otorgar permisos para que mi nueva lambda lea/escriba en una tabla DynamoDB existente usando CDK. Y realmente no entiendo la diferencia aquí: DynamoDB es un recurso de AWS existente y lo estoy importando a la nueva pila usando CDK y luego permitiendo que mi nueva lambda lo modifique. El grupo de usuarios de Cognito también es un recurso de AWS existente y puedo importarlo en CDK, pero parece que no puedo modificarlo. ¿Por qué?
Esto fue discutido en este número . Puede agregar activadores a un grupo de usuarios existente utilizando un recurso personalizado:
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)También puede modificar otras configuraciones del grupo de usuarios con este método.