Noman Dogar
Noman Dogar

Reputation: 1

Runtime.importModuleError aws cdk

I am creating a server less function with having crud operation on dynamoDb with aws appsync GraphQl and done configuration using aws configure and deployed on the cloud.After deploying trying to query in app sync getting error Runtime.importModuleError. In the lambda console layer is having 0

The AWS Cloud Development Kit (AWS CDK) is an open-source software development framework to define your cloud application resources using familiar programming languages

The AWS SDK for Java simplifies use of AWS Services by providing a set of libraries that are consistent and familiar for Java developers. It provides support for API lifecycle consideration such as credential management, retries, data marshaling, and serialization

import * as cdk from 'aws-cdk-lib';
import * as appsync from '@aws-cdk/aws-appsync-alpha';
import {aws_dynamodb as dynamodb} from 'aws-cdk-lib';
import * as lambda from "aws-cdk-lib/aws-lambda";
// import * as sqs from 'aws-cdk-lib/aws-sqs';

export class BackendStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
  
    
    const api = new appsync.GraphqlApi(this, 'Api', {
      name: 'demo',
      schema: appsync.Schema.fromAsset('graphql/schema.gql'),
      authorizationConfig: {
        defaultAuthorization: {
          authorizationType: appsync.AuthorizationType.IAM,
        },
      },
      xrayEnabled: true,
    });
//lambda function for 
const Lambda= new lambda.Function(this, "Lambda", {
  runtime: lambda.Runtime.NODEJS_16_X,
  code: lambda.Code.fromAsset("lambda"),
  handler: "index.handler",
  timeout: cdk.Duration.seconds(30),

})
const table=new dynamodb.Table(this, "Table", {

  partitionKey: {
    name: "id",
    type: dynamodb.AttributeType.STRING,
}
})


const lambdaDs=api.addLambdaDataSource("lambdaDatasource", Lambda)

lambdaDs.createResolver({
  typeName: "Query",
  fieldName: "getTodo",
})
lambdaDs.createResolver({
  typeName: "Mutation",
  fieldName: "addTodo",
})
lambdaDs.createResolver({
  typeName: "Mutation",
  fieldName: "deleteTodo",
})
lambdaDs.createResolver({
  typeName: "Mutation",
  fieldName: "updateTodo",
})


table.grantFullAccess(Lambda)
Lambda.addEnvironment('TABLE_NAME', table.tableName);



}

and used dynamoDB SDK for the crud operation and getting error in the app sync graphql query that Runtime.importModuleError

import { getTodo } from './getTodo'
import { updateTodo } from './update'
import { addTodo } from "./addTodo"
import { deleteTodo } from './delete'
import todo from "./todo"

type AppSyncEvent = {
info: {
    fieldName: string
},
arguments: {
    todoId: string,
    todo: todo
}
}


exports.handler = async (event: AppSyncEvent) => {
switch (event.info.fieldName) {
    case "getTodo":
        return await getTodo();
    case "createTodo":
        return await addTodo(event.arguments.todo);
    case "updateTodo":
        return await updateTodo(event.arguments.todo);
    case "deleteTodo":
        return await deleteTodo(event.arguments.todoId);
    default:
        return null;
}

}

   import { ScanCommand} from "@aws-sdk/client-dynamodb";   
   import  { dynamoDb}  from "./dbClient";
      
   export const getTodo = async () => {
     const params = {
       TableName: process.env.TABLE_NAME,
     
   
     };
     const command = new ScanCommand(params);
     try {
       const result = await dynamoDb.send(command)
       if (result.Items) { 
   
         return result.Items;
       } else {
         return null;
       }
     } catch (dbError) {
   
       console.log(dbError);
       return null;
     }
   }
    import * as AWS from "@aws-sdk/client-dynamodb";  
    import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
    
    
    export const REGION = "ap-south-1"; // For example, "us-east-1".
    // Create an Amazon DynamoDB service client object.
     export const ddbClient = new AWS.DynamoDB({ region: REGION });
    const marshallOptions = {
        // Whether to automatically convert empty strings, blobs, and sets to `null`.
        convertEmptyValues: false, // false, by default.
        
        removeUndefinedValues: false, // false, by default.
    
        convertClassInstanceToMap: false, // false, by default.
      };
      
      const unmarshallOptions = {
        // Whether to return numbers as a string instead of converting them to native JavaScript numbers.
        wrapNumbers: false, // false, by default.
      };
      
      const translateConfig = { marshallOptions, unmarshallOptions };
      
      // Create the DynamoDB document client.`
      const dynamoDb = DynamoDBDocumentClient.from(ddbClient, translateConfig);
      
      export  { dynamoDb };

Using Cloud Formation CDK for the execution of the Lambdas and Dynamo Db

Upvotes: 0

Views: 215

Answers (1)

Noman Dogar
Noman Dogar

Reputation: 1

I tried changing "type" :"module" but it gave me a typescript extension error.I replaced the following import type with require import it resolved

import {dynamodbClient} from aws-sdk/dyanmodb-Client

var Aws =require("aws-sdk")

Above worked for me so it was an error for import, I was importing dynamodb libraries using import then i changed it to require (es5) import it resolved my error

Upvotes: 0

Related Questions