本文介绍如何通过函数计算Python SDK快速调用API执行创建函数、调用函数、创建触发器等操作。
前提条件
您已完成以下操作:Python SDK示例
# -*- coding: utf-8 -*-
import fc2
import os
# 输入用户临时密钥,包括临时Token
# 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
# 建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,可能导致AccessKey泄露,威胁您账号下所有资源的安全。
# 本示例以将AccessKey和AccessSecretKey保存在环境变量中实现身份验证为例。
# 运行本示例前请先在本地环境中设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
# 在FC Runtime运行环境下,配置执行权限后,ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET环境变量会自动被设置。
client = fc2.Client(
endpoint='<Your Endpoint>',
accessKeyID=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
accessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))
# 创建服务时配置VPC信息。
vpcConfig = {
'vpcId': '<Your Vpc Id>',
'vSwitchIds': ['<[Your VSwitch Ids]>'],
'securityGroupId': '<Your Security Group Id>'
}
# 创建服务时创建vpcConfig。
# 当需要设置VPC配置时,需设置角色。
vpc_role = 'acs:ram::12345678:role/aliyunvpcrole'
# 创建服务时设置NAS配置。
nasConfig = {
"userId": '<The NAS file system user id>',
"groupId": '<The NAS file system group id>',
"mountPoints": [
{
"serverAddr" : '<The NAS file system mount target>',
"mountDir" : '<The mount dir to the local file system>',
}
],
}
service = client.create_service('service_name', role=vpc_role, vpcConfig=vpcConfig, nasConfig=nasConfig)
# 创建Initializer函数。
# 当前目录有一个main.zip文件(main.py有一个myhandler函数)。
# 设置环境变量{'testKey': 'testValue'}。
# main.my_initializer为初始化界面的入口点。
client.create_function('service_name', 'function_name', 'python3', 'main.my_handler', "main.my_initializer", codeZipFile = 'main.zip', environmentVariables = {'testKey': 'testValue'})
# 同步调用函数。
client.invoke_function('service_name', 'function_name')
# 创建触发器。
# 创建OSS触发器。
oss_trigger_config = {
'events': ['oss:ObjectCreated:*'],
'filter': {
'key': {
'prefix': 'prefix',
'suffix': 'suffix'
}
}
}
source_arn = 'acs:oss:cn-shanghai:12345678:bucketName'
invocation_role = 'acs:ram::12345678:role/aliyunosseventnotificationrole'
client.create_trigger('service_name', 'function_name', 'trigger_name', 'oss',oss_trigger_config, source_arn, invocation_role)
# 创建日志服务触发器。
log_trigger_config = {
'sourceConfig': {
'logstore': 'log_store_source'
},
'jobConfig': {
'triggerInterval': 60,
'maxRetryTime': 10
},
'functionParameter': {},
'logConfig': {
'project': 'log_project',
'logstore': 'log_store'
},
'enable': False
}
source_arn = 'acs:log:cn-shanghai:12345678:project/log_project'
invocation_role = 'acs:ram::12345678:role/aliyunlogetlrole'
client.create_trigger('service_name', 'function_name', 'trigger_name', 'log',log_trigger_config, source_arn, invocation_role)
# 创建定时触发器。
time_trigger_config = {
'payload': 'awesome-fc',
'cronExpression': '0 5 * * * *',
'enable': True
}
client.create_trigger('service_name', 'function_name', 'trigger_name', 'timer', time_trigger_config, '1', '')
# 调用带有输入参数的函数。
client.invoke_function('service_name', 'function_name', payload='hello_world')
# 读取图像并以文件数据作为输入参数调用函数。
src = open('src_image_file_path', 'rb') # Note: please open it as binary.
r = client.invoke_function('service_name', 'function_name', payload=src)
# 将结果保存为输出图像。
dst = open('dst_image_file_path', 'wb')
dst.write(r.data)
src.close()
dst.close()
# 异步调用函数。
client.invoke_function('service_name', 'function_name', headers = {'x-fc-invocation-type': 'Async'})
# 获取服务列表。
client.list_services()
# 获取带有前缀和限制的函数列表。
client.list_functions('service_name', prefix='the_prefix', limit=10)
# 删除触发器
client.delete_trigger('service_name', 'function_name','trigger_name')
# 删除函数。
client.delete_function('service_name', 'function_name')
# 删除服务。
client.delete_service('service_name')