全部产品
云市场

环境变量

更新时间:2019-06-20 10:18:07

环境变量可以分离函数代码和配置信息,提高代码的灵活性和可移植性。通过利用函数计算的环境变量动态地将配置信息传递给函数代码,能避免将配置信息写死到函数代码中。环境变量以键值对的方式存储,是函数配置的一部分。不同函数可以拥有不同的环境变量,并且互不影响。

创建或者更新环境变量时,函数计算会对您的环境变量使用 AES256(Advanced Encryption Standard 256)标准加密存储,在运行函数时自动反向解密,您无需担心自己的数据安全。

场景举例

  • 跨平台或服务部署:同一份代码,在测试环境和生产环境运行时的配置可能有配置差异。例如,您可以通过环境变量的方式选择使用不同的对象存储 OSS 的 Bucket、数据库或者表格。函数在不同平台部署时无需更改代码。

  • 配置密钥:连接数据库的用户名和密码、您的阿里云AccessKey、或者其他有安全敏感性的认证信息都可以通过环境变量设置。

  • 配置系统变量:在配置PATH和HOME等目录时能够更灵活地使用系统库。

限制规则

  • 字符集规定:
    • Key的字符集规定:必须以 [a-zA-Z] 开头,只能包含[a-zA-Z0-9_]。
    • Value的字符集规定:必须是可显示的 ASCII 字符,不能包含中文等其他字符。
  • 数量限制:所有环境变量的大小不能超过 4KB。
  • 系统预留变量:为避免系统混淆,您不能使用函数计算的系统预留的环境变量。具体有 FC_*accessKeyIDaccessKeySecretsecurityTokentopic 等。

在控制台上配置环境变量(推荐)

  1. 登录 函数计算控制台
  2. 选择地域。
    选择地域
  3. 选择一个服务。
  4. 编辑变量:
    • 对于新建函数:
      1. 在函数概览页面,单击 添加 图标添加新函数。
      2. 完成 函数模版触发器配置 后进入 基础管理配置 页面,在 环境变量 区域添加变量。新建函数
    • 对于已有函数:
      1. 找到目标函数。
      2. 函数属性 区域,单击 修改,在弹窗的 环境变量 区域添加变量。已有函数
      3. 单击 确定 完成添加。

测试环境变量

在控制台上编写并调试如下代码:

  1. module.exports.handler = function(event, context, callback) {
  2. var bucket_name = process.env['BUCKET_NAME']
  3. var table_name = process.env['TABLE_NAME']
  4. console.log('BUCKET_NAME: ',bucket_name)
  5. console.log('TABLE_NAME: ',table_name)
  6. callback(null, "success")
  7. }

从日志打印可以看出环境变量已经创建成功:控制台测试3

通过 Fun 配置环境变量(推荐)

可以直接通过 Fun 规范中的 EnvironmentVariables 属性进行配置。

下面是一个通过 Fun 配置函数环境变量的示例:

  1. ROSTemplateFormatVersion: '2015-09-01'
  2. Transform: 'Aliyun::Serverless-2018-04-03'
  3. Resources:
  4. FunDemo:
  5. Type: 'Aliyun::Serverless::Service'
  6. envdemo:
  7. Type: 'Aliyun::Serverless::Function'
  8. Properties:
  9. Handler: index.handler
  10. CodeUri: ./
  11. Runtime: python2.7
  12. EnvironmentVariables:
  13. OSSEndpoint: oss-cn-hangzhou.aliyuncs.com
  14. BucketName: fun-local-test

上面示例的含义是:声明一个名为 FunDemo 的 服务,并在这个服务下,再声明一个名为 envdemo 的 函数,配置函数入口为 index.handler,以及函数的 runtime 为 python2.7。并且,我们指定了 CodeUri 为当前目录。在部署时,Fun 会将 CodeUri 指定的目录打包上传,可以将依赖也依赖放置到 CodeUri 指向的目录,这样函数就可以访问到了。

另外,函数还配置了名为 OSSEndpoint、BucketName 的环境变量。执行 fun deploy 后,就可以在控制台看到我们声明的 FunDemo 的服务、envdemo 的函数被创建成功了,且该函数配置了 OSSEndpoint、BucketName 这两个环境变量。

更多的配置规则 请参考

Fun 的更多教程请参考这里 Fun

使用SDK配置环境变量

创建环境变量

以Python SDK 为例,环境变量的参数为 environmentVariables,参数取值以字典形式存储。以下为一份添加了环境变量的 Python 函数代码示例。

  1. # coding: utf-8
  2. import fc2
  3. client = fc2.Client(
  4. endpoint='your endpoint',
  5. accessKeyID='your accessKeyID',
  6. accessKeySecret='your accessKeySecret')
  7. client.create_service('test')
  8. client.create_function(
  9. 'test', 'test_env', 'python2.7', 'main.handler',
  10. codeDir='/path/to/code/', environmentVariables={'testKey': 'testValue'})
  11. res = client.get_function('test', 'test_env')
  12. print res.data

更新环境变量

更新环境变量通过 update_function 实现,如下所示:

  1. client.update_function(
  2. 'test', 'test_env', 'python2.7', 'main.handler',
  3. codeDir='/path/to/code/', environmentVariables={'newKey': 'newValue'})
  4. res = client.get_function('test', 'test_env')
  5. print res.data