serverless docker 模式;运行 python RESTFul api。函数计算如何提交通过sdk 提交任务?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
以下是详细的步骤和说明,帮助您在函数计算中使用 SDK 提交任务,特别是在 Serverless Docker 模式下运行 Python RESTful API 的场景。
在提交任务之前,确保以下准备工作已完成: - 创建函数:已通过函数计算控制台或 SDK 创建一个支持异步任务模式的函数。 - 配置触发器:如果需要通过事件触发函数,请确保已配置相应的触发器(如 HTTP 触发器)。 - 安装依赖:如果您的 Python RESTful API 依赖第三方库,请确保已通过 requirements.txt
或其他方式正确安装依赖,并将其打包到 Docker 镜像中。
为了支持任务提交和管理,您需要为函数开启异步任务模式。可以通过以下两种方式实现:
调用 PutFunctionAsyncInvokeConfig
接口,将异步调用模式配置为任务模式。示例代码如下(以 Python SDK 为例):
from alibabacloud_fc_open20210406.client import Client
from alibabacloud_tea_openapi.models import Config
# 初始化客户端
config = Config(
access_key_id="your-access-key-id",
access_key_secret="your-access-key-secret",
region_id="cn-hangzhou"
)
client = Client(config)
# 配置异步调用模式为任务模式
response = client.put_function_async_invoke_config(
service_name="your-service-name",
function_name="your-function-name",
async_config={
"statefulInvocation": True
}
)
print(response.body)
在异步任务模式开启后,您可以通过 SDK 提交任务。以下是具体操作步骤:
为了避免任务重复提交,建议为每次任务设置全局唯一的 TaskID
。您可以在触发函数执行时,通过 HTTP 请求头 X-Fc-Stateful-Async-Invocation-Id
设置 TaskID
。
使用 SDK 调用 InvokeFunction
接口提交任务。以下是一个完整的 Python 示例代码:
from alibabacloud_fc_open20210406.client import Client
from alibabacloud_tea_openapi.models import Config
from alibabacloud_fc_open20210406.models import InvokeFunctionRequest
# 初始化客户端
config = Config(
access_key_id="your-access-key-id",
access_key_secret="your-access-key-secret",
region_id="cn-hangzhou"
)
client = Client(config)
# 构造请求
request = InvokeFunctionRequest(
service_name="your-service-name",
function_name="your-function-name",
payload=b'{"key": "value"}', # 传递给函数的参数
headers={
"X-Fc-Stateful-Async-Invocation-Id": "your-task-id" # 设置 TaskID
}
)
# 提交任务
response = client.invoke_function(request)
print(response.body)
提交任务后,您可以使用 SDK 查询任务的状态。调用 GetStatefulAsyncInvocation
接口获取某次任务的详细信息。示例代码如下:
response = client.get_stateful_async_invocation(
service_name="your-service-name",
function_name="your-function-name",
invocation_id="your-task-id"
)
print(response.body)
如果需要停止正在运行的任务,可以调用 StopStatefulAsyncInvocation
接口。示例代码如下:
response = client.stop_stateful_async_invocation(
service_name="your-service-name",
function_name="your-function-name",
invocation_id="your-task-id"
)
print(response.body)
TaskID
是全局唯一的,否则系统会认为是重复提交并返回错误 409
。通过以上步骤,您可以在函数计算中成功提交任务,并在 Serverless Docker 模式下运行 Python RESTful API。