标签: aws-lambda

如何从Python访问AWS Lambda环境变量

使用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它工作正常).

python aws-lambda

46
推荐指数
3
解决办法
5万
查看次数

从AWS Lambda函数连接到ElastiCache集群

是否可以从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/

amazon-web-services amazon-elasticache aws-lambda

45
推荐指数
2
解决办法
2万
查看次数

如何使用Lambda访问AWS API网关请求的HTTP标头?

我在API网关常见问题解答中看到,可以访问发送到API网关的请求标头...

如果您已经使用OAuth令牌或任何其他授权机制,则可以轻松设置API网关,以便不需要签名的API调用,只需将令牌标头转发到后端进行验证即可.

但是,我在文档中找不到如何执行此操作的示例,并且不清楚如何使用Lambda访问此数据.

我能够设置一个开放的API并获得对作为POST一部分的JSON对象的访问权限(演练:API网关和Lambda函数),但为了使用我自己的提供程序实现OAuth 2.0样式API,我需要访问"授权"标题.

我的偏好是使用Lambda和Java 8进行设置,但是使用node.js的示例也有助于理解如何实现这一点.

amazon-web-services aws-lambda aws-api-gateway

43
推荐指数
4
解决办法
3万
查看次数

AWS Lambda可以连接到RDS mySQL数据库并更新数据库吗?

我正在尝试将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)

amazon-web-services amazon-rds amazon-iam aws-lambda

43
推荐指数
2
解决办法
5万
查看次数

AWS Lambda中的下拉列表中不提供Alexa Skills Kit触发器

我正在尝试构建一个由Alexa Skills Kit触发的简单AWS Lambda函数.我正在关注亚马逊制作的关于创建技能等的教程.不幸的是,Alexa Skills Kit不是"配置触发器"窗口下拉菜单中的选项.我附上了一张可用的照片.

无论如何都要显示Alexa Skills Kit?我的帐户有问题吗?任何建议都会非常有帮助.我被困在一个真正不应该引起任何问题的地方.我有一个基本帐户,因此无法获得亚马逊的支持.

配置触发器

triggers amazon-web-services aws-lambda

43
推荐指数
3
解决办法
2万
查看次数

我可以限制AWS Lambda的并发调用吗?

我有一个由PUT触发到S3存储桶的Lambda函数.

我想限制这个Lambda函数,以便它一次只运行一个实例 - 我不希望两个实例同时运行.

我已经看过Lambda配置和文档了,但我看不出任何明显的东西.我可以编写自己的锁定系统,但如果这已经是一个已解决的问题,那就太好了.

如何限制Lambda的并发调用次数?

locking amazon-web-services aws-lambda

43
推荐指数
4
解决办法
1万
查看次数

如何将来自POST的params从Amazon API Gateway传递到AWS 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)

amazon-web-services aws-lambda aws-api-gateway

42
推荐指数
7
解决办法
4万
查看次数

在Java中为AWS Lambda执行"Hello World"时出错

我编写了以下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)

amazon-web-services aws-lambda

42
推荐指数
3
解决办法
2万
查看次数

从API网关自定义授权器返回401缺少"Access-Control-Allow-Origin"标头

为了防止未登录的用户通过AWS API网关调用我的lambda函数,我使用的是Custom Authorizer lambda解决方案.

如果请求被授权(200)并且我从被叫lambda得到响应,一切正常,我得到了Access-Control-Allow-Origin标题.

但是,如果该请求没有被授权,我得到一个401一个没有Access-Control-Allow-Origin头,所以阻止我读响应的401个状态和将用户重定向到登录页面.

我相信这是因为自定义自动化机制不知道请求需要使用CORS.有谁知道这实际上是问题吗?你知道任何可能的解决方案吗?

amazon-web-services cors aws-lambda aws-api-gateway

42
推荐指数
5
解决办法
7935
查看次数

AWS lambda和Java并发

众所周知,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

42
推荐指数
1
解决办法
1万
查看次数