我正在尝试使用CloudFormation创建一个新版本的Lambda函数.
我想拥有相同Lambda函数的多个版本,以便我可以(a)指向不同版本的别名 - 比如DEV和PROD - 以及(b)能够回滚到早期版本
这是我的Lambda版本的定义:
LambdaVersion:
Type: AWS::Lambda::Version
Properties:
FunctionName:
Ref: LambdaFunction
Run Code Online (Sandbox Code Playgroud)
运行"aws cloudformation create-stack"时会创建一个版本,但随后的"aws cloudformation update-stack"命令不会执行任何操作.没有创建新的Lambda版本.
我正在尝试在将新的zip文件上传到S3然后运行"update-stack"之后创建一个新版本的Lambda函数.我可以使用CloudFormation做到吗?AWS :: Lambda :: Version真的坏了吗(如https://github.com/hashicorp/terraform/issues/6067#issuecomment-211708071所述)或者我只是没有得到什么?
更新1/11/17 亚马逊支持的官方回复:"...对于要发布的任何新版本,您需要定义一个添加(原文如此) AWS :: Lambda :: Version资源......"
AWS CloudFormation/Lambda团队,如果您正在阅读此内容 - 这是不可接受的.修理它.
好吧,我现在已经进入了这个阶段并取得了重大进展,但仍然完全被基本面所困扰.
我的应用程序使用Cognito用户池来创建和管理用户 - 这些在S3上通过IdentityId标识.我的每个用户都有自己的S3文件夹,AWS会自动为他们提供一个等于用户IdentityId的文件夹名称.
我需要将IdentityId与其他Cognito用户信息相关联,但无法确定如何使用.
我需要的关键是能够识别用户名以及给定IdentityId的其他cognito用户属性 - 而且这非常困难.
因此,第一场战斗是在Cognito用户通过AWS API Gateway发出请求时,弄清楚如何获取IdentityId.最后我得到了解决方案,现在我有一个Cognito用户,他向API网关发出请求,而我后面的Lambda函数现在有了IdentityId.那一点有效.
但我完全不知道如何访问存储在用户池中的Cognito用户信息.我找不到任何明确的信息,当然也没有代码,它显示了如何使用IdentityId来获取Cognito用户的属性,用户名等.
看来,如果我使用"Cognito用户池"在API网关中授权我的方法,那么可以使用正文映射模板将Cognito用户信息(例如sub,用户名和电子邮件地址)放入上下文中,但我可以没有得到IdentityId.
但是如果我AWS_IAM在API网关中使用授权我的方法,那么身体映射模板会反过来 - 它为我提供了IdentityId而不是Cognito用户字段,例如sub和username以及email.
这让我发疯了 - 如何将IdentityId和所有Cognito用户字段和属性合并为一个数据结构?事实上,我似乎只能得到一个或另一个是没有意义的.
我正在尝试从 S3 中提取一个大文件并使用 Pandas 数据帧将其写入 RDS。
我一直在谷歌上搜索这个错误,但在任何地方都没有看到它,有谁知道这个极其通用的声音错误可能意味着什么?我以前遇到过内存问题,但扩展内存消除了该错误。
{
"errorType": "Runtime.ExitError",
"errorMessage": "RequestId: 99aa9711-ca93-4201-8b1e-73bf31b762a6 Error: Runtime exited with error: signal: killed"
}
Run Code Online (Sandbox Code Playgroud) 您认为在AWS API Gateway中使用和不使用代理功能的Lambda集成的优点和缺点是什么(更具体地说,在使用无服务器框架时)?这是我现在的想法:
Lambda与代理集成
没有代理的Lambda集成
你的想法是什么?您通常使用Lambda Proxy还是普通的Lambda集成?你喜欢什么,为什么?
编辑:到目前为止,我倾向于总是选择不使用代理功能,因为提到的原因(解耦和说明依赖关系 - 标题,状态代码等 - 预先).
我已经完成了题为"以编程方式设置AWS区域1"的问题,但它没有提供我需要的所有答案.
Q1:我得到了SDKClientException-Unable to find a region via the region provider chain.我究竟做错了什么?还是我错过了一个错字.
public class CreateS3Bucket {
public static void main(String[] args) throws IOException {
BasicAWSCredentials creds = new BasicAWSCredentials("aws-access-key", "aws-secret-key");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(creds)).build();
Region region = Region.getRegion(Regions.US_EAST_1);
s3Client.setRegion(region);
try {
String bucketName = "testBucket" + UUID.randomUUID();
s3Client.createBucket(bucketName);
System.out.println("Bucket Created Successfully.");
} catch(AmazonServiceException awse) {
System.out.println("This means that your request made it AWS S3 but got rejected");
System.out.println("Error Message:" +awse.getMessage());
System.out.println("Error Message:" +awse.getErrorCode());
System.out.println("Error Message:" +awse.getErrorType());
System.out.println("Error Message:" …Run Code Online (Sandbox Code Playgroud) 我有一个lambda可以访问S3.
之前,这个 lambda 程序运行良好。但最近我更改了S3的KMS密钥或其他一些安全组设置,(lambda源代码没有改变)
出现错误。
我猜这lambda并不S3在 VPC 上,因此安全组不相关。
那么,,,和KMS密钥有关吗???
S3已加密bf3cf318-1376-44de-a014-XXXXXXXXX,所以我必须向该 lambda 授予 kms 访问权限?但如何呢?
还是我完全错了??
[ERROR] ClientError: An error occurred (AccessDenied) when calling the GetObject operation: The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access.
Traceback (most recent call last):
File "/var/task/app.py", line 48, in handler
raise e
File "/var/task/app.py", line 45, in …Run Code Online (Sandbox Code Playgroud) 正如我的标题解释我收到以下错误:
{
"errorMessage": "Cannot find module 'index'",
"errorType": "Error",
"stackTrace": [
"Function.Module._resolveFilename (module.js:338:15)",
"Function.Module._load (module.js:280:25)",
"Module.require (module.js:364:17)",
"require (module.js:380:17)"
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试了在创建-la-lambda-function-in-aws-from-zip-file和simple-node-js-example-in-aws-lambda中提供的两种解决方案.
我的index.js处理函数如下所示:
exports.handler = function(event, context) {
Run Code Online (Sandbox Code Playgroud)
还有什么可能导致这个问题,除了上面这两个答案中所述的内容?我已经尝试了两种解决方案,并且我还为该功能分配了更多内存,这就是为什么它无法运行.
编辑 - 为了尝试,我创建了一个更简单的原始代码版本,它看起来像这样:
var Q = require('q');
var AWS = require('aws-sdk');
var validate = require('lambduh-validate');
var Lambda = new AWS.Lambda();
var S3 = new AWS.S3();
theHandler = function (event, context) {
console.log =('nothing');
}
exports.handler = theHandler();
Run Code Online (Sandbox Code Playgroud)
然而仍然无法使用相同的错误?
我在AWS上的S3存储桶中存储了一系列json文件.
我希望使用AWS lambda python服务来解析此json并将解析后的结果发送到AWS RDS MySQL数据库.
我有一个稳定的python脚本,用于解析和写入数据库.我需要lambda脚本来遍历json文件(当它们被添加时).
每个json文件都包含一个简单的列表 results = [content]
在伪代码中我想要的是:
jsondata)results)results)我可以列出我所拥有的桶:
import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
print(bucket.name)
Run Code Online (Sandbox Code Playgroud)
赠送:
jsondata
Run Code Online (Sandbox Code Playgroud)
但我无法访问此存储桶来读取其结果.
似乎没有read或load功能.
我希望有类似的东西
for bucket in s3.buckets.all():
print(bucket.contents)
Run Code Online (Sandbox Code Playgroud)
编辑
我误解了一些事情.lambda必须自己下载,而不是在S3中读取文件.
从这里看来,你必须给lambda一个下载路径,从中可以访问文件本身
import libraries
s3_client = boto3.client('s3')
def function to be executed:
blah blah
def handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
download_path = '/tmp/{}{}'.format(uuid.uuid4(), key) …Run Code Online (Sandbox Code Playgroud) 我对服务器世界比较陌生,所以请原谅我,如果其中一些是基本的(我的第一部分文字将解释我的逻辑以确保它没有缺陷).我的所有问题都会加粗,让你的帮助更容易:).
我一直在研究和教授自己的一些AWS技术,我注意到在他们的移动中心,如果你想要云逻辑,他们只允许"自动"设置Lambda功能.在阅读和研究之后,我发现了一些指向"无服务器"架构的资源(Lambda支持的引入).在过去,我的理解是Elastic Beanstalk被引入以帮助使服务器管理(尤其是移动设备)显着简化.
对于移动开发者,有两个选项(显然更多,但为了简单起见,我们会同意):
所有这一切都让我相信,一个完整的λ后端是完全有可能的,容易在有全天候运行的服务器成本的一小部分来创建.那是对的吗?
现在,假设上述情况正确,我们需要确定使用Lambda是否真的比Elastic Beanstalk更有益.
对于简单的服务器,我们可以设置一些Lambda函数并将其称为一天(与使用Elastic Beanstalk相比,它可能更简单,更便宜(至少对于小型项目而言).
但是,对于具有更多URL和数据库连接的更复杂的服务器,事情变得更有趣.
这些是我在上述情况下使用Lambda时遇到的问题
避免前两个问题的唯一方法(我能想到的)是创建一个充当调度的强大函数(main函数从API网关获取一个参数并确定在Lambda函数中运行哪个文件).
我是否缺少任何要点来确定是否值得使用Lambda而不是Elastic Beanstalk?
我正在尝试从AWS Lambda访问我的VPC上的S3和资源,但由于我将AWS Lambda配置为访问VPC,因此在访问S3时会超时.这是代码
from __future__ import print_function
import boto3
import logging
import json
print('Loading function')
s3 = boto3.resource('s3')
import urllib
def lambda_handler(event, context):
logging.getLogger().setLevel(logging.INFO)
# Get the object from the event and show its content type
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).decode('utf8')
print('Processing object {} from bucket {}. '.format(key, bucket))
try:
response = s3.Object(bucket, key)
content = json.loads(response.get()['Body'].read())
# with table.batch_writer() as batch:
for c in content:
print(' Processing Item : ID' + str(c['id']))
# ##################
# Do custom processing …Run Code Online (Sandbox Code Playgroud) aws-lambda ×10
amazon-s3 ×4
python ×2
amazon-kms ×1
amazon-vpc ×1
aws-sdk ×1
java ×1
javascript ×1
json ×1
node.js ×1