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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
简介: 本文介绍阿里云资源编排服务(ROS)(下面简称ROS)函数计算相关功能,涉及如下资源类型: ALIYUN::FC::Service  创建服务 ALIYUN::FC::Function  创建函数 ALIYUN::FC::FunctionInvoker 主动执行函数 ALIYUN::FC::Trigger  创建触发器,触发执行函数 通过使

本文介绍阿里云资源编排服务(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是传递给函数的参数。ExecuteVersion的变化才能够触发函数的调用。

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中通过把参与者传递给函数计算,抽取出中奖者并显示出来。

dad09a8699a22cb096ae08c5b27e675f.png

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

2486d64e57217c458c243318a71675eb.png

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

ae058a25de141fc1db5e3b530253958f.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 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
11天前
|
存储 网络协议 Serverless
函数计算产品使用问题之第三方软件链接阿里云SD出现无法绘图,是什么导致的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
弹性计算 运维 Serverless
阿里云Elasticsearch Serverless助力大型企业咨询公司大幅提升效能
阿里云Elasticsearch Serverless服务,提升了某大型企业咨询公司的数据查询速度和准确性,在实现成本可控的同时,帮助提高了企业效能并加强了客户服务能力。
337 0
|
11天前
|
监控 JavaScript Serverless
函数计算产品使用问题之如何手动上传Nuxt3打包的代码到阿里云函数计算(FC)进行部署
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
SQL 分布式计算 监控
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
本文演示了使用 EMR Serverless Spark 产品搭建一个日志分析应用的全流程,包括数据开发和生产调度以及交互式查询等场景。
56502 7
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
|
24天前
|
自然语言处理 Serverless 测试技术
《AIGC+软件开发新范式》--08.通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验
在AI 热度持续上升的当下,阿里云推出AI智能编码助手—通义灵码。通义灵码是一款基于阿里云通义代码大模型打造的智能编码助手,基于海量优秀开源代数据集和编程教科书训练,为开发者带来高效、流畅的编码体验。
|
2月前
|
人工智能 Serverless 异构计算
上海站丨飞天技术沙龙 Serverless + AI 专场开启报名!
"飞天技术沙龙——Serverless 技术实践营"将于2024年5月31日举行,聚焦Serverless在AI中的应用。活动包括演讲、实操,探讨Serverless演进趋势、AI应用开发及降低成本等议题。限额80人,报名审核制,现场还有大奖和证书待您领取。扫描链接<https://summit.aliyun.com/Serverless2024shanghai>报名。
上海站丨飞天技术沙龙 Serverless + AI 专场开启报名!
|
10天前
|
JSON Serverless 开发工具
函数计算产品使用问题之要使用Python写入时序数据到阿里云表格存储时序表,该怎么办
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
存储 SQL 数据可视化
阿里云 EMR Serverless StarRocks3.x,极速统一的湖仓新范式
EMR StarRocks 线上公开课第1期 ,直播主题:EMR Serverless StarRocks3.x,极速统一的湖仓新范式。
958 1
|
2月前
|
弹性计算 运维 Serverless
阿里云Elasticsearch Serverless帮助某视觉科技公司平稳应对流量激增
某视觉科技公司借助阿里云Elasticsearch Serverless应对创意资源平台的流量激增,通过服务自动扩缩容,确保流量高峰时的快速响应,降低至少50%的成本。同时,它提供弹性数据容量支持,简化运维,提升开发效率,并保证高精确度的搜索体验。
484 1
|
2月前
|
存储 分布式计算 Serverless
阿里云 EMR Serverless Spark 版开启免费公测
EMR Serverless Spark 版免费公测已开启,预计于2024年06月25日结束。公测阶段面向所有用户开放,您可以免费试用。
565 5

推荐镜像

更多