=====这是一个广告位,招租中,联系qq 78315851====
4 条回复 A 作者 M 管理员
  1. 可以,层可以为您提供公共依赖库、运行时环境及函数扩展等发布与部署能力。您可以将函数依赖的公共库提炼到层或者使用函数计算官方公共层,以减少部署或更新函数时的代码包体积。本文介绍层的功能原理、各运行时使用层说明、如何构建层的ZIP包以及如何创建、删除自定义层。https://help.aliyun.com/zh/fc/user-guide/create-a-custom-layer?spm=a2c4g.11186623.0.i498

  2. 是的,阿里云函数计算支持在中层中使用SDK。您可以将函数依赖的公共库提炼到层中,或者使用函数计算官方提供的公共层,这样可以有效地减少部署或更新函数时的代码包体积。此外,自2021年1月起,阿里云函数计算还推出了“自定义层”功能,允许用户自行创建和管理自定义层,从而实现跨函数的共享。当您在层中引用了SDK后,每次函数调用时,阿里云函数计算都会将对应的层与函数代码一起加载,从而确保了功能的正常运行。

  3. 这个要您把sdk打包到层里。此回答来自钉群阿里函数计算官网客户。

  4. 可以,使用SDK对层版本执行发布、查询及删除等操作的代码示例如下:

    package com.mycompany.FcSample;import com.aliyuncs.fc.client.FunctionComputeClient;import com.aliyuncs.fc.model.Code;import com.aliyuncs.fc.model.Layer;import com.aliyuncs.fc.request.*;import com.aliyuncs.fc.response.*;import org.apache.commons.lang.ArrayUtils;import java.io.IOException;public class FcSample {    private static final String REGION = "cn-hangzhou";    public static void main(final String[] args) throws IOException {        /*        阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。        建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。        本示例以将AccessKey和AccessSecretKey保存在环境变量中实现身份验证为例。        运行本示例前请先在本地环境中设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。        在FC Runtime运行环境下,配置执行权限后,ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET环境变量会自动被设置。        */        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");        String accessSecretKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");        String accountId = System.getenv("ACCOUNT_ID");        String layerName = "test-layer";        String[] compatibleRuntime = {"python3", "node12"};        String layerDir = "layer";        // 初始化客户端。        FunctionComputeClient fcClient = new FunctionComputeClient(REGION, accountId, accessKey, accessSecretKey);        // 设置函数客户端接入点Endpoint:http://{accountId}.{regionId}.fc.aliyuncs.com。        // 发布层版本。        PublishLayerVersionRequest plvReq = new PublishLayerVersionRequest();        Code code = new Code().setDir(layerDir);        plvReq.setCode(code);        plvReq.setCompatibleRuntime(compatibleRuntime);        plvReq.setDescription("FC layer test");        plvReq.setLayerName(layerName);        PublishLayerVersionResponse plvResp = fcClient.publishLayerVersion(plvReq);        System.out.println("PublishLayerVersion, request ID " + plvResp.getRequestId() +            ", LayerName: " + plvResp.getLayerName() + ", LayerVersion: " + plvResp.getVersion());        // 查询指定层版本信息。        GetLayerVersionRequest gvReq = new GetLayerVersionRequest();        gvReq.setLayerName(layerName);        gvReq.setVersion(plvResp.getVersion().toString());        GetLayerVersionResponse gvResp = fcClient.getLayerVerion(gvReq);        System.out.println("GetLayerVersion, request ID " + gvResp.getRequestId() +            ", LayerName: " + gvResp.getLayerName() + ", LayerVersion: " + gvResp.getVersion());        // 获取层列表。        String nextToken = "";        System.out.println("ListLayerResponse:");        Layer[] layers = new Layer[]{};        while (true) {            ListLayerRequest llReq = new ListLayerRequest();            llReq.setLimit("100");            llReq.setNextToken(nextToken);            ListLayerResponse llResp = fcClient.listLayer(llReq);            Layer[] tmpLayers = llResp.getLayers();            layers = (Layer[])ArrayUtils.addAll(layers, tmpLayers);            if (llResp.getNextToken() == null) {                break;            }            nextToken = llResp.getNextToken();        }        for(Layer layer : layers) {            System.out.println("- LayerName: " + (String)layer.getLayerName() +                ", LayerMaxVersion: " + (String)layer.getVersion());        }        // 获取层版本列表。        ListLayerVersionRequest llvReq = new ListLayerVersionRequest();        llvReq.setLayerName(layerName);        llvReq.setLimit(100);        ListLayerVersionResponse llvResp = fcClient.listLayerVersion(llvReq);        System.out.println("ListLayerVersionResponse:");       layers = llvResp.getLayers();        for(Layer layer : layers) {            System.out.println("LayerName: " + layer.getLayerName() +                ", LayerVersion: " + layer.getVersion());        }        // 删除层版本。        DeleteLayerVersionRequest dlvReq = new DeleteLayerVersionRequest();        dlvReq.setLayerName(layerName);        String deleteLayerVersion = plvResp.getVersion().toString();        dlvReq.setVersion(deleteLayerVersion);        DeleteLayerVersionReponse dlvResp = fcClient.deleteLayerVersion(dlvReq);        System.out.println("DeleteLayerVersion, request ID " + dlvResp.getRequestId() +            ", LayerName: " + gvResp.getLayerName() + ", LayerVersion: " + gvResp.getVersion());    }}

    ——参考来源于阿里云官方文档。