开发者社区 > 云原生 > Serverless > 正文

我有一个问题,我通过api创建函数,怎么指定这个函数是http服务而不是事件处理函数?

我有一个问题,我通过api创建函数,怎么指定这个函数是http服务而不是事件处理函数?

展开
收起
函数计算小白 2023-06-19 15:07:32 58 0
4 条回答
写回答
取消 提交回答
  • 在创建函数时,您可以使用 FunctionComputefc-http 运行时来将函数定义为 HTTP 服务。下面是创建 HTTP 服务函数的方式:

    1. 使用 fc-http 运行时创建函数 您可以通过 FC 控制台、函数计算 CLI 或 SDK 创建函数,并选择 fc-http 运行时。示例 CLI 命令如下:
    $ fun deploy --runtime nodejs14 --handler index.handler --memory-size 128 --timeout 3 --http
    

    其中,--http 参数将函数定位为 HTTP 服务。

    1. 配置 HTTP 触发器 创建完 HTTP 服务函数后,您需要为其配置 HTTP 触发器。您可以在 FC 控制台中为函数添加 HTTP 触发器,或者使用 fun 工具添加触发器。示例 CLI 命令如下:
    $ fun deploy --trigger-http
    

    这将会创建一个 API 网关触发器,并将其绑定到您的函数上。 完成上述操作后,您的函数就可以作为 HTTP 服务运行了。您可以通过访问 API 网关来访问该函数。例如,您可以使用类似以下的 URL 来访问该函数:

    https://<api-gateway-domain>/<function-path>?<query-parameters>
    

    其中,<api-gateway-domain> 为 API 网关的域名,<function-path> 为您的函数路径,<query-parameters> 为您的请求参数。

    2023-06-20 08:06:35
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在阿里云函数计算中,您可以通过创建 HTTP 触发器来将函数指定为 HTTP 服务。在使用 API 创建函数时,您可以在请求参数中指定该函数的触发器类型。

    具体来说,您可以使用 CreateFunction 接口创建函数,并在请求参数中添加 initializationTimeoutinitializerHandler 字段。其中,initializationTimeout 字段用于指定函数初始化的超时时间,initializerHandler 字段用于指定函数的初始化处理器。如果您需要将函数指定为 HTTP 服务,则需要将 initializerHandler 字段设置为 http.handler

    以下是一个使用 API 创建 HTTP 服务的示例请求:

    {
      "serviceName": "my-service",
      "code": {
        "zipFile": "UEsDBAoAAAAA...",
        "ossBucketName": "oss-bucket",
        "ossObjectName": "oss-object"
      },
      "handler": "index.handler",
      "timeout": 10,
      "memorySize": 128,
      "runtime": "nodejs12",
      "initializerHandler": "http.handler",
      "initializationTimeout": 3
    }
    

    在上面的请求中,我们将 initializerHandler 字段设置为 http.handler,以将函数指定为 HTTP 服务。同时,我们还需要在函数代码中添加 HTTP 处理器,例如:

    const http = require('http');
    
    exports.handler = (req, res) => {
      const server = http.createServer((req, res) => {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('Hello World!');
      });
      
      server.listen(9000, () => {
        console.log('Server running at http://127.0.0.1:9000/');
      });
    };
    

    在上面的代码中,我们使用 http.createServer 方法创建了一个 HTTP 服务器,并将其监听在本地的 9000 端口上。当有请求到达时,我们向客户端返回一个简单的文本消息。

    以上示例代码仅用于演示如何创建 HTTP 服务,实际使用中可能需要根据具体需求进行修改。

    2023-06-19 23:49:21
    赞同 展开评论 打赏
  • 用 createTrigger api创建一个http触发器,然后它就是http函数了 否则就是事件函数

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-06-19 18:05:57
    赞同 展开评论 打赏
  • 如果您想创建一个HTTP函数,可以在创建函数时通过--http-trigger参数指定该函数为HTTP触发器。

    具体命令如下:

    fun deploy --http-trigger
    

    这样创建的函数将会被作为HTTP服务使用。另外,您还可以在template.yml文件中指定函数的触发器类型为http,具体示例如下:

    ROSTemplateFormatVersion: '2015-09-01'
    Transform: 'Aliyun::Serverless-2018-04-03'
    Resources:
      MyFunction:
        Type: 'Aliyun::Serverless::Function'
        Properties:
          Handler: index.handler
          Runtime: python3.6
          CodeUri: ./code/
          MemorySize: 128
          Timeout: 60
          EnvironmentVariables:
            KEY1: VALUE1
          Events:
            HttpTrigger:
              Type: HTTP
              Properties:
                AuthType: ANONYMOUS
                Methods:
                  - GET
                  - POST
                InvocationRole: 'acs:ram::1234567890123456:role/aliyunfcgeneratedrole-1234567890'
    

    在该文件中,Events节点下的HttpTriggerType属性为HTTP,表示该函数是一个HTTP触发器,同时可以指定该函数支持的HTTP请求方法、鉴权方式以及执行角色等。

    2023-06-19 15:19:03
    赞同 展开评论 打赏
问答分类:
API
问答地址:

快速交付实现商业价值。

相关电子书

更多
阿里巴巴HTTP 2.0实践及无线通信协议的演进之路 立即下载
ACE 区域技术发展峰会:Flink Python Table API入门及实践 立即下载
CDN助力企业网站进入HTTPS时代 立即下载