阿里云资源编排之函数计算

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
函数计算FC,每月15万CU 3个月
简介: 资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。本文将为您详细介绍阿里云资源编排服务的函数计算相关功能。

原文作者:资源编排(ROS)
原文链接:https://developer.aliyun.com/article/740218?spm=a2c6h.12873581.0.0.120c115e9hbaKn&groupCode=cloudnative
更多云原生技术资讯可关注阿里巴巴云原生技术圈

本文介绍阿里云资源编排服务(ROS)(下面简称ROS)函数计算相关功能,涉及如下资源类型:

通过使用上面的资源类型进行编排,可以灵活的使用函数计算的功能。

函数计算资源类型介绍

我们先看看阿里云ROS函数计算相关的4个资源类型都提供了什么能力和怎么使用。如果你还没接触过阿里云的资源编排服务,请戳这里

创建服务

服务 ( Service ) 是函数计算资源管理的单位。服务下的所有函数共享一些相同的设置,例如服务授权、配置日志。同一服务下有多个函数,这些函数共享服务配置的资源( 例如日志库,服务角色等)。
资源编排聚合了函数计算Service相关接口的能力,一个简单的创建服务的模板如下:

{
  "ROSTemplateFormatVersion" : "2015-09-01",
  "Parameters" : {
    "ServiceName": {
      "Type": "String"
    }
  },
  "Resources" : {
    "Service": {
      "Type": "ALIYUN::FC::Service",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        }
      }
    }
  },
  "Outputs": {
    "ServiceId": {
      "Value": {"Fn::GetAtt": ["Service", "ServiceId"]}
    }
  }
}

参数取值示例:

{
   "ServiceName": "test-fc-service"
}

可以看出,在最简单的情况下,只需要定义ServiceName,就可以创建出一个服务。
ALIYUN::FC::Service还支持其他很多参数,具体可以参考相关文档

创建函数

函数是系统调度和运行的单位。函数必须从属于服务,一个服务下的所有函数都共享该服务的属性,例如授权,日志设置。
资源编排聚合了函数计算Function相关接口的能力,一个简单的创建函数的模板如下:

{
  "ROSTemplateFormatVersion" : "2015-09-01",
  "Parameters" : {
    "ServiceName": {
      "Type": "String"
    },
    "Code": {
      "Type": "Json"
    },
    "FunctionName": {
      "Type": "String"
    },
    "Handler": {
      "Type": "String"
    },
    "Runtime": {
      "Type": "String"
    }
  },
  "Resources" : {
    "Function": {
      "Type": "ALIYUN::FC::Function",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        },
        "Code": {
          "Ref": "Code"
        },
        "FunctionName": {
          "Ref": "FunctionName"
        },
        "Handler": {
          "Ref": "Handler"
        },
        "Runtime": {
          "Ref": "Runtime"
        }
      }
    }
  },
  "Outputs": {
    "FunctionId": {
      "Value": {"Fn::GetAtt": ["Function", "FunctionId"]}
    }
  }
}

参数取值示例:

{
    "ServiceName": "test-fc-service",
    "Code": {
        "ZipFile": "UEsDBBQAAAAIAFybkk7kWCJARgAAAE0AAAAHAAAAbWFpbi5weePKzC3ILypRKErMS8nP5eLiSklNUyjKz8nRSC1LzSvRUUjOzytJrSjRtOJSAIKi1JLSojyoaj0QlZlXomGgo2BoYKDJBQBQSwECFAMUAAAACABcm5JO5FgiQEYAAABNAAAABwAAAAAAAAAAAAAApIEAAAAAbWFpbi5weVBLBQYAAAAAAQABADUAAABrAAAAAAA="
    },
    "FunctionName": "test-fc-function",
    "Handler": "main.roll",
    "Runtime": "python2.7"
}

可以看出,只需要传递服务名、函数名、执行代码、运行时、执行入口,就可以创建出一个函数。示例使用了直接传递代码的方式(code zip包的base64编码),推荐采用OSS的方式。这是段python的代码,运行入口是main.py的roll函数,具体功能是返回一个1-100的随机数。
ALIYUN::FC::Function还支持其他很多参数,具体可以参考相关文档

执行函数

主动执行函数。
资源编排聚合了函数计算Function执行相关接口的能力,一个简单的创建函数的模板如下:

{
  "ROSTemplateFormatVersion" : "2015-09-01",
  "Parameters" : {
    "ServiceName": {
      "Type": "String"
    },
    "FunctionName": {
      "Type": "String"
    },
    "Async": {
      "Type": "Boolean"
    },
    "Event": {
      "Type": "String"
    },
    "ExecuteVersion": {
      "Type": "Number"
    }
  },
  "Resources" : {
    "FunctionInvoker": {
      "Type": "ALIYUN::FC::FunctionInvoker",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        },
        "FunctionName": {
          "Ref": "FunctionName"
        },
        "Async": {
          "Ref": "Async"
        },
        "Event": {
          "Ref": "Event"
        },
        "ExecuteVersion": {
          "Ref": "ExecuteVersion"
        }
      }
    }
  },
  "Outputs": {
    "Result": {
      "Value": {"Fn::GetAtt": ["FunctionInvoker", "Result"]}
    },
    "ResultType": {
      "Value": {"Fn::GetAtt": ["FunctionInvoker", "ResultType"]}
    }
  }
}

参数取值示例:

{
    "ServiceName": "test-fc-service",
    "FunctionName": "test-fc-function",
    "Async": false,
    "Event": "abc",
    "ExecuteVersion": 0
}

通过传递服务名、函数名就能构建一个FunctionInvoker。Async用于表明是否异步执行,同步执行会产生输出,异步执行不会产生输出。Event是传递给函数的参数,必须是utf-8编码的字符串,如果要传递二进制,可以使用base64进行编码。ExecuteVersion的变化才能够触发函数的调用。
函数执行的返回结果也要求为utf-8编码的字符串,如果要返回二进制或其他编码的字符串,可以先使用base64编码再返回。
ALIYUN::FC::FunctionInvoker的更多使用细节可以参考相关文档

创建触发器

触发器是触发函数执行的方式。在事件驱动的计算模型中,事件源是事件的生产者,函数是事件的处理者,而触发器提供了一种集中的和统一的方式来管理不同的事件源。在事件源中,当事件发生时,如果满足触发器定义的规则,事件源则调用触发器所对应的函数。
资源编排聚合了函数计算Trigger相关接口的能力,一个简单的创建触发器的模板如下:

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Resources": {
    "Trigger": {
      "Type" : "ALIYUN::FC::Trigger",
      "Properties" : {
        "ServiceName" : "test-fc-service",
        "FunctionName": "test-fc-function",
        "TriggerName": "test-fc-trigger",
        "TriggerType": "oss",
        "TriggerConfig": {
          "events": [
            "oss:ObjectCreated:*"
          ],
          "filter": {
            "key": {
              "prefix": "abc",
              "suffix": "def"
            }
          }
        },
        "InvocationRole": "acs:ram::123456789:role/test-fc-trigger",
        "SourceArn": "acs:oss:cn-hangzhou:123456789:oss-test-fc-trigger"
      }
    }
  }
}

Trigger相对来说比较复杂,尤其在TriggerConfig的编写上,这可以参考函数计算Trigger的官方文档
ALIYUN::FC::Trigger的更多使用细节可以参考相关文档

综合应用场景:抽奖

我们把函数计算相关的资源组合在一起使用,实现一个抽奖功能。使用附录中的模板创建Stack,创建参数如下图所示。该模板使用函数计算实现了抽奖功能,在Stack中通过把参与者传递给函数计算,抽取出中奖者并显示出来。
1.png

等待Stack创建完成,观察Stack输出结果。发现小明中奖。
2.png

更新Stack,修改ExecuteVersion为1。等待Stack更新完成,观察Stack输出结果。发现王五中奖。
3.png

附录:抽奖模板

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "Persons": {
      "Type": "CommaDelimitedList"
    },
    "ServiceName": {
      "Type": "String",
      "Default": "test-fc-service"
    },
    "FunctionName": {
      "Type": "String",
      "Default": "test-fc-function"
    },
    "ExecuteVersion": {
      "Type": "Number",
      "Default": 0
    }
  },
  "Resources": {
    "Service": {
      "Type": "ALIYUN::FC::Service",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        }
      }
    },
    "Function": {
      "Type": "ALIYUN::FC::Function",
      "DependsOn": "Service",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        },
        "FunctionName": {
          "Ref": "FunctionName"
        },
        "Code": {
          "ZipFile": "UEsDBBQAAAAIADZ+pk6tb78pYgAAAHQAAAAHAAAAbWFpbi5weS2MQQqDQAxF9zlFds6AzAG8SulCxogBJxnib7G3by2+5YP3SFv3AMdsizciWmTl3QGJT5K3GEaubpATeSL+EYJX2B2UurlWSQ+bm5QDoT1lXj34EqzG/0c5+q5IwzjkZ6YvUEsBAhQDFAAAAAgANn6mTq1vvyliAAAAdAAAAAcAAAAAAAAAAAAAAKSBAAAAAG1haW4ucHlQSwUGAAAAAAEAAQA1AAAAhwAAAAAA"
        },
        "Handler": "main.lottery",
        "Runtime": "python2.7",
        "Timeout": 2
      }
    },
    "FunctionInvoker": {
      "Type": "ALIYUN::FC::FunctionInvoker",
      "DependsOn": "Function",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        },
        "FunctionName": {
          "Ref": "FunctionName"
        },
        "Async": false,
        "Event": {
          "Fn::Join": [",", {"Ref": "Persons"}]
        },
        "ExecuteVersion": {
          "Ref": "ExecuteVersion"
        }
      }
    }
  },
  "Outputs": {
    "Result": {
      "Value": {
        "Fn::Replace" : [
          {
            "Person": {
              "Fn::GetAtt": [
                "FunctionInvoker",
                "Result"
              ]
            }
          }, 
          "恭喜Person中奖"
        ]
      }
    }
  }
}

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
2月前
|
人工智能 Java Serverless
阿里云函数计算助力AI大模型快速部署
随着人工智能技术的快速发展,AI大模型已经成为企业数字化转型的重要工具。然而,对于许多业务人员、开发者以及企业来说,探索和利用AI大模型仍然面临诸多挑战。业务人员可能缺乏编程技能,难以快速上手AI模型;开发者可能受限于GPU资源,无法高效构建和部署AI应用;企业则希望简化技术门槛,以更低的成本和更高的效率利用AI大模型。
269 12
|
18小时前
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
116 12
|
16天前
|
机器学习/深度学习 分布式计算 大数据
阿里云 EMR Serverless Spark 在微财机器学习场景下的应用
面对机器学习场景下的训练瓶颈,微财选择基于阿里云 EMR Serverless Spark 建立数据平台。通过 EMR Serverless Spark,微财突破了单机训练使用的数据规模瓶颈,大幅提升了训练效率,解决了存算分离架构下 Shuffle 稳定性和性能困扰,为智能风控等业务提供了强有力的技术支撑。
137 15
|
8天前
|
存储 分布式计算 物联网
美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
美的楼宇科技基于阿里云 EMR Serverless Spark 建设 IoT 数据平台,实现了数据与 AI 技术的有效融合,解决了美的楼宇科技设备数据量庞大且持续增长、数据半结构化、数据价值缺乏深度挖掘的痛点问题。并结合 EMR Serverless StarRocks 搭建了 Lakehouse 平台,最终实现不同场景下整体性能提升50%以上,同时综合成本下降30%。
|
1月前
|
弹性计算 运维 监控
阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化
通过阿里云的 Serverless 产品和技术,盟主直播实现了核心直播平台的云原生架构升级,不仅解决了盟主直播现有业务面临的挑战,还面向未来为盟主直播的平台扩展性提供了技术基础,有效提升了行业竞争力。
|
2月前
|
弹性计算 Cloud Native Serverless
阿里云 SAE 邀您参加 Serverless 高可用架构挑战赛,赢取精美礼品
阿里云 SAE 邀您参加 Serverless 高可用架构挑战赛,赢取精美礼品。
|
4月前
|
人工智能 弹性计算 运维
触手可及:阿里云函数计算助力AI大模型的评测
阿里云推出的面向AI服务器的功能计算(Functional Computing, FC),专为AI应用提供弹性计算资源。该服务支持无服务器部署、自动资源管理和多语言支持,极大简化了AI应用的开发和维护。本文全面评测了FC for AI Server的功能特性、使用体验和成本效益,展示了其在高效部署、成本控制和安全性方面的优势,并通过具体应用案例和改进建议,展望了其未来发展方向。
293 4
|
5月前
|
SQL 分布式计算 Serverless
阿里云 EMR Serverless Spark 版正式开启商业化
阿里云 EMR Serverless Spark 版正式开启商业化,内置 Fusion Engine,100% 兼容开源 Spark 编程接口,相比于开源 Spark 性能提升300%;提供 Notebook 及 SQL 开发、调试、发布、调度、监控诊断等一站式数据开发体验!
240 3
阿里云 EMR Serverless Spark 版正式开启商业化
|
5月前
|
人工智能 运维 大数据
阿里云“触手可及,函数计算玩转 AI 大模型”解决方案评测报告
阿里云“触手可及,函数计算玩转 AI 大模型”解决方案评测报告
173 2

相关产品

  • 函数计算
  • 推荐镜像

    更多