我想读取 http post 请求的“key”参数,但它不起作用。
def my_handler(event, context):
print(event)
print(event['body'])
print("key: " + event['key'])
key = event['query']['key']
encoded_string = str(key).encode("utf-8")
# Create the file named for example "42.json" containing the appropriate data
s3_path = str(key) + '.json'
s3 = boto3.resource("s3")
s3.Bucket(BUCKET_NAME).put_object(Key=s3_path, Body=encoded_string)
message = {
'message': 'Created {}!'.format(key)
}
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps(message)
}
Run Code Online (Sandbox Code Playgroud)
更新:如果我使用下面的代码,我可以在 http 帖子中读取 JSON 数据,但我仍然无法读取表单数据。
def my_handler(event, context):
print(event)
print(event['body'])
# print("key: " + event['key'])
print("key " + json.loads(event['body'])["key"])
key = json.loads(event['body'])["key"] …Run Code Online (Sandbox Code Playgroud) 我是 Node JS 的初学者,并尝试在线学习示例并从 AWS 文档中学习得相当好。到目前为止,我只使用 AWS 提供的基于 Web 的 lambda 编辑器。以下代码给我带来了麻烦并指出,“errorMessage”:“AmazonCognitoIdentity 未定义”,
有人可以建议我如何仅使用网络编辑器成功开始使用 Cognito 吗?
var aws = require('aws-sdk');
var CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;
exports.handler = (event, context, callback) => {
console.log("Do something here...");
}Run Code Online (Sandbox Code Playgroud)
我有以下代码:
package main
import (
"encoding/csv"
"fmt"
"io/ioutil"
"path"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3iface"
)
var (
// TOKEN = os.Getenv("TOKEN")
svc s3iface.S3API
)
func main() {
// Panics if there is an error in creating session
svc = s3iface.S3API(s3.New(session.Must(session.NewSession())))
lambda.Start(Handler)
}
func Handler(evt events.S3Event) error {
for _, rec := range evt.Records {
key := rec.S3.Object.Key
dir, file := path.Split(key)
// Download the file from S3
obj, err := svc.GetObject(&s3.GetObjectInput{
Bucket: aws.String(rec.S3.Bucket.Name),
Key: aws.String(key),
})
if err != …Run Code Online (Sandbox Code Playgroud) 另一个 AWS 账户拥有一个 S3 存储桶,其中包含一个文件列表。我需要将文件复制到我的 S3 存储桶。为了做到这一点,我想执行两件事:
为了实现 1 和 2,我必须执行哪些步骤?
我在 Node.js 中做过的第一件事,我正在编写一个 AWS Lambda 函数,我想在做任何其他事情之前检查用户的自定义属性是否有值。因为我被告知 Promises 是同步处理异步方法的方式,所以我写了这个函数:
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var cogId = new AWS.CognitoIdentityServiceProvider();
exports.handler = function (event, context) {
if (event != null)
{
var identityId = context.identity.cognitoIdentityId;
if (event.userId != null)
{
var userId = event.userId;
PromiseConfirmIdNotSet(userId)
.then(SetId(userId, identityId))
.catch();
}
}
context.done(null, 'Hello World'); // SUCCESS with message
};
function PromiseConfirmIdNotSet(userId)
{
console.log('Entering function');
return new Promise(function (resolve, reject) {
console.log('Entering Promise');
cogId.adminGetUser({
UserPoolId: myUserPool,
UserId: userId
},
function …Run Code Online (Sandbox Code Playgroud) 我正在尝试将数据写入不同的表,表名是通过 get 请求传递的。
var tableName = event.tableName.toString();
Run Code Online (Sandbox Code Playgroud)
当我编写硬编码的 tableName 时它工作正常,但是当我编写变量 Name 时它会引发错误。
2018-11-20T21:09:31.532Z 928e237c-ed08-11e8-a312-539d290e67fc {"errorMessage":"请求的资源未找到","errorType":"ResourceNotFoundException","stackTracextract":["Request. var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)","Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20) ","Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)","Request.emit (/var/runtime/node_modules/aws-sdk/lib/request. js:683:14)","Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)","AcceptorStateMachine.runTo (/var/runtime/node_modules/aws- sdk/lib/state_machine.js:14:12)","/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10","请求。(/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)","请求。(/var/runtime/node_modules/aws-sdk/lib/request.js:685: 12)","Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"]} END RequestId: 928e237c-ed08-11e8-a312-539d290e67fc73c28RequestId ed08-11e8-a312-539d290e67fc 持续时间:124.41 ms 计费持续时间:200 ms 内存大小:1024 MB 已用最大内存:33 MB41 ms 计费持续时间:200 ms 内存大小:1024 MB 已用最大内存:33 MB41 ms 计费持续时间:200 ms 内存大小:1024 MB 已用最大内存:33 MB
这是代码:
var params = {
RequestItems: {
tableName : [
{
PutRequest: {
"Item" : {
"indexNumber":{
"N": r1index
},
"DateandTime" :{
"S": DnT1
} ,
"roadId" :{ …Run Code Online (Sandbox Code Playgroud) javascript amazon-web-services node.js amazon-dynamodb aws-lambda
我试图包装CompletableFuture在 ReactorMono类型中以简化我的转换操作。Project Reactor 总体来说更方便!我在 AWS Lambda 函数中工作,我正在使用新的 AWS Java SDK 2.x 版本调用 AWS 服务,例如 S3、SQS 等。这个新的开发工具包允许对 AWS 服务进行异步调用并返回 CompleteableFuture 对象。
例如:
S3AsyncClient s3AsyncClient = S3AsyncClient.builder().build();
Mono.fromFuture(s3AsyncClient.getObject(b ->
b.bucket(bucketId).key(objectKey), AsyncResponseTransformer.toBytes()).subscribe()
System.out.println("stuff");
Run Code Online (Sandbox Code Playgroud)
问题是,当我的主代码调用 时CompletableFuture (s3AsyncClient.getObject),执行线程突然切换到 CompleteableFuture 线程并且我调用 Mono 的主方法在 CompletableFuture 完成之前返回。
基本上,从上面的例子来看,"stuff"字符串在s3AsyncClient.getObject完成之前被打印出来。
如何确保 Mono 和CompletableFuture在同一线程中执行,或者如何确保我的 lambda 在CompletableFuture完成之前不会终止?
对于那些想知道的人,只有在我将代码远程部署到 AWS Lambda 时才会出现这种行为。我在本地没有遇到这种行为......
我正在尝试捕获从用 NodeJS 编写的 AWS Lambda 启动的外部程序的输出。下面的完整示例代码。任何测试事件都可以,因为它并没有真正使用。
exports.handler = async (event) => {
console.log ("Entering lambda" + JSON.stringify(event))
var spawn = require('child_process').spawnSync;
child_process = spawn ('aws', [' --version'], {
stdio: 'inherit',
stderr: 'inherit',
shell: true
})
console.log ("done");
const response = {
statusCode: 200,
body: JSON.stringify('done'),
};
return response;
};
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到以下输出(为了简洁起见,我删除了测试事件详细信息,因为它无关紧要)。
我没有看到aws --version我预期的命令的结果(我使用它来测试 AWS CLI 的正确调用,但任何 Linux 命令都可以)。代码确实是同步执行的,因为如果我用 替换调用child_process = spawn ('sleep', ['1'], {,lambda 的执行时间会增长到 1117.85 毫秒,所以会发生一秒钟的睡眠。但是执行日志中没有捕获任何内容。
START RequestId: 0c1287e2-d2ee-4436-a577-bc8ec3608120 Version: $LATEST
2019-01-16T19:12:45.130Z …Run Code Online (Sandbox Code Playgroud) 我下面有一个字符串,它是一个以英镑为单位的价格,我想删除货币符号,然后将其转换为一个数字/价格,我可以用来与另一个值进行比较(例如 X >= Y ...)
£14.50
我之前已将字符串转换为用于货币的数字
var priceNum = parseFloat(price);
理想的结果
14.50作为数值。这可以在一行中完成吗?
import pymysql
from botocore.vendored import requests
def lambda_handler(event,context):
conn=pymysql.connect (host ="rootrestdatabase.cd6kbmibgfod.ap-south-1.rds.amazonaws.com", user="****" , passwd="*****",db="restawsdatabase")
Run Code Online (Sandbox Code Playgroud)
我想在 lambda 中连接 rds。但我犯了错误
"errorMessage": "(2003, \"Can't connect to MySQL server on 'rootrestdatabase.cd6kbmibgfod.ap-south-1.rds.amazonaws.com' (timed out)\")",
"errorType": "OperationalError",
"stackTrace": [
[
Run Code Online (Sandbox Code Playgroud)
我已经在本地机器上尝试过它工作正常但是当我在lamba中部署代码时它没有工作。lambda 函数和 rds 也都在同一区域。我该怎么办?
aws-lambda ×10
node.js ×5
amazon-s3 ×3
javascript ×3
amazon-iam ×1
aws-sdk ×1
csv ×1
go ×1
promise ×1
python ×1
python-3.x ×1
regex ×1
spawn ×1