使用OCI Java SDK创建OCI函数时,如何添加Zip包形式源码?
使用OCI Java SDK通过Zip包创建OCI函数的方案
你当前使用的PreBuiltFunctionSourceDetails是用于基于预构建镜像创建函数的,若要通过Zip包(源码/代码包)创建函数,需改用ZipUploadFunctionSourceDetails类,具体方案如下:
关键修改点
- 替换
sourceDetails的实现类:从PreBuiltFunctionSourceDetails改为ZipUploadFunctionSourceDetails - 移除
image和imageDigest参数(使用Zip包时,OCI会自动构建并托管镜像) - 添加Zip包的Base64编码内容、运行时类型等必要参数
示例代码
import java.nio.file.Files; import java.nio.file.Paths; import java.util.Base64; // 1. 读取Zip文件并转换为Base64编码字符串 byte[] zipBytes = Files.readAllBytes(Paths.get("/path/to/your/function-code.zip")); String zipBase64 = Base64.getEncoder().encodeToString(zipBytes); // 2. 构建CreateFunctionDetails CreateFunctionDetails createFunctionDetails = CreateFunctionDetails.builder() .displayName(lambdaFunctionResponse.configuration().functionName()) .applicationId("ocid1.test.oc1..<unique_ID>EXAMPLE-applicationId-Value") // 替换为对应运行时,比如"java17"、"python311"等,需与Zip包代码匹配 .runtime("java17") .sourceDetails(ZipUploadFunctionSourceDetails.builder() .zipFileBase64Encoded(zipBase64) .memoryInMBs(298L) .config(functionConfigMap) .timeoutInSeconds(30) .provisionedConcurrencyConfig(ConstantProvisionedConcurrencyConfig.builder() .count(615).build()) .traceConfig(FunctionTraceConfig.builder() .isEnabled(true).build()) .build()) .build();
注意事项
- Zip包结构要求:需符合OCI Functions对应运行时的规范,比如Java函数需包含
func.yaml配置文件和编译后的JAR包;Python函数需包含入口文件(如handler.py)和依赖包等 - Base64编码:确保Zip文件转换为Base64时无编码错误,大文件需注意内存占用,若Zip过大可考虑使用OCI Object Storage存储后通过
ObjectStorageFunctionSourceDetails引用 - 权限验证:确保SDK使用的身份凭证拥有
functions-function:create及相关存储服务的权限
内容的提问来源于stack exchange,提问作者Javid Muhammed
相关产品推荐
相关产品推荐

