首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对Chalice应用程序进行异步API调用?

如何对Chalice应用程序进行异步API调用?
EN

Stack Overflow用户
提问于 2022-11-27 10:44:55
回答 1查看 33关注 0票数 0

我需要一个用户请求从一个网络应用程序调用一个AWS Chalice端点,触发一个长期运行的作业。我不能让用户的浏览器等待响应。

Chalice在API中自动创建REST,所以这应该是可能的,因为它不是HTTP。

如何在AWS Chalice中实现端点,它在执行附加的Lambda函数之前立即响应用户?

我知道InvocationType: Event它应该允许这样,但这并没有影响,端点不会异步调用Lambda (客户机在作业完成20-30秒后得到响应)。

以下是Chalice应用程序中端点的大致样子:

代码语言:javascript
复制
@app.route('/api-v1/runLongJob', methods=['PUT'])
def run_long_job():

    # do some stuff that takes a long time here

    return {'status_code': 200}

我还将InvocationType设置为API网关控制台中的Method request部分中的标题:

看看这张截图是什么样子

关于如何使用InvocationType头调用这个端点的示例:

代码语言:javascript
复制
url = "https://----------.execute-api.xx-xxxx-x.amazonaws.com/api/v1-api/runLongJob"
data = {
    'some parameter': 'some data'
}
headers = {
    'Content-Type': 'application/json',
    'InvocationType': 'Event'
}

r = requests.put(
    url,
    data=json.dumps(data),
    headers=headers
)

如何在Chalice应用程序中创建异步端点?

EN

回答 1

Stack Overflow用户

发布于 2022-11-28 10:48:22

解决方案是在Chalice中使用.lambda_function特性以及调用调用中的invocationType='Event'参数,如下所示:

代码语言:javascript
复制
import boto3
from chalice import Chalice


lambda_client = boto3.client('lambda')
app = Chalice(app_name='api')
LOG.setLevel(logging.INFO)


@app.route('/v1/lambdaTest')
def test_endpoint():
    LOG.info(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    _ = lambda_client.invoke(
        FunctionName="api-dev-testFunction",
        InvocationType='Event',
        Payload="{}"
    )
    LOG.info(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    return {'status_code': 200}


@app.lambda_function(name='testFunction')
def test_lambda_function(event, context):
    LOG.info(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    time.sleep(20)
    LOG.info(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

这将生成两个lambda函数,一个用于API,一个用于异步任务。调用API时,响应是即时的,但任务需要20秒才能完成。

注意,我必须手动允许API在AWS控制台中调用另一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74589325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档