I try to create a lambda function for sending the email. The problem is I cannot get the email template path on Lambda. The error I received is:
"errorMessage": "ENOENT: no such file or directory, open '/var/task/email_template.ejs'"
Here are my project structure and my code:

service.js:
export const generateEmail = async (subject, text, email) => {
try {
const pathName = process.env.LAMBDA_TASK_ROOT
? path.resolve(process.env.LAMBDA_TASK_ROOT, 'email_template.ejs')
: path.resolve(__dirname, 'email_template.ejs')
const data = await ejs.renderFile(pathName, {
name: 'John Doe'
})
return {
from: '"Service" <[email protected]>',
to: email,
subject: subject,
text: text,
html: data
}
} catch (err) {
throw err
}
}
sendMail.js
exports.handler = async (event, context, callback) => {
if (event.httpMethod === 'POST' && event.body) {
const req = JSON.parse(event.body)
const { name, email } = req
if (!email.match(/^[^@]+@[^@]+$/)) {
console.log('Not sending: invalid email address', body.email)
return callback(null, {
statusCode: 400,
body: JSON.stringify({
error_code: 'invalid_email',
message: 'Cannot send. Your email is invalid'
})
})
}
const config = {
accessKeyId: process.env.ACCESS_KEY,
secretAccessKey: process.env.SECRET_KEY
}
const transporter = nodemailer.createTransport(ses(config))
const mailOptions = await generateEmail('Hello ✔', 'Hello world', email)
try {
await transporter.sendMail(mailOptions)
return callback(null, {
statusCode: 204
})
} catch (err) {
return callback(null, {
statusCode: 400,
body: JSON.stringify({
error_code: 'general_error',
message: 'Please try again later',
full_error: err
})
})
}
}
return callback(null, {
statusCode: 400,
body: JSON.stringify({
error_code: 'missing_parameters',
message: 'Please provide your name and email'
})
})
}
The generateEmail function works perfectly on locally but it did not work on lambda function.
Any help would be appreciated, thanks!
path.resolve(process.env.LAMBDA_TASK_ROOT, 'src/email_template.ejs')