使用docker制作华为云java镜像函数并调用

 第一步 打包好需要用的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加密,需要解密,最后和自己所写的逻辑进行修改即可完成

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值