使用AWS Lambda中的新环境变量支持,我通过webui为我的函数添加了一个env var.
我如何从Python访问它?我试过了:
import os
MY_ENV_VAR = os.environ['MY_ENV_VAR']
Run Code Online (Sandbox Code Playgroud)
但我的功能停止工作(如果我硬编码相关的值,MY_ENV_VAR它工作正常).
是否可以从AWS Lambda函数连接到Redis ElastiCache集群?
我无法弄清楚这是一个配置问题还是根本不可能.
PS:我从EC2实例进行了测试,我可以连接到Redis节点.此外,Lambda函数和Redis节点位于同一区域.
更新(2015年10月9日):
亚马逊宣布推出适用于AWS Lambda功能的VPC.细节在这里
这意味着我们现在可以访问VPC安全组后面的AWS中的任何资源,包括ElastiCache和RDS计算机.
更新(2016年2月11日): 亚马逊为AWS Lambda推出了VPC.
https://aws.amazon.com/about-aws/whats-new/2016/02/access-resources-within-a-vpc-using-aws-lambda/
我在API网关常见问题解答中看到,可以访问发送到API网关的请求标头...
如果您已经使用OAuth令牌或任何其他授权机制,则可以轻松设置API网关,以便不需要签名的API调用,只需将令牌标头转发到后端进行验证即可.
但是,我在文档中找不到如何执行此操作的示例,并且不清楚如何使用Lambda访问此数据.
我能够设置一个开放的API并获得对作为POST一部分的JSON对象的访问权限(演练:API网关和Lambda函数),但为了使用我自己的提供程序实现OAuth 2.0样式API,我需要访问"授权"标题.
我的偏好是使用Lambda和Java 8进行设置,但是使用node.js的示例也有助于理解如何实现这一点.
我正在尝试将AWS Lambda函数连接到RDS mysql数据库.
我只是想从我的lambda函数更新数据库.是否可以通过指定IAM角色和访问策略来访问RDS?
我可以使用mysql client连接到mysql数据库.但是当我尝试使用lambda时,我无法做到这一点.这是我的代码.
console.log('Loading function');
var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB();
var mysql = require('mysql');
exports.handler = function(event, context) {
//console.log('Received event:', JSON.stringify(event, null, 2));
var operation = event.operation;
delete event.operation;
switch (operation) {
case 'create':
var conn = mysql.createConnection({
host: 'lamdatest.********.rds.amazonaws.com', // RDS endpoint
user: 'user', // MySQL username
password: 'password', // MySQL password
database: 'rdslamda'
});
conn.connect();
console.log("connecting...");
conn.query('INSERT INTO login (name,password) VALUES("use6","password6")', function(err, info) {
console.log("insert: " + info.msg + " …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个由Alexa Skills Kit触发的简单AWS Lambda函数.我正在关注亚马逊制作的关于创建技能等的教程.不幸的是,Alexa Skills Kit不是"配置触发器"窗口下拉菜单中的选项.我附上了一张可用的照片.
无论如何都要显示Alexa Skills Kit?我的帐户有问题吗?任何建议都会非常有帮助.我被困在一个真正不应该引起任何问题的地方.我有一个基本帐户,因此无法获得亚马逊的支持.

我有一个由PUT触发到S3存储桶的Lambda函数.
我想限制这个Lambda函数,以便它一次只运行一个实例 - 我不希望两个实例同时运行.
我已经看过Lambda配置和文档了,但我看不出任何明显的东西.我可以编写自己的锁定系统,但如果这已经是一个已解决的问题,那就太好了.
如何限制Lambda的并发调用次数?
在此问题中如何从Amazon API Gateway将查询字符串或路由参数传递给AWS Lambda
演示了如何使用API网关将查询字符串参数映射到AWS lambda.我想做同样的事情,但映射POST值而不是查询字符串.我试过了:
{
"values": "$input.params()"
}
Run Code Online (Sandbox Code Playgroud)
但没有工作,我没有看到实际的表格数据.BTW我发帖使用:
application/x-www-form-urlencoded
我得到了我的lambda函数的响应,所以我知道它正在调用lambda,但我的问题是我没有在任何地方看到POST参数.我可以弄清楚如何映射它们.我把所有我在Lambda一侧转移到这里,它是:
{"values":"{path={}, querystring={}, header={Accept=*/*, Accept-Encoding=gzip, deflate, Accept-Language=en-US,en;q=0.8, Cache-Control=no-cache, CloudFront-Forwarded-Proto=https, CloudFront-Is-Desktop-Viewer=true, CloudFront-Is-Mobile-Viewer=false, CloudFront-Is-SmartTV-Viewer=false, CloudFront-Is-Tablet-Viewer=false, CloudFront-Viewer-Country=US, Content-Type=application/x-www-form-urlencoded, Origin=chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop, Postman-Token=7ba28698-8753-fcb1-1f48-66750ce12ade, Via=1.1 6ba5553fa41dafcdc0e74d152f3a7a75.cloudfront.net (CloudFront), X-Amz-Cf-Id=sc8C7dLcW0BHYopztNYrnddC0hXyFdBzHv0O9aWU1gKhd1D_J2HF3w==, X-Forwarded-For=50.196.93.57, 54.239.140.62, X-Forwarded-Port=443, X-Forwarded-Proto=https}}"}
Run Code Online (Sandbox Code Playgroud) 我编写了以下Hello World Lambda,我正在AWS上通过AWS工具包上传来执行.
public class HelloWorldLambdaHandler implements RequestHandler<String, String> {
public String handleRequest(String input, Context context) {
System.out.println("Hello World! executed with input: " + input);
return input;
}
}
Run Code Online (Sandbox Code Playgroud)
执行上面的代码时出现以下错误.知道我在这里做错了什么吗?具有此处理程序的BTW Maven项目没有任何其他类,只有依赖项是aws-lambda-java-core version 1.1.0.
Skip uploading function code since no local change is found...
Invoking function...
==================== FUNCTION OUTPUT ====================
{"errorMessage":"An error occurred during JSON parsing","errorType":"java.lang.RuntimeException","stackTrace":[],"cause":{"errorMessage":"com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token\n at [Source: lambdainternal.util.NativeMemoryAsInputStream@2f7c7260; line: 1, column: 1]","errorType":"java.io.UncheckedIOException","stackTrace":[],"cause":{"errorMessage":"Can not deserialize instance of java.lang.String out of START_OBJECT …Run Code Online (Sandbox Code Playgroud) 为了防止未登录的用户通过AWS API网关调用我的lambda函数,我使用的是Custom Authorizer lambda解决方案.
如果请求被授权(200)并且我从被叫lambda得到响应,一切正常,我得到了Access-Control-Allow-Origin标题.
但是,如果该请求没有被授权,我得到一个401一个没有Access-Control-Allow-Origin头,所以阻止我读响应的401个状态和将用户重定向到登录页面.
我相信这是因为自定义自动化机制不知道请求需要使用CORS.有谁知道这实际上是问题吗?你知道任何可能的解决方案吗?
众所周知,AWS lambda 可能会重用早期创建的处理程序对象,而且确实如此(请参阅常见问题解答):
问:AWS Lambda会重用函数实例吗?
为了提高性能,AWS Lambda可以选择保留您的函数实例并重复使用它来提供后续请求,而不是创建新副本.您的代码不应该假设这总是会发生.
问题是关于Java并发性.如果我有一个处理程序的类,请说:
public class MyHandler {
private Foo foo;
public void handler(Map<String,String> request, Context context) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
那么,foo在这里访问和使用对象变量是否可以线程安全?
换句话说:AWS lambda可以同时为不同的调用使用相同的对象吗?
编辑我的函数在基于事件的源上处理,特别是它由API网关方法调用.
EDIT-2当你想要将某种连接池实现到外部资源时,这类问题就会出现,所以我想保持与外部资源的连接作为对象变量.它实际上按预期工作,但我害怕并发问题.
EDIT-3更具体地说,我想知道:AWS lambda处理程序的实例是否可以共享公共堆(内存)?我必须指定这个额外的细节,以防止回答列出有关java线程安全对象的明显和常见的事情.
java concurrency multithreading amazon-web-services aws-lambda
aws-lambda ×10
amazon-iam ×1
amazon-rds ×1
concurrency ×1
cors ×1
java ×1
locking ×1
python ×1
triggers ×1