我打算通过请求调用 aws lambda 函数中的第三方 api。但它显示超时错误。我将 lambda 函数时间设置为 30 秒,当我使用邮递员调用该 api 时,它会在 5 秒内发送响应(错误)。我认为请求或者axios无法将请求发送到外部api或者无法接收响应。谁能帮我?我的代码:
request.post({url:url2, json:true, body:body, headers: {
'ACCESS_TIMESTAMP': timestamp,
'Content-Type': 'application/json'
} }, (error, response, body) => {
console.log("------------------I am here----------------------")
callback(null, error)
})
Run Code Online (Sandbox Code Playgroud)
当我使用 axios 时,代码如下:
let jsonbody = JSON.stringify(body)
axios.post(url2, jsonbody, {headers: {
'ACCESS_TIMESTAMP': timestamp,
'Content-Type': 'application/json'
}})
.then(res => {
callback(null, res.data)
})
.catch(err => {
callback(null, err)
})
Run Code Online (Sandbox Code Playgroud)
我想得到 res 或 err 的结果,但他们不行动。
我们有什么方法可以使用 pytest 对 AWS lambda 函数中的函数执行单元测试吗?
假设我有一个如下所示的 lambda 函数:
def func1(x,y):
return x+y
def func2(x,y):
return x-y
def handler(event,context):
x = event["x"]
y = event["y"]
def func3(x,y):
return x*y
print(func1(x,y))
print(func2(x,y))
print(func3(x,y))
Run Code Online (Sandbox Code Playgroud)
请原谅功能过于简单。我想使用pytest 对这些函数和进行单元func1测试。func2func3
有什么办法可以在 AWS lambda 中做到这一点吗?
我有一个 Lambda,其事件源指向 Kinesis Stream Consumer(具有任意数量的分片)
我想确保流中具有相同“分区键”的项目由 Lambda 按顺序处理,而不是同时处理。(这被用作对象的标识,我不希望多个 Lambda 同时对同一个对象执行逻辑。)
例如,如果流中的项目具有分区键:
1,2,1,3,4,1,2,1
如果我们按照从左到右的处理顺序,Lambda 将同时处理分区键为 1,2,3 和 4 的项目。然后,当它完成具有特定分区键的一项时,它可以开始处理具有该键的另一项。
这是否可以通过某种方式实现,而不使用会导致 Lambda 使用效率低下的分布式锁?
谢谢
我的 sam 函数中有以下模板:
Resources:
TagChangedFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: tag_changed_function
Handler: tag_changed/app.lambda_handler
Runtime: python3.8
Policies:
- VPCAccessPolicy: {}
- Statement:
- Sid: EC2DescribeInstancesPolicy
Effect: "Allow"
Action:
- ec2:DescribeInstances
Resource: '*'
VpcConfig:
SubnetIds:
- sg-061328bxxxxx
SecurityGroupIds:
- subnet-03afd77xxxxx
Events:
TagChanged:
Type: CloudWatchEvent
Properties:
Pattern:
source:
- aws.tag
detail-type:
- Tag Change on Resource
Run Code Online (Sandbox Code Playgroud)
(我用 xxxxx 屏蔽了模板中的SubnetIds和)。SecurityGroupIds
但是当我构建并尝试将代码上传到 aws 时,我收到以下错误消息:
2 validation errors detected: Value
'[subnet-061328bxxxxx]' at
'vpcConfig.securityGroupIds' failed to satisfy
constraint: Member must satisfy constraint: [Member must
have …Run Code Online (Sandbox Code Playgroud) 我尝试将 WarmUp 无服务器插件集成到我的项目中。但是,我相信它不起作用。我在 lambda\xe2\x80\x99s CloudWatch 日志组中没有看到 WarmUp 的调用,并且 lambda 在空闲一段时间后确实需要预热时间。
\n我的配置如下:
\nservice: ${file(./${env:DEPLOY_FILE_NAME}):service}\n\nprovider:\n name: aws\n custom:\n roleName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):roleName}\n profileName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):profileName}\n bundle:\n ignorePackages:\n - pg-native\n warmup:\n enabled: true\n events:\n - schedule: rate(5 minutes)\n prewarm: true\n plugins:\n - pluginHandler\n - serverless-plugin-warmup\n runtime: nodejs12.x\n iamRoleStatements:\n - Effect: 'Allow'\n Action:\n - 'lambda:InvokeFunction'\n Resource:\n - Fn::Join:\n - ':'\n - - arn:aws:lambda\n - Ref: AWS::Region\n - Ref: AWS::AccountId\n - function:${self:service}-${opt:stage, self:provider.stage}-*\n cfLogs: true\n stage: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):stage}\n region: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):region}\n memorySize: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):memorySize}\n timeout: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):timeout}\n keepWarm: false\n useApigateway: …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 python zip 文件添加到 was lambda,其中包含 psycopg2 文件。我收到错误。请尝试提供帮助
"errorMessage": "Unable to import module 'handler': libpq.so.5: cannot open shared object file: No such file or directory",
"errorType": "Runtime.ImportModuleError"
Run Code Online (Sandbox Code Playgroud) 我想知道在无服务器应用程序 (AWS Lambdas) 中使用 Express.js 作为中间件是否是一个好主意?我的担忧来自这样一个事实:在 Express.js 中存在单一功能设置,将来如果有大量请求进来,它将开始限制。我的担忧是否合理,或者我什么都没有动摇。
我正在尝试执行 shell 命令以从 AWS lambda 迁移。我们的想法是,每当我们需要运行迁移时,我们都会通过 AWS CLI 调用 lambda。我无法让它运行。运行迁移的命令永远不会被执行,并且它总是以 null 响应。任何帮助将不胜感激。
这是我的代码:
const exec = require("child_process").exec;
const { okResponse, errorResponse } = require('./response');
exports.handler = async (event) => {
exec("node ./node_modules/db-migrate/bin/db-migrate up --config=./database.json", (error, stdout, stderr) => {
if (error) {
console.error(`error: ${error.message}`);
return errorResponse(500, 'Error running migration.');
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return errorResponse(500, 'Error running migration.');
}
console.log(`stdout: ${stdout}`);
return okResponse(200, 'Migration successfully.');
});
}
Run Code Online (Sandbox Code Playgroud) 我已经使用 SAM 部署了 API Gateway、Lambda 和 DynamoDB。lambda 函数的代码如下:
var AWS = require('aws-sdk');
exports.handler = async (event) => {
try {
console.log(event); //To check if there is any problem with the API call or not, (CloudWatch result = No issues)
console.log(event.body); // To confirm if the 'event' is a JSON object or not. (CloudWatch result = No issues)
var obj = JSON.parse(event.body);
console.log(obj.id);
console.log(obj.name);
var ID = obj.id;
var NAME = obj.name;
var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
var params = …Run Code Online (Sandbox Code Playgroud) amazon-web-services node.js amazon-dynamodb aws-lambda aws-api-gateway
我创建了一个 Lambda 函数。在权限窗格中,有一个用于角色的部分,另一个部分用于基于资源的策略。
IAM 中的角色本质上具有策略。这指定了函数(通过角色)有权访问的资源和操作。
那么设立基于资源的政策部分的目的是什么?如果其中一个允许访问而另一个拒绝访问,则优先考虑哪个权限。
aws-lambda ×10
node.js ×2
python ×2
serverless ×2
amazon-iam ×1
api ×1
aws-sam-cli ×1
axios ×1
concurrency ×1
express ×1
pytest ×1
request ×1
unit-testing ×1