在AWS Lambda上进行测试时,遇到了以下错误消息。
Unable to import module 'lambda_handler': No module named 'cx_Oracle'
这个lambda由python代码组成,但是在我的本地主机上特别有效。
另外,我pip install cx_Oracle -t ./在相同级别的lambda_handler.py文件路径上执行了命令,并且上传的zip文件的文件路径在该路径下。
./lambda_handler.py
./cx_Oracle.cp36-win_amd64.pyd
./cx_Oracle-6.4.1.dist-info/*
./cx_Oracle-doc/*
Run Code Online (Sandbox Code Playgroud)
我不明白为什么lambda_handler只能cx_Oracle library在lambda函数中找不到。
我想念什么?
import cx_Oracle
import boto3
from docutils.nodes import row
def lambda_handler(event, context):
url = 'myOracleUrl'
user = 'myOralceUserId'
pwd = 'myOraclePwd'
con = cx_Oracle.connect(user + '/' + pwd + '@' + url)
cur = con.cursor()
cur.execute("select 1 from dual")
cur.close()
con.close()
return {
"statusCode": 200,
"body": context.invoked_function_arn
}
Run Code Online (Sandbox Code Playgroud) 我正在考虑启动一个开源项目,以开发基于AWS技术的无服务器CMS。我想将DynamoDB作为存储数据的后端,而不是使用简单的markdown CMS。我想从这里的社区中了解这个想法是否合理并且听起来不错,因为我在AWS方面有一定的经验,因此对它并不完全坚定并寻求帮助。
我将通过Lambda在ASP.NET MVC Core中开发CMS。此CMS将具有一个外部API,该外部API将是ASP.NET MVC Core Web API。
我还需要考虑运行此CMS的成本,例如,您认为与传统CMS相比,或者DynamoDB是否可以榨取大量果汁,运行起来会便宜吗!!!
我正在编写供内部使用的API,并且这是我第一次使用无服务器框架。我正在Node.js中编写Lambda函数,并使用AWS API Gateway进行连接。
在某些情况下,我想返回一个自定义错误消息,而我试图编写一个允许我执行此操作的函数。现在,每当Lambda进程失败时,我都会从API收到一条标准消息。在代码中,如果我尝试使用杀死进程process.exit(1),即使我已经使用callback()以下命令返回了错误,也会收到一般错误:
{
"message": "Internal server error"
}
Run Code Online (Sandbox Code Playgroud)
如果不使用process.exit(1),我会callback()在日志中看到通过错误返回的错误,但是该过程继续进行,最终超时:
{
"message": "Endpoint request timed out"
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种使用该callback()方法返回错误的方法,但是到目前为止,我还没有成功。我试过这种方法:
async function return_error(callback, context, error, returnCode){
console.error("FATAL ERROR: ", error);
let ErrorObj = {
errorType : "InternalServerError",
httpStatus : 500,
requestId : context.awsRequestId,
errorMessage : error
}
callback(JSON.stringify(ErrorObj));
process.exit(1);
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
async function return_error(callback, error, returnCode){
console.error("FATAL ERROR: ", error);
callback({
isBase64Encoded: false,
statusCode: returnCode,
headers: { 'Content-Type': 'application/json' …Run Code Online (Sandbox Code Playgroud) node.js aws-lambda aws-api-gateway serverless-framework serverless
因此,当我打开引用托管ASP.NET Web API 2.0项目的文件时,出现错误:
可能存在跨域(CORS)问题?URL来源(https://secreturl.amazonaws.com)与页面(file://)不匹配。检查服务器是否返回正确的“ Access-Control-Allow- *”头。
我仅获得为HTTP请求管道启用核心的答案,而没有获得针对(file://)的答案。我从index.html文件中打开文件,其路径为:file:///C:/Users/PCName/desktop/index.html我认为必须在Startup.cs文件中启用CORSASP.NET Core Web API 2.0
我期待使用PyCharm在python中开发一些AWS lambda函数。如何设置我的IDE以在本地开发和测试功能?专家可以指导如何设置吗?任何链接或相关教程将非常有帮助。
我正在使用Cognito,API网关和授权者。授权者配置为缓存5分钟以提高性能。我觉得这是一个不错的功能。
我知道授权者是将身份验证逻辑放在一个地方的好方法,并且应用程序可以假定用户已被授权。但是,我对此表示怀疑。
渗透测试报告建议,一旦注销,令牌就不能使用。因此,为了安全起见,我不应该启用授权者缓存吗?这也意味着所有经过身份验证的API都要经过一个lambda授权者的开销...
同样从编码的角度来看,使用很难进行端到端测试的授权者真的是一个好主意吗?我可以将lambda函数作为一个单元进行测试。但是对我来说更重要的是它们已连接到正确的API。我目前无法看到可以轻松测试的方法。
另一个问题是查看代码,我再也无法轻易分辨出需要什么授权……我必须查看应该附加哪个授权者(例如CloudFormation),然后查看lambda代码本身。
使用授权者有什么好处吗?或实际上最佳做法是什么?
我想在AWS lambda上构建适当的打字稿项目。
现在,我有以下定义:
export type HttpResponse = {
statusCode: number;
headers: {};
body: string;
}
export async function readCollection (event, context, callback): Promise<HttpResponse>{
console.log(event); // Contains incoming request data (e.g., query params, headers and more)
const data = [
{
id: "a7b5bf50-0b5b-11e9-bc65-6bfc39f23288",
name: "some thing",
uri: `/notifications/a7b5bf50-0b5b-11e9-bc65-6bfc39f23288`
}
]
const response = {
statusCode: 200,
headers: {
},
body: JSON.stringify({
status: "ok",
data: data
})
};
return response;
};
Run Code Online (Sandbox Code Playgroud)
但
除了使用自定义HttpResponse类型,我还想使用一个官方定义。
但是我要导入和返回哪种正式类型?
我是AWS Lambda的新手,有一件事我感到非常困惑。
到目前为止,我发现了以下选项如何从Node.js中的函数返回:
1。
exports.handler = (event, context) => {
context.succeed('ok');
}
Run Code Online (Sandbox Code Playgroud)
2。
exports.handler = (event, context) => {
context.done(null, 'ok');
}
Run Code Online (Sandbox Code Playgroud)
3。
exports.handler = (event, context, callback) => {
callback(null, 'ok');
}
Run Code Online (Sandbox Code Playgroud)
4。
exports.handler = async event => {
return "ok";
}
Run Code Online (Sandbox Code Playgroud)
这些有什么不同?功能或性能上有区别吗?
谁能解释如何以正确的方式终止功能?
我已经AWS Lambda Project在C#(NOT Serverless Application)中创建了
我在aws-lambda-tools-defaults.json下面定义了一个环境变量
"environment-variables": {
"my-api": "http://myapihost.com/api/attendance-backfill"
}
Run Code Online (Sandbox Code Playgroud)
在Function.cs中,按如下所示获取值
var apiUrl = Environment.GetEnvironmentVariable("my-api").ToString();
Run Code Online (Sandbox Code Playgroud)
但是它总是像null。
如何设置和获取环境变量?
谢谢!
根据评论。
c# environment-variables amazon-web-services aws-lambda asp.net-core
但是,当我使用callback(null, event)lambda函数时,它实际上将永远不会返回,并且最终会导致错误
{代码:“ UnexpectedLambdaException”,名称:“ UnexpectedLambdaException”,消息:“ arn:aws:lambda:us-east-2:642684845958:function:proj-dev-confirm-1OP5DB3KK5WTA失败,并在调用Lambda函数时出现错误套接字超时。” }
我在这里找到了一个类似的链接,说要使用context.done()。
切换后,它可以正常工作。
有什么不同?
exports.confirm = (event, context, callback) => {
event.response.autoConfirmUser = true;
context.done(null, event);
//callback(null, event); does not work
}
Run Code Online (Sandbox Code Playgroud) amazon-web-services node.js amazon-cognito aws-lambda amazon-cognito-triggers
aws-lambda ×10
node.js ×3
c# ×2
python ×2
serverless ×2
asp.net-core ×1
cx-oracle ×1
python-3.x ×1
typescript ×1