ALIYUN::FC::Service类型用于创建服务。服务下的所有函数共享一些相同的设置,例如:服务授权、配置日志。同一服务下有多个函数,这些函数共享服务配置的资源(例如:日志库、服务角色等)。

服务能帮助您更清晰地组织业务逻辑,是运维管理的基本单位。一个服务可以表示一个应用,构建同一应用的不同函数将放到同一服务下。服务之间不共享任何资源,没有任何依赖。

语法

{
  "Type": "ALIYUN::FC::Service",
  "Properties": {
    "Description": String,
    "VpcConfig": Map,
    "ServiceName": String,
    "Role": String,
    "DeletionForce": Boolean,
    "Tags": List,
    "NasConfig": Map,
    "LogConfig": Map,
    "TracingConfig": Map,
    "InternetAccess": Boolean,
    "VpcBindings": List
  }
}

属性

属性名称 类型 必须 允许更新 描述 约束
Description String 服务的描述。
VpcConfig Map 专有网络配置,配置后函数可以访问指定专有网络。 更多信息,请参见VpcConfig属性

更新资源栈时,若要删除网络配置,取值为:

{
  "VpcId": "",
  "VSwitchIds": [],
  "SecurityGroupId": ""
}
ServiceName String 服务的名称。 长度为1~128个字符,以英文字母或下划线(_)开头,可包含英文字母、数字、下划线(_)和短划线(-)。
Role String 授予函数计算所需权限的RAM角色ARN。 使用场景包含:
  • 将函数产生的日志发送到用户的日志库中。
  • 为函数在执行中访问其它云资源生成Token。
NasConfig Map NAS配置,配置后函数可以访问指定NAS资源。 更多信息,请参见NasConfig属性

更新资源栈时,若要删除NAS配置,取值为:

{
  "MountPoints": [],
  "UserId": -1,
  "GroupId": -1
}
LogConfig Map 日志配置,函数产生的日志会写入此处配置的日志库中。 更多信息,请参见LogConfig属性
TracingConfig Map 链路追踪配置。 当函数计算与链路追踪集成后,您可以记录请求在函数计算的耗时时间、查看函数的冷启动时间、记录函数内部时间的消耗等。

更多信息,请参见TracingConfig属性

InternetAccess Boolean 函数是否可以访问公网。 取值:
  • true:可以访问公网。
  • false:不可以访问公网。
DeletionForce Boolean 是否强制删除。 当您指定VpcConfig时该参数生效。取值:
  • true:直接删除服务,而不等待由函数计算为服务所创建的ENI被函数清理掉。
    说明 如果创建服务用到的交换机或安全组为参数传入,则在删除时可指定DeletionForce为true,以跳过等待,从而减少删除时间。
  • false(默认值):等待由函数计算为服务所创建的所有ENI被函数计算清理掉,然后再删除服务。

如果在当前资源栈中创建了交换机或安全组,并基于它们创建了此服务,在删除时无需指定DeletionForce,并要求在一小时内不要触发此服务的函数调用,这样其ENI才能被正常删除,进而正常删除整个资源栈。

Tags List 标签。 最多支持20个标签。

更多信息,请参见Tags属性

VpcBindings List 函数计算中绑定的VPC ID列表。 默认情况下,可以在创建函数后使用Internet端点和内部端点来调用函数。如果希望使用指定的VPC调用函数,则必须将指定的VPC绑定到函数计算。

最多支持指定20个VPC。

LogConfig语法

"LogConfig": {
  "Project": String,
  "Logstore": String,
  "EnableRequestMetrics": Boolean,
  "LogBeginRule": String   
}

LogConfig属性

属性名称 类型 必须 允许更新 描述 约束
Project String 日志中枢中的Project名称。
Logstore String 日志中枢中的日志库名称。
EnableRequestMetrics Boolean 是否启用请求监控。 取值:
  • true:启用。
  • false:禁用。
LogBeginRule String 日志分割规则。

VpcConfig语法

"VpcConfig": {
  "SecurityGroupId": String,
  "VSwitchIds": List,
  "VpcId": String
}

VpcConfig属性

属性名称 类型 必须 允许更新 描述 约束
SecurityGroupId String 安全组ID。
VSwitchIds List 交换机ID列表。 多个交换机ID之间用半角逗号(,)分隔。
VpcId String 专有网络ID。

NasConfig语法

"NasConfig": {
  "MountPoints": List,
  "UserId": Integer,
  "GroupId": Integer
}

NasConfig属性

属性名称 类型 必须 允许更新 描述 约束
MountPoints List 挂载点。 更多信息,请参见MountPoints属性
UserId Integer 用户ID。 取值范围:-1~65,534。
GroupId Integer 群组ID。 取值范围:-1~65,534。

TracingConfig语法

"TracingConfig": {
  "Type": String,
  "Params": Map
}

TracingConfig属性

属性名称 类型 必须 允许更新 描述 约束
Type String 链路追踪系统的类型。
Params Map 链路追踪的参数。

MountPoints语法

"MountPoints": [
  {
    "ServerAddr": String,
    "MountDir": String
  }
]

MountPoints属性

属性名称 类型 必须 允许更新 描述 约束
ServerAddr String NAS服务器地址。
MountDir String 本地挂载目录。

Tags语法

"Tags": [
  {
    "Key": String,
    "Value": String
  }
]  

Tags属性

属性名称 类型 必须 允许更新 描述 约束
Key String 标签键。 长度为1~128个字符,不能以aliyunacs:开头,不能包含http://https://
Value String 标签值。 长度为0~128个字符,不能以aliyunacs:开头,不能包含http://https://

返回值

Fn::GetAtt

  • ServiceId:系统为每个服务生成的唯一ID。
  • ServiceName:服务名称。
  • Tags:标签。
  • Role:RAM角色。
  • LogProject:日志项目。
  • Logstore:日志库。
  • InternetAccess:函数是否可以访问公网。
  • VpcId:专有网络ID。

示例

JSON格式

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": "Test FC FunctionInvoker、Trigger、Version、Alias、ProvisionConfig",
  "Parameters": {
    "AliasName": {
      "Type": "String",
      "Default": "TEST"
    },
    "ServiceName": {
      "Type": "String",
      "Description": "FC ServiceName",
      "Default": "mytest"
    },
    "SourceCode": {
      "Type": "String",
      "Description": "Function SourceCode",
      "Default": "def handler(event, context):\n\treturn 'Hello World!'"
    },
    "Handler": {
      "Type": "String",
      "Description": "Handler",
      "Default": "index.handler"
    },
    "Runtime": {
      "Type": "String",
      "Description": "Runtime",
      "Default": "python3"
    },
    "FunctionName": {
      "Type": "String",
      "Description": "Function Name",
      "Default": "PythonFunc"
    },
    "ExecuteVersion": {
      "Type": "Number",
      "Default": 1.0
    },
    "TriggerName": {
      "Type": "String",
      "Default": "mytest"
    },
    "TriggerType": {
      "Type": "String",
      "Default": "timer"
    },
    "Interval": {
      "Type": "String",
      "Description": "Time interval of Trigger.",
      "Default": "2"
    }
  },
  "Resources": {
    "Service": {
      "Type": "ALIYUN::FC::Service",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        }
      }
    },
    "Function": {
      "DependsOn": "Service",
      "Type": "ALIYUN::FC::Function",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        },
        "Code": {
          "SourceCode": {
            "Ref": "SourceCode"
          }
        },
        "Handler": {
          "Ref": "Handler"
        },
        "Runtime": {
          "Ref": "Runtime"
        },
        "FunctionName": {
          "Ref": "FunctionName"
        }
      }
    },
    "FunctionInvoker": {
      "DependsOn": "Trigger",
      "Type": "ALIYUN::FC::FunctionInvoker",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        },
        "FunctionName": {
          "Ref": "FunctionName"
        },
        "ExecuteVersion": {
          "Ref": "ExecuteVersion"
        }
      }
    },
    "Trigger": {
      "DependsOn": "Function",
      "Type": "ALIYUN::FC::Trigger",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        },
        "FunctionName": {
          "Ref": "FunctionName"
        },
        "TriggerName": {
          "Ref": "TriggerName"
        },
        "TriggerType": {
          "Ref": "TriggerType"
        },
        "TriggerConfig": {
          "Enable": true,
          "CronExpression": "0 0/4 * * * *"
        }
      }
    },
    "Version": {
      "DependsOn": "Function",
      "Type": "ALIYUN::FC::Version",
      "Properties": {
        "ServiceName": {
          "Fn::GetAtt": [
            "Service",
            "ServiceName"
          ]
        },
        "Description": "Test Version"
      }
    },
    "Alias": {
      "DependsOn": "Version",
      "Type": "ALIYUN::FC::Alias",
      "Properties": {
        "Description": "Test Alias",
        "VersionId": {
          "Fn::GetAtt": [
            "Version",
            "VersionId"
          ]
        },
        "ServiceName": {
          "Fn::GetAtt": [
            "Service",
            "ServiceName"
          ]
        },
        "AliasName": {
          "Ref": "AliasName"
        }
      }
    },
    "ProvisionConfig": {
      "DependsOn": "Alias",
      "Type": "ALIYUN::FC::ProvisionConfig",
      "Properties": {
        "ServiceName": {
          "Fn::GetAtt": [
            "Service",
            "ServiceName"
          ]
        },
        "Target": 1,
        "FunctionName": {
          "Fn::GetAtt": [
            "Function",
            "FunctionName"
          ]
        },
        "Qualifier": {
          "Fn::GetAtt": [
            "Alias",
            "AliasName"
          ]
        }
      }
    }
  },
  "Outputs": {
    "AliasName": {
      "Value": {
        "Fn::GetAtt": [
          "Alias",
          "AliasName"
        ]
      }
    },
    "VersionId": {
      "Value": {
        "Fn::GetAtt": [
          "Version",
          "VersionId"
        ]
      }
    },
    "ServiceId": {
      "Value": {
        "Fn::GetAtt": [
          "Service",
          "ServiceId"
        ]
      }
    },
    "FunctionId": {
      "Value": {
        "Fn::GetAtt": [
          "Function",
          "FunctionId"
        ]
      }
    },
    "ResultType": {
      "Value": {
        "Fn::GetAtt": [
          "FunctionInvoker",
          "ResultType"
        ]
      }
    },
    "Result": {
      "Value": {
        "Fn::GetAtt": [
          "FunctionInvoker",
          "Result"
        ]
      }
    },
    "TriggerId": {
      "Value": {
        "Fn::GetAtt": [
          "Trigger",
          "TriggerId"
        ]
      }
    }
  }
}

更多示例,请参见创建函数服务、创建函数、执行函数、触发函数执行、发布版本、创建别名和创建预留实例的组合示例:JSON示例YAML示例