运维编排场景系列-----流水线操作函数计算

本文涉及的产品
函数计算FC,每月15万CU 3个月
系统运维管理,不限时长
简介: 函数计算(FC)是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。在函数计算的基础上,为实现自动创建与运行函数计算,以及输出函数计算的运行结果。为简单执行上述的流水先操作,此时可以使用OOS服务来实现一系列的自动化动作。

函数计算(FC)是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。在函数计算的基础上,为实现自动创建与运行函数计算,以及输出函数计算的运行结果。为简单执行上述的流水先操作,此时可以使用OOS服务来实现一系列的自动化动作。

前提条件

  1. 编写业务需求的脚本代码

模版说明:

本模版主要功能为:

  1. 创建资源栈

    1. 创建FC服务
    2. 创建FC函数
    3. 运行FC函数
  2. 等待资源栈至创建成功状态
  3. 删除资源栈
  4. 输出FC函数运行的结果
Description:
  en: Run function (FC) and output the result.
  zh-cn: 运行函数计算(FC)并输出结果。
FormatVersion: OOS-2019-06-01
Parameters:
  Handler:
    Type: String
    Description:
      en: 'Function execution entry, specific format and language related.'
      zh-cn: function执行的入口,具体格式和语言相关
  Runtime:
    Type: String
    Description:
      en: Function runtime environment.
      zh-cn: function的运行环境。
    AllowedValues:
      - nodejs6
      - nodejs8
      - python2.7
      - python3
      - java8
  Timeout:
    Type: Number
    Description:
      en: Function timeout.
      zh-cn: function运行的超时时间。
    MinValue: 1
    MaxValue: 300
    Default: 3
  SourceCode:
    Type: String
    Description:
      en: Function code.
      zh-cn: function的运行代码脚本。
  ParameterValue:
    Type: String
    Description:
      en: The value of the script code.
      zh-cn: 脚本代码的传参。
  OOSAssumeRole:
    Description: The RAM role to be assumed by OOS.
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: createStack
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Create a resource stack.
      zh-cn: 创建资源栈。
    Properties:
      Service: ROS
      API: CreateStack
      Parameters:
        StackName: 'OOS-{{ACS::ExecutionId}}'
        TimeoutInMinutes: 10
        DisableRollback: false
        Parameters:
          - ParameterKey: ParameterKeys
            ParameterValue: '{{ ParameterValue }}'
          - ParameterKey: FunctionName
            ParameterValue: 'OOS-{{ACS::ExecutionId}}'
          - ParameterKey: ServiceName
            ParameterValue: 'OOS-{{ACS::ExecutionId}}'
        TemplateBody: |-
          {
              "ROSTemplateFormatVersion": "2015-09-01",
              "Parameters": {
                  "ParameterKeys": {
                    "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": {
                              "SourceCode": "{{ SourceCode }}"
                          },
                          "Handler": "{{ Handler }}",
                          "Runtime": "{{ Runtime }}",
                          "Timeout": "{{ Timeout }}"
                          }
                      },
                      "FunctionInvoker": {
                          "Type": "ALIYUN::FC::FunctionInvoker",
                          "DependsOn": "Function",
                          "Properties": {
                              "ServiceName": {
                                  "Ref": "ServiceName"
                              },
                              "FunctionName": {
                                  "Ref": "FunctionName"
                              },
                              "Async": false,
                              "Event": {
                                  "Fn::Join": [",", {"Ref": "ParameterKeys"}]
                              },
                              "ExecuteVersion": {
                                  "Ref": "ExecuteVersion"
                              }
                          }
                      }
                  },
                  "Outputs": {
                      "Result": {
                          "Value": {
                              "Fn::Replace" : [
                              {
                                  "FcResult": {
                                  "Fn::GetAtt": [
                                      "FunctionInvoker",
                                      "Result"
                                  ]
                                  }
                              },
                              "FcResult"
                              ]
                          }
                      }
                  }
              }
    Outputs:
      StackId:
        Type: String
        ValueSelector: StackId
  - Name: untilStackReady
    Action: 'ACS::WaitFor'
    OnError: deleteStack
    Description:
      en: Wait the stack status util CREATE_COMPLETE.
      zh-cn: 等待资源栈至创建成功状态。
    Properties:
      Service: ROS
      API: GetStack
      Parameters:
        StackId: '{{createStack.StackId}}'
      DesiredValues:
        - CREATE_COMPLETE
      StopRetryValues:
        - CREATE_FAILED
        - CHECK_FAILED
        - ROLLBACK_FAILED
        - ROLLBACK_COMPLETE
      PropertySelector: Status
    Outputs:
      Result:
        Type: String
        ValueSelector: 'Outputs[].OutputValue'
  - Name: deleteStack
    Action: 'ACS::ExecuteApi'
    Description:
      en: Delete the stack.
      zh-cn: 删除资源栈。
    Properties:
      Service: ROS
      API: DeleteStack
      Parameters:
        StackId: '{{createStack.StackId}}'
Outputs:
  Result:
    Type: String
    Value: '{{ untilStackReady.Result }}'

模版参数说明:

参数 说明 示例
Handler function执行的入口,具体格式和语言相关(注:前部分为脚本文件名,后部分为脚本内函数名) index.lottery
Runtime function的运行环境,目前支持:
- nodejs6
- nodejs8
- python2.7
- python3
- java8
python3
Timeout function运行的超时时间,单位为秒,最小1秒,最长5分钟,默认3秒。 3
SourceCode 脚本代码。(注:需要将换行转化为\n) import randomndef lottery(event, context):\n    return '恭喜%s中奖' % random.choice([name.strip() for name in event.decode('utf-8').split(',')])
ParameterValue 用于脚本的参数值(注:在脚本中使用参数时,传入到脚本的参数为Bytes类型,需要在脚本代码中转译成需要的编码类型。) a,b,c,d
OOSAssumeRole 可选参数。
- (默认设置)当前账号的已有权限:执行您使用的账号的权限动作。请确保您拥有创建自定义镜像涉及的所有ECS API调用权限。
- 指定RAM角色,使用该角色的权限:如果指定了RAM角色名称,OOS扮演该RAM角色执行运维任务。
当前账号的已有权限

操作步骤

  1. 请访问运维编排OOS的控制台点击立即开通按钮开通服务。这是一个免费服务,请放心开通。1571987708792_20e8a66f_f200_4778_b144_a2bf5e4ac371
  2. 单击自定义模板,单击创建模板按钮,选取空白模板1571987744797_70bd927c_db33_4957_b817_31d49868e6ba
  3. 将上述提供的子模板粘贴到yaml栏,输入名称RunFcForLottery或自定义名称,点击创建模板1574221563415_e22cb4b8_d772_41d6_9d13_792d2bda7c54
  4. 单击创建执行1574221665034_7f24188e_954b_4da3_a3fc_1d74f3b8b542
  5. 保持基本信息的默认设置,单击下一步:设置参数
  6. 完成参数设置填写,单击下一步:确认1574221682262_259ad4c2_eca0_418d_8091_eefbf559b621
  7. 查看参数设置是否无误,确认无误后单击创建执行1574221712155_17c11e41_86c3_47ad_9bef_0d4d9c12f30d
  8. 执行管理中查看创建的运维任务。1574221824022_3e0e6a0f_876a_473a_8dfe_81b8cf3c73ab
  9. 执行结果如下所示,结果输出栏显示的是根据脚本中运行的结果。
    1574221936326_888dcf95_4083_491d_8da7_9f5141ac9a7d

附录:

此模版是使用的资源栈的形式运行的函数计算。使用函数计算可以将模版产生的数据在脚本内处理成业务需求的的格式或使用于特殊的需求。当以上述的OOS模版的方式来运行函数计算只需要根据实际情况补充参数,及编写的脚本代码即可实现自动创建函数计算,并输出函数计算的结果。

系列文章

主题文章

阿里云重磅发布云上自动化利器——运维编排OOS

最佳实践

玩转运维编排服务的权限:Assume Role+Pass Role
阿里云运维编排新功能:一键批量克隆ECS
批量在多台ECS内执行命令

场景系列

运维编排场景系列----更新ECS镜像
运维编排场景系列----给ECS实例自动打TAG
运维编排场景系列----从实例中拷贝文件到OSS
运维编排场景系列----给实例加到SLS机器组
运维编排场景系列----检测MFA功能状态
运维编排场景系列----每日统计多Region实例的运行状态
运维编排场景系列----如何使用jq
运维编排场景系列----分批到机器上运行命令
运维编排场景系列----更新镜像后自动更新伸缩配置镜像
运维编排场景系列----向Linux实例上传文件
运维编排场景系列----运行远端shell脚本
运维编排场景系列----在ECS实例上运行Ansible-playbook
运维编排场景系列----下载JVM堆栈到OSS
运维编排系列场景----将实例的固定公网IP转换为其它新EIP
运维编排场景系列----自动定时升级临时带宽
运维编排场景系列----批量更新云助手客户端
运维编排系列场景----批量释放实例
运维编排场景系列----ECS实例系统快照下载到本地
运维编排场景系列----批量更换系统盘
运维编排场景系列----自动创建多个区域同类型存储空间

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
运维 Devops 持续交付
自动化运维的魔法:打造高效DevOps流水线
【10月更文挑战第34天】在数字化时代的浪潮中,DevOps成为企业追求敏捷、高效和稳定的关键。本文将通过一个真实案例,展示如何构建一个高效的DevOps流水线,实现从代码提交到部署的全自动化流程。我们将探讨流水线设计的哲学、工具选择以及面临的挑战,并分享实际的代码示例和操作步骤,帮助读者理解自动化运维的精髓。
27 2
|
3月前
|
机器学习/深度学习 机器人 Serverless
FaaS 的应用场景
FaaS 的应用场景
|
3月前
|
消息中间件 存储 监控
函数计算产品使用问题之“低频介质型”适用哪些场景
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
18天前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
54 1
|
1月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
57 3
|
1月前
|
运维 监控 Devops
自动化运维的魔法:打造高效DevOps流水线
【10月更文挑战第6天】 在现代软件开发的快节奏中,自动化运维成为提高效率、保障质量的重要手段。本文将带你了解如何构建高效的DevOps流水线,从持续集成到部署,再到监控和反馈,我们将一步步揭开自动化运维的神秘面纱。你将学习到如何通过代码和工具的结合,实现软件交付过程的自动化,以及如何通过这一流程提升团队的协作和响应速度。让我们开始探索自动化运维的奇妙之旅吧!
|
1月前
|
运维 jenkins 持续交付
自动化运维之路:构建高效CI/CD流水线
在软件开发的快节奏中,持续集成和持续部署(CI/CD)流水线是提升效率、保障质量的关键。本文将引导你理解CI/CD流水线的重要性,并手把手教你如何搭建一个高效的自动化运维系统。通过实际代码示例,我们将一步步实现从代码提交到自动测试、部署的全流程自动化,确保软件交付过程既快速又可靠。
|
2月前
|
消息中间件 运维 安全
云消息队列 ApsaraMQ Serverless 演进:高弹性低成本、更稳定更安全、智能化免运维
在 2024 年云栖大会上,阿里云智能集团产品专家刘尧全面介绍了云消息队列 ApsaraMQ Serverless 的落地成果和产品进展。此外,我们还邀请到杭州优行科技有限公司中间件消息研发负责人王智洋,分享了 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。
153 11
|
3月前
|
存储 缓存 监控
函数计算产品使用问题之调用sd生图时,怎么保证高并发场景正常运行
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
弹性计算 监控 Serverless
函数计算产品使用问题之如何处理银行转账场景遇到的高并发问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。