可以,层可以为您提供公共依赖库、运行时环境及函数扩展等发布与部署能力。您可以将函数依赖的公共库提炼到层或者使用函数计算官方公共层,以减少部署或更新函数时的代码包体积。本文介绍层的功能原理、各运行时使用层说明、如何构建层的ZIP包以及如何创建、删除自定义层。https://help.aliyun.com/zh/fc/user-guide/create-a-custom-layer?spm=a2c4g.11186623.0.i498
阿里函数计算可以引用SDK。以下是具体的步骤:
在Node.js中,可以使用如下命令进行安装:
npm install --save @aliyun/oss-sdk
其中,“@aliyun/oss-sdk”表示所要安装的SDK名称。
在JavaScript函数代码中,可以像下面这样引入SDK:
const OSS = require('@aliyun/oss-sdk');
请注意,您需要根据实际需求更改 SDK 的名称。
接下来,可以使用引入的SDK进行编码,实现预期的功能。
是的,阿里云函数计算支持在中层中使用SDK。您可以将函数依赖的公共库提炼到层中,或者使用函数计算官方提供的公共层,这样可以有效地减少部署或更新函数时的代码包体积。此外,自2021年1月起,阿里云函数计算还推出了“自定义层”功能,允许用户自行创建和管理自定义层,从而实现跨函数的共享。当您在层中引用了SDK后,每次函数调用时,阿里云函数计算都会将对应的层与函数代码一起加载,从而确保了功能的正常运行。
可以,使用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("\nGetLayerVersion, request ID " + gvResp.getRequestId() +
", LayerName: " + gvResp.getLayerName() + ", LayerVersion: " + gvResp.getVersion());
// 获取层列表。
String nextToken = "";
System.out.println("\nListLayerResponse:");
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("\nListLayerVersionResponse:");
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("\nDeleteLayerVersion, request ID " + dlvResp.getRequestId() +
", LayerName: " + gvResp.getLayerName() + ", LayerVersion: " + gvResp.getVersion());
}
}
——参考来源于阿里云官方文档。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。