第一步 打包好需要用的jar包
第二步 创建文件夹保存文件
在云服务系统中创建一个文件夹,在文件夹内创建名为 Dockerfile 文件,填入
# 使用 openjdk:8 作为基础镜像
FROM openjdk:8
WORKDIR /data/alidata/docker/mynginx
COPY upload-video-1.0-dongxin.jar /data/alidata/docker/mynginx/upload-video-1.0-dongxin.jar
EXPOSE 8000
CMD ["java", "-jar", "-Dserver.port=8000", "/data/alidata/docker/mynginx/upload-video-1.0-dongxin.jar"]
/data/alidata/docker/mynginx 为自定义文件路径
第三步 打包为镜像后上传
1.打包成镜像
docker build -t upload .
2.上传,华为云可分为页面上传和客户端上传
(1)页面上传
1.打包镜像保存到本地
打包镜像 docker save upload > upload.tar
下载tar压缩包到本地
最后登录华为云,进入镜像容器内点击页面上传,上传
(2)客户端上传
登录华为云,进入镜像容器内点击客户端上传,根据指示上传即可
第四步 新建函数
根据自己需求新建好新函数,进行测试
一般来讲,只要镜像打包没问题测试都可以过
第五步 调用函数
这边使用的是华为云sdk调用,api调用暂时不会
1.在需要的项目中,填入依赖
<!--华为云sdk-->
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-functiongraph</artifactId>
<version>3.0.97</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.14.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.14.2</version>
</dependency>
注意:不只是公用模块要添加,调用的模块也需要添加,否则会报错初始化异常
2.使用提供的华为云aksk进行函数调用
// 该示例仅为测试使用,在生产环境中请勿硬编码ak sk 信息在代码中 String ak = "<YOUR AK>"; String sk = "<YOUR SK>"; ICredential auth = new BasicCredentials() .withAk(ak) .withSk(sk); FunctionGraphClient client = FunctionGraphClient.newBuilder() .withCredential(auth) .withRegion(FunctionGraphRegion.valueOf("<region>")) .build(); InvokeFunctionRequest request = new InvokeFunctionRequest(); Map<String, Object> listbodyInvokeFunctionRequestBody = new HashMap<>(); listbodyInvokeFunctionRequestBody.put("k", "v"); request.withBody(listbodyInvokeFunctionRequestBody); request.withFunctionUrn("urn:fss:<region>:<project_id>:function:default:<func_name>:<version>"); request.withXCffLogType("tail"); request.withXCFFRequestVersion("v1"); try { InvokeFunctionResponse response = client.invokeFunction(request); System.out.println(response.toString()); } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); }
注意:其中 listbodyInvokeFunctionRequestBody.put("k", "v"); 可以用来修改接口链接、请求方式和接口参数,示例:
listbodyInvokeFunctionRequestBody.put("path", "自己设置的接口链接,如:/login");
listbodyInvokeFunctionRequestBody.put("httpMethod", "POST");
listbodyInvokeFunctionRequestBody.put("QueryStringParameters", 自己设置的接口所需的参数,格式为josn,如登录所需的账号{"user": "ce"});
最终
调用函数的返回数据中,只有body字段是你所需的参数,但会base64加密,需要解密,最后和自己所写的逻辑进行修改即可完成