es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AWS CDK stack. La función regionalFact no es válida.

Estoy trabajando con AWS CDK para typescript.
Tengo mi pila que consiste en solo un rol

export class ModelServingStack extends BaseStack {
  constructor(scope: cdk.Construct, props: StackCommonProps, stackConfig: any) {
    const role: iam.IRole = this.createIamRole(<code>ModelEndpoint-Role</code>);
  }
}

private createIamRole(roleBaseName: string): iam.IRole {
  return new iam.Role(this, "MyRole", {
    assumedBy: new iam.ServicePrincipal("sns.amazonaws.com"),
  });
}

Cuando ejecuto el comando para implementar cdk deploy obtengo el siguiente error:

/workspaces/Zeus/node_modules/@aws-cdk/aws-iam/lib/principals.ts:540
    return stack.regionalFact(
                 ^
TypeError: Error de resolución: Error de resolución: Error de resolución: stack.regionalFact no es una función.
Pila de creación de objetos:
  en trazas de pila deshabilitadas.
Pila de creación de objetos:
  en trazas de pila deshabilitadas.
    en ServicePrincipalToken.resolve (/workspaces/Zeus/node_modules/@aws-cdk/aws-iam/lib/principals.ts:540:18)
    en RememberingTokenResolver.resolveToken (/workspaces/Zeus/node_modules/@aws-cdk/core/lib/resolvable.ts:80:24)
    en RememberingTokenResolver.resolveToken (/workspaces/Zeus/node_modules/@aws-cdk/core/lib/private/resolve.ts:286:18)
    en resolve (/workspaces/Zeus/node_modules/@aws-cdk/core/lib/private/resolve.ts:212:51)
    en Object.resolve [as mapToken] (/workspaces/Zeus/node_modules/@aws-cdk/core/lib/private/resolve.ts:119:77)
    en TokenizedStringFragments.mapTokens (/workspaces/Zeus/node_modules/@aws-cdk/core/lib/string-fragments.ts:65:33)
    en RememberingTokenResolver.resolveString (/workspaces/Zeus/node_modules/@aws-cdk/core/lib/resolvable.ts:99:22)
    en RememberingTokenResolver.resolveString (/workspaces/Zeus/node_modules/@aws-cdk/core/lib/private/resolve.ts:290:23)
    en resolve (/workspaces/Zeus/node_modules/@aws-cdk/core/lib/private/resolve.ts:170:48)
    en Object.resolve (/workspaces/Zeus/node_modules/@aws-cdk/core/lib/private/resolve.ts:119:77)

Edición

El problema fue una incompatibilidad entre los paquetes aws-cdk instalados y el paquete global cdk.
Asegúrese de tener ambos actualizados a la versión más reciente.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que hay un problema con ServicePrincipalToken en el paquete @aws-cdk/aws-iam. El mensaje de error indica que stack.regionalFact no es una función, lo que sugiere que puede haber un problema al resolver la región.

    Una solución podría ser actualizar los paquetes aws-cdk para asegurarse de que se instale la última versión. Esto se podría hacer utilizando el comando npm update en el directorio del proyecto.

    Otra solución potencial podría ser establecer explícitamente la región al crear el objeto ServicePrincipal. Esto se podría hacer pasando un objeto RegionInfo al constructor de ServicePrincipal, de la siguiente manera:

    const servicePrincipal = new iam.ServicePrincipal('sns.amazonaws.com', {
      region: 'us-east-1'
    });
    

    Esto aseguraría que la región se resuelva correctamente al crear el IamRole.

    Si ninguna de estas soluciones funciona, podría valer la pena investigar más para ver si hay un problema más específico con la configuración o el entorno.

Comments are closed.