Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Aws lambda 气流中长时间运行的lambda等待响应超时_Aws Lambda_Boto3_Airflow - Fatal编程技术网

Aws lambda 气流中长时间运行的lambda等待响应超时

Aws lambda 气流中长时间运行的lambda等待响应超时,aws-lambda,boto3,airflow,Aws Lambda,Boto3,Airflow,我们通过气流操作符调用某些lambda。在操作符中,调用boto3库中的lambda.invoke(通过AwsLambdaHook) 但是,其中一个lambda的运行时间很长(10-15分钟)。最初,由于invoke上的默认超时为60秒,操作员收到boto3超时异常 因此,我们扩展了AwsLambdaHook,以允许将配置传递给boto客户端(代码供参考): 来自afflow.contrib.hooks.aws\u hook导入 AwsLambdaHook类(Awshake): """ 与AWS

我们通过气流操作符调用某些lambda。在操作符中,调用boto3库中的
lambda.invoke
(通过
AwsLambdaHook

但是,其中一个lambda的运行时间很长(10-15分钟)。最初,由于
invoke
上的默认超时为60秒,操作员收到boto3超时异常

因此,我们扩展了
AwsLambdaHook
,以允许将配置传递给
boto
客户端(代码供参考):

来自afflow.contrib.hooks.aws\u hook导入
AwsLambdaHook类(Awshake):
"""
与AWS Lambda交互
:param function_name:AWS Lambda函数名
:类型函数\u名称:str
:参数区域名称:AWS区域名称(示例:us-west-2)
:键入区域名称:str
:param log_type:尾部调用请求
:type log\u type:str
:param限定符:AWS Lambda函数版本或别名
:类型限定符:str
:参数调用类型:AWS Lambda调用类型(请求响应、事件等)
:类型调用\u类型:str
:param config:config传递到lambda连接
:type config:boto3.config
"""
定义初始化__(
自己
函数名,
区域名称=无,
log_type=“无”,
限定符=“$LATEST”,
调用\u type=“RequestResponse”,
config=None,
*args,
**夸尔斯
):
self.function\u name=函数\u name
self.region\u name=区域名称
self.log\u type=日志类型
self.invocation\u type=调用类型
self.qualifier=限定符
self.config=config
超级(AwsLambdaHook,self)。\uuuu初始值(*args,**kwargs)
def get_conn(自身):
self.conn=self.get\u客户端类型(“lambda”,self.region\u名称,self.config)
返回自我控制
def调用_lambda(自身,有效载荷):
"""
调用Lambda函数
"""
awslambda_conn=self.get_conn()
响应=awslambda_conn.invoke(
FunctionName=self.function\u name,
调用类型=self.invocation\u类型,
LogType=self.log\u类型,
有效载荷=有效载荷,
限定符=self.Qualifier,
)
返回响应
我们将传递以下配置:

来自botocore.client导入配置
config_dict={“连接超时”:5,“读取超时”:900}
config=config(**config\u dict)
现在,操作员不再收到boto3超时异常。然而,它最终遇到了我们的Airflow任务执行超时(配置为1小时)。 在日志中,我看到了以下内容:

[2019-10-25 07:52:05,172] {aws_lambda_operator.py:114} INFO - AWS Lambda: invoking Lambdas20
[2019-10-25 07:52:05,316] {logging_mixin.py:95} INFO - [[34m2019-10-25 07:52:05,316[0m] {[34mconnectionpool.py:[0m735} INFO[0m - Starting new HTTPS connection (1): lambda.ap-southeast-1.amazonaws.com[0m
[2019-10-25 08:07:07,097] {logging_mixin.py:95} INFO - [[34m2019-10-25 08:07:07,097[0m] {[34mconnectionpool.py:[0m735} INFO[0m - Starting new HTTPS connection (2): lambda.ap-southeast-1.amazonaws.com[0m
[2019-10-25 08:22:08,489] {logging_mixin.py:95} INFO - [[34m2019-10-25 08:22:08,489[0m] {[34mconnectionpool.py:[0m735} INFO[0m - Starting new HTTPS connection (3): lambda.ap-southeast-1.amazonaws.com[0m
[2019-10-25 08:37:11,402] {logging_mixin.py:95} INFO - [[34m2019-10-25 08:37:11,402[0m] {[34mconnectionpool.py:[0m735} INFO[0m - Starting new HTTPS connection (4): lambda.ap-southeast-1.amazonaws.com[0m
[2019-10-25 08:52:05,172] {logging_mixin.py:95} INFO - [[34m2019-10-25 08:52:05,172[0m] {[34mtime
似乎AWS从未做出回应。不过,lambda已经完成了。同样的lambda代码(只需处理较少的数据并在不同的区域中运行)在lambda操作符中运行良好,因此我非常确定问题不在lambda

现在我有两个问题:

  • 在调用lambda之前,是否有人经历过类似的行为?决议是什么

  • 是否有其他方法可以异步轮询结果?我查看了
    boto3
    文档,但它看起来像是
    invoke\u async
    被弃用了


  • 你需要回复吗?是的,我想知道lambda是否成功完成。在启动DAG的下一个操作符之前需要它,因为这取决于创建的文件。您需要响应吗?是的,我想知道lambda是否成功完成。在我启动DAG的下一个操作符之前需要它,因为这取决于创建的文件。