标签: aws-lambda

AWS Lambda invokeAsync的替换(不建议使用)

我试图从另一个Java Lambda函数异步调用Java Lambda函数.我只是想解雇并忘记,但是使用.invokeAsync(InvokeRequest),我必须在Future上调用.get(),然后阻止并打破'fire and forget'用例.

这是我尝试使用的代码:

private void sendToDownloader(String payload) throws InterruptedException, ExecutionException {
    log.info(payload);
    InvokeRequest invoke = new InvokeRequest();
    invoke.withFunctionName("LambdaTwo")
            .withPayload(payload)
            .withInvocationType(InvocationType.Event);

    lambdaClient.invokeAsync(invoke).get();
}
Run Code Online (Sandbox Code Playgroud)

如果我删除.get()方法调用,它实际上不会调用LambdaTwo.

应该注意,这个lambda函数在调用LambdaTwo后立即结束.

同时,我尝试使用以下代码:

private void sendToDownloader(String payload) throws InterruptedException, ExecutionException {
    log.info(payload);
    InvokeAsyncRequest invoke = new InvokeAsyncRequest();
    invoke.withFunctionName("LambdaTwo")
            .withInvokeArgs(payload);

    lambdaClient.invokeAsync(invoke);
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码很有用.不推荐使用.invokeAsync,并且它会看到"Invoke API",我找不到任何文档.

任何人都可以引导我以正确的方式以纯粹的"火与难忘"的方式调用Lambda函数吗?

编辑1 根据Mark的建议,我已经重写了下面的代码,但它似乎在LambdaTwo函数执行时阻塞.

public void routeEvent(String lambdaName, String cacheName) throws InterruptedException, ExecutionException, JsonProcessingException {
    ObjectNode obj = new ObjectNode(JsonNodeFactory.instance);
    obj.put("nodeName", cacheName);
    InvokeRequest invoke = new InvokeRequest();
    invoke.withFunctionName(lambdaName)
            .withInvocationType(InvocationType.Event)
            .withPayload(OBJECT_MAPPER.writeValueAsString(obj));

    log.info(System.currentTimeMillis());
    lambdaClient.invoke(invoke);
    log.info(System.currentTimeMillis()); …
Run Code Online (Sandbox Code Playgroud)

java amazon-web-services aws-sdk aws-lambda

8
推荐指数
1
解决办法
2836
查看次数

如何将托管策略附加到无服务器框架中的 lambda 函数

如何将托管策略附加到 lambda 函数?

我试过:

provider:
  name: aws
  role: arn:aws:iam::aws:policy/AmazonCognitoReadOnly
Run Code Online (Sandbox Code Playgroud)

但这导致了以下错误:

配置堆栈时发生错误:GaDashextractLambdaFunction - 检测到 1 个验证错误:“角色”处的值“arn:aws:iam::aws:policy/AmazonCognitoReadOnly”无法满足约束:成员必须满足正则表达式模式:arn:aws: iam::\d{12}:角色/?[a-zA-Z_0-9+=,.@-_/]+.

amazon-web-services amazon-iam amazon-cognito aws-lambda serverless-framework

8
推荐指数
2
解决办法
8881
查看次数

是否可以将公共IP分配给AWS中的Lambda函数?

我们需要在公司后端访问API,这些API只接受来自授权IP地址的呼叫.

此时,我们的移动客户端正在调用AWS Lambda函数执行某些转换,然后在分配了授权公共IP地址的EC2实例上调用另一个服务.第二个服务执行对公司后端的最终调用,将数据返回到lambda,然后返回给客户端.

这工作正常,但它为我们希望避免的架构增加了一些不必要的复杂性.

是否有可能以某种方式将公共IP分配给lambda函数以避免在EC2中使用此额外服务?

谢谢,

GA

amazon-ec2 amazon-web-services aws-lambda

8
推荐指数
1
解决办法
6838
查看次数

在 S3 中创建对象时的 AWS Lambda 函数触发器不起作用

我正在做这样的上传:

curl -v -X PUT -T“test.xml”-H“主机:my-bucket-upload.s3-eu-central-1.amazonaws.com”-H“内容类型:application/xml” https:// /my-bucket-upload.s3-eu-central-1.amazonaws.com/test.xml

文件已上传,我可以在我的 S3 存储桶中看到它。

诀窍是,当我尝试创建一个在创建时触发的 lambda 函数时,它永远不会被调用。如果我使用 S3 Web 界面上传文件,则效果很好。我究竟做错了什么?有没有关于如何做到这一点的明确食谱?

amazon-s3 aws-lambda

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

AWS SQS 可以发布到 SNS 还是需要轮询 SQS?

我们\xe2\x80\x99目前正在使用AWS构建一个应用程序,并且需要将消息推送到SQS中。我的问题是,是否可以让 SQS 向 SNS 发布一条消息,从而触发 Lambda(订阅 SNS)?然后,lambda 需要向 SQS 返回其收到消息的确认,从而从 SQS 中删除该消息。

\n\n

上述场景可能吗?或者是从 SQS 获取消息、通过 Lambda 轮询队列等的唯一方法?

\n\n

预先感谢您提供的任何帮助。

\n\n

对于滥用术语表示歉意,但我\xe2\x80\x99m 对 AWS 来说相对较新。

\n

amazon-sqs amazon-web-services aws-lambda aws-event-bridge

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

尝试将 Python 列表保存到 S3 存储桶时出错。

我已尽力研究这个问题,包括堆栈溢出,但我只是不明白它。我只想将 Lambda 函数的输出保存到 S3 存储桶。但 S3 似乎不喜欢列表作为数据类型!?

我收到错误:

botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter Body, value:  type: <class 'list'>, valid
types: <class 'bytes'>, <class 'bytearray'>, file-like object
Run Code Online (Sandbox Code Playgroud)

列表似乎不适合 S3 存储桶的输出类型?这是我正在使用的代码:

bucket_name = "output-bucket"
file_name = "output.json"
s3 = boto3.resource('s3')
object = s3.Object(bucket_name, file_name)
object.put(Body=output_sentences)
Run Code Online (Sandbox Code Playgroud)

我想我只是不明白它的工作原理......

python amazon-s3 amazon-web-services python-3.x aws-lambda

8
推荐指数
1
解决办法
8566
查看次数

是否可以从另一个 Step 函数调用一个 Step 函数?

我是 Step Functions 和 AWS 的新手。是否可以从 AWS (EMR) 中的另一个 Step Function 调用一个 Step Function?我正在开发一个 Step 函数,在停止 EMR 之前我必须将 Step 函数包含在 EMR 中。

这里我有两种情况。

1) 我必须从 SFN2 呼叫 SFN3 并停止 SFN2 中的 EMR。2) 执行所有步骤功能后我必须停止 EMR。

我已附上附件供您参考。

在此输入图像描述

请帮助我。

非常感谢。

amazon-web-services aws-lambda aws-step-functions

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

使用 Lambda 函数运行 AWS Athena 的查询

我在 AWS Athena 上创建了一个表,可以在其中运行任何查询而不会出现任何错误:

select * from mytestdb.test
Run Code Online (Sandbox Code Playgroud)

该表有三列,customer_Id, product_Id, price。

我尝试创建一个 lambda 函数,使用 boto3 为我运行相同的查询:

import time
import boto3

DATABASE = 'mytestdb'
TABLE = 'test'

output='s3://mybucketons3/'

COLUMN = 'Customer_Id'

def lambda_handler(event, context):

    keyword = 'xyz12345'

    query = "SELECT * FROM %s.%s where %s = '%s';" % (DATABASE, TABLE, COLUMN, keyword)

    client = boto3.client('athena')

    # Execution
    response = client.start_query_execution(
        QueryString=query,
        QueryExecutionContext={
            'Database': DATABASE
        },
        ResultConfiguration={
            'OutputLocation': output,
        }
    )


    return
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Response:
{
  "errorMessage": "An error occurred (AccessDeniedException) …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda

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

如何将Serverless应用到现有的API网关

最近我使用无服务器框架创建/部署AWS lambda函数/API网关。这是部署 Lambda/API 的一种非常酷的方式,但我不知道如何将其应用到现有的 AWS lambda/API。

有没有什么办法可以做到这一点,而无需删除现有的,然后使用无服务器重新创建,因为我有数十个现有的 lambda 函数和 api。

aws-lambda aws-api-gateway serverless

8
推荐指数
1
解决办法
5260
查看次数

AWS X-Ray Crossacount 数据收集

我有一个分布在两个 AWS 账户上的应用程序。应用程序的一部分将数据从一个帐户提取到另一个帐户。

生产者部分实现为 python lambda 微服务。消费者部分是Elastic beanstalk中的spring-boot应用程序和附加的python lambdas,它们在EBeanstalk中的spring-boot应用程序处理数据后进一步将数据分发到外部系统。

我没有在任何地方运行明确的 X-Ray 守护进程。

我想知道是否可以将一个帐户的 X 射线痕迹发送到该帐户,以便我可以在一处监控我的应用程序。

我在文档中找不到有关跨帐户使用的任何提示。这可行吗?

amazon-web-services aws-lambda aws-xray

8
推荐指数
1
解决办法
2926
查看次数