Skip to content

Function creation failing when adding getAmplifyDataClientConfig: Error: EPERM: operation not permitted, rename.... #2988

@ritxweb

Description

@ritxweb

Environment information

System:
  OS: Windows 10 10.0.19045
  CPU: (8) x64 Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
  Memory: 1.63 GB / 7.92 GB
Binaries:
  Node: 22.13.0 - C:\Program Files\nodejs\node.EXE
  Yarn: undefined - undefined
  npm: 11.4.2 - C:\Program Files\nodejs\npm.CMD
  pnpm: 9.6.0 - C:\Program Files\nodejs\pnpm.CMD
NPM Packages:
  @aws-amplify/auth-construct: 1.8.1
  @aws-amplify/backend: 1.16.1
  @aws-amplify/backend-ai: Not Found
  @aws-amplify/backend-auth: 1.7.1
  @aws-amplify/backend-cli: 1.8.0
  @aws-amplify/backend-data: 1.6.1
  @aws-amplify/backend-deployer: 2.1.3
  @aws-amplify/backend-function: 1.14.1
  @aws-amplify/backend-output-storage: 1.3.1
  @aws-amplify/backend-secret: 1.4.0
  @aws-amplify/backend-storage: 1.4.1
  @aws-amplify/cli-core: 2.2.1
  @aws-amplify/client-config: 1.8.0
  @aws-amplify/data-construct: 1.16.3
  @aws-amplify/data-schema: 1.21.1
  @aws-amplify/deployed-backend-client: 1.8.0
  @aws-amplify/form-generator: 1.2.4
  @aws-amplify/model-generator: 1.2.0
  @aws-amplify/platform-core: 1.10.0
  @aws-amplify/plugin-types: 1.11.0
  @aws-amplify/sandbox: 2.1.2
  @aws-amplify/schema-generator: 1.4.0
  @aws-cdk/toolkit-lib: 1.1.1
  aws-amplify: 6.15.6
  aws-cdk-lib: 2.215.0
  typescript: 5.9.2
AWS environment variables:
  AWS_PROFILE = -----
No CDK environment variables

Describe the bug

I added a function following exactly the steps in the tutorial and in the moment of adding the calls to cretate the variables to access the graphql api from the lamdba function or access the cognito user pools I get the same error when saving and rebuilding the sandbox:

21:41:29 ✔ Backend synthesized in 5.63 seconds
21:41:29 [ERROR] [BackendBuildError] Unable to deploy due to CDK Assembly Error
∟ Caused by: [AssemblyError] Assembly builder failed
∟ Caused by: [NodeJSFunctionConstructInitializationError] Failed to instantiate nodejs function construct
∟ Caused by: [ValidationError] Failed to bundle asset amplify-........-sandbox-ef95084b29/function/add-user-lambda/Code/Stage, bundle output is located at C:..........amplify\artifacts\cdk.out\bundling-temp-ffbd14bf139d5667b0541b93639a915e9e3a348bb61f09e5beb42326bd548911-building: Error: EPERM: operation not permitted, rename 'C:...........amplify\artifacts\cdk.out\bundling-temp-ffbd14bf139d5667b0541b93639a915e9e3a348bb61f09e5beb42326bd548911-building' -> 'C:.............amplify\artifacts\cdk.out\bundling-temp-ffbd14bf139d5667b0541b93639a915e9e3a348bb61f09e5beb42326bd548911'
Resolution: See the underlying error message for more details. Use --debug for additional debugging information.
Resolution: Check the Caused by error and fix any issues in your backend code

Reproduction steps

Define a function in amplify/auth/add-user/resource.ts:

import { defineFunction } from '@aws-amplify/backend';

export const addUser = defineFunction({
  name: 'add-user'
});

Add the handler in amplify/auth/add-user/handler.ts:

import type { Schema } from "../../data/resource";
import { getAmplifyDataClientConfig } from '@aws-amplify/backend/function/runtime';
import { Amplify } from 'aws-amplify';
import { env } from '$amplify/env/add-user';
import { generateClient } from "aws-amplify/data";
import { CognitoIdentityProviderClient, AdminCreateUserCommand, AdminAddUserToGroupCommand, AdminDeleteUserCommand, DeliveryMediumType } from '@aws-sdk/client-cognito-identity-provider';

const { resourceConfig, libraryOptions } = await getAmplifyDataClientConfig(env);
Amplify.configure(resourceConfig, libraryOptions);
const client = new CognitoIdentityProviderClient();
const clientApi = generateClient<Schema>();

export const handler: Schema["addUser"]["functionHandler"] = async (event) => {
  return 'Hello, World!';
};

Ensure permissions are set to access auth in amplify/auth/resource.ts:

import { defineAuth } from '@aws-amplify/backend';
import { addUser } from './add-user/resource';

export const auth = defineAuth({
  loginWith: {
    email: true
  },
  groups: ["ADMINISTRATORS", "EXPOSITORS"],
  access: (allow) => [
    allow.resource(addUser).to(["createUser", "addUserToGroup", "deleteUser"])
  ]
});

Also add permissions to access data in amplify/data/resource.ts:

import { type ClientSchema, a, defineData } from '@aws-amplify/backend';
import { addUser } from '../auth/add-user/resource';

const schema = a.schema({
  
  Administrator: a
    .model({
      sub: a.id().required(),
      firstName: a.string().required(),
      lastName: a.string().required(),
      email: a.email().required(),
      phone: a.string()
    })
    .identifier(['sub'])
    .authorization(allow => [
      allow.group('ADMINISTRATORS'),
      allow.group('EXPOSITORS').to(['read'])]),

  addUser: a
    .mutation()
    .arguments({
      email: a.email().required(),
      firstName: a.string().required(),
      lastName: a.string().required(),
      phone: a.string(),
      admin: a.boolean()
    })
    .returns(a.string())
    .authorization(allow => [
      allow.group('ADMINISTRATORS')])
    .handler(a.handler.function(addUser)),
})
.authorization(allow => [
  allow.resource(addUser)
]);

export type Schema = ClientSchema<typeof schema>;

export const data = defineData({
  schema
});

Finally declare function in amplify/backend.ts:

import { defineBackend } from '@aws-amplify/backend';
import { auth } from './auth/resource';
import { data } from './data/resource';
import { addUser } from './auth/add-user/resource';

const backend = defineBackend({
  auth,
  data,
  addUser
});

Run the sandbox and get the error:

npx ampx sandbox

Metadata

Metadata

Assignees

No one assigned

    Labels

    pending-triageIncoming issues that need categorization

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions