
# 直接上传函数代码
本章节介绍如何通过函数工作流控制台，直接上传函数代码文件进行部署。
#### 操作场景
当函数的代码文件大小不超过40MB时，可以在函数工作流控制台直接上传本地开发完成的ZIP或JAR代码文件进行函数代码部署。运行时支持直接上传的代码文件类型请参考[表1]，请参见[函数工程打包规范](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0103.html)在本地打包代码文件。
 表1直接上传代码支持的文件类型 
| 运行时     | 上传ZIP文件 | 上传JAR文件 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| Node.js | 支持      | 不支持     | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Python  | 支持      | 不支持     | 用python语言编写代码时，自己创建的依赖包名不能与python标准库同名，否则会提示module加载失败，例如"json"、"lib"、"os"等。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Java    | 支持      | 支持      | 部署Java代码文件支持上传ZIP文件或JAR文件。 **上传JAR文件** - 如果函数代码没有引入依赖包，可以直接上传函数代码JAR文件。  - 如果函数代码引入了依赖包，可以在创建函数后先配置函数依赖包，再上传函数代码JAR文件部署。   **上传ZIP** **文件** 如果函数代码引入了依赖包，也可以制作并上传包含所有依赖包和函数代码JAR文件的ZIP代码文件。具体示例可参见[使用IDEA工具创建普通Java项目](https://support.huaweicloud.com/devg-functiongraph/functiongraph_devg_02_0002.html)、[使用IDEA工具创建maven项目](https://support.huaweicloud.com/devg-functiongraph/functiongraph_devg_02_0003.html)。 |
| Go      | 支持      | 不支持     | 编译后的动态库文件名称必须与函数执行入口的插件名称保持一致，例如：动态库名称为testplugin.so，则"函数执行入口"命名为testplugin.Handler。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| C#      | 支持      | 不支持     | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| PHP     | 支持      | 不支持     | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 定制运行时   | 支持      | 不支持     | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Cangjie | 支持      | 不支持     | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
#### 约束与限制
- 自行上传的代码文件编码格式建议设置为UTF-8。
- 直接上传的代码文件大小限制为40MB以内，如文件大小超过该限制，请使用[从OBS上传函数代码](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0501.html)的方式上传代码文件。
- 如果代码中包含敏感信息（如账户密码等），请自行加密，以防信息泄露。
- 当代码编辑器中部署的代码大于20MB时将不展示代码，如[图1]所示，但仍可以正常测试函数代码。
  图1编辑器不展示代码   
  ![](https://support.huaweicloud.com/usermanual-functiongraph/zh-cn_image_0000002139492282.png "点击放大") 
 
#### 上传函数代码
1. 登录[函数工作流控制台](https://console.huaweicloud.com/functiongraph/?locale=zh-cn)，在左侧的导航栏选择"函数 \> 函数列表"。
2. 在函数列表中，单击函数名称进入详情页。
3. 选择"代码"页签，右侧选择"上传代码 \> Zip文件"或"上传代码 \> JAR文件"。
4. 在弹出的窗口中，单击"添加文件"，选择本地函数代码文件。
5. （可选，仅"拉美-圣保罗一"区域支持配置）可根据实际需求选择使用KMS静态加密函数代码： 
   - （默认）functiongraph/default：函数会在DEW服务中自动创建默认密钥，您无需手动创建。 首次使用默认密钥进行加解密，需确保函数委托中拥有以下权限：kms:dek:decrypt、 kms:dek:create、 kms:cmk:create、kms:cmk:get、 kms:cmk:list。
     请参考[JSON视图配置自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html#section1)前往IAM控制台将"委托权限策略"添加至函数委托中，并参考[配置函数委托](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0920.html#functiongraph_01_0920__section35661045182115)为该函数配置委托权限。
     ```
     {
         "Version": "1.1",
         "Statement": [
             {
                 "Action": [
                     "kms:dek:decrypt",
                     "kms:dek:create",
                     "kms:cmk:create",
                     "kms:cmk:get",
                     "kms:cmk:list"
                 ],
                 "Effect": "Allow"
             }
         ]
     }
     ```
     
   
   - 使用用户主密钥：支持选择已创建的密钥加密函数代码，创建用户主密钥可参考[创建自定义密钥](https://support.huaweicloud.com/usermanual-dew/dew_01_0178.html)。
     使用用户主密钥，需确保函数委托中拥有以下权限：kms:dek:decrypt、 kms:dek:create、 kms:cmk:get、 kms:cmk:list。
     ![](https://support.huaweicloud.com/usermanual-functiongraph/public_sys-resources/caution_3.0-zh-cn.png)
     若选择"使用用户主密钥"，在后续使用中请勿在DEW服务中删除用于函数加密的主密钥，否则将因加密数据无法解密而导致函数执行失败。
     
   
   
   
   
6. 文件上传完成后，单击"确定"，代码将自动部署到代码编辑区中。 
   如需修改代码编辑区中的代码，请在每次修改完成后单击"部署代码"，进行代码更新部署。如需修改函数执行入口，请参见[修改函数执行入口](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0419.html#functiongraph_01_0419__section46234724412)。
   
   
 
