全部产品
阿里云办公

执行环境

更新时间:2018-09-01 13:07:55

当函数被调用时,函数的代码会在一个受限的环境中执行:

环境配置 备注
执行用户 普通用户(无root权限)
代码目录 env["FC_FUNC_CODE_PATH"]
可写目录 /tmp(其他目录是只读的)
操作系统 Linux 4.4.24-2.al7.x86_64
网络 允许访问公网及同区域的阿里云服务(例如OSS/TableStore等)内网

用户可以通过这个Web Shell工具来体验函数的执行环境。

不同编程语言的环境中,还会包含一些常用的库,具体参见每个语言的编程文档:

使用代码目录

如果用户将一些配置文件或者数据文件与代码一起打包上传,并且需要在代码中访问这些文件的话,就需要使用FC_FUNC_CODE_PATH这个环境变量来获取文件的绝对路径,下面分别给出使用 Python、Node.js、Php 和 Java 的示例:

Python:

  1. import os
  2. def handler(event, context):
  3. cfg_file = os.environ['FC_FUNC_CODE_PATH'] + '/config.json'
  4. print cfg_file

Node.js:

  1. exports.handler = function(event, context, callback) {
  2. cfgFile = process.env['FC_FUNC_CODE_PATH'] + '/config.json';
  3. console.log(cfgFile);
  4. callback(null, 'done');
  5. }

Php:

  1. <?php
  2. function handler($evt, $ctx){
  3. $cfgFile = $_ENV['FC_FUNC_CODE_PATH'] . '/config.json';
  4. return "ok";
  5. }

Java:

  1. import com.aliyun.fc.runtime.Context;
  2. import com.aliyun.fc.runtime.StreamRequestHandler;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. public class HelloFC implements StreamRequestHandler {
  7. @Override
  8. public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
  9. String cfgFile = System.getenv("FC_FUNC_CODE_PATH") + "/config.json";
  10. outputStream.write(cfgFile.getBytes());
  11. }
  12. }

使用内网域名

在函数中访问其他云服务,建议使用内网域名,一方面使用内网域名能够有更好的性能;另一方面可以避免公网流量收费。下面分别给出使用Python、Node.js和php使用内网域名访问OSS的示例:

Python:

  1. import oss2
  2. def my_handler(event, context):
  3. creds = context.credentials
  4. auth = oss2.StsAuth(creds.accessKeyId, creds.accessKeySecret, creds.securityToken)
  5. bucket = oss2.Bucket(auth, 'oss-cn-shanghai-internal.aliyuncs.com', 'my-bucket')
  6. bucket.put_object('my-object', 'hello world')

Node.js:

  1. var OSSClient = require('ali-oss').Wrapper;
  2. exports.handler = function(event, context, callback) {
  3. console.log(event.toString());
  4. var ossClient = new OSSClient({
  5. accessKeyId: context.credentials.accessKeyId,
  6. accessKeySecret: context.credentials.accessKeySecret,
  7. stsToken: context.credentials.securityToken,
  8. region: 'oss-cn-shanghai',
  9. internal: true,
  10. bucket: 'my-bucket',
  11. });
  12. ossClient.put('my-object', new Buffer('hello world'))
  13. .then(function(res) {
  14. callback(null, res);
  15. }).catch(function(err) {
  16. callback(err);
  17. });
  18. };
  1. <?php
  2. use OSS\OssClient;
  3. function handler($event, $context) {
  4. $accessKeyId = $context["credentials"]["accessKeyId"];
  5. $accessKeySecret = $context["credentials"]["accessKeySecret"];
  6. $securityToken = $context["credentials"]["securityToken"];
  7. $endpoint = "oss-cn-shenzhen-internal.aliyuncs.com";
  8. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
  9. $bucket = "my-bucket";
  10. $object = "php.txt";
  11. $content = "Hello fc!";
  12. try {
  13. $ossClient->putObject($bucket, $object, $content);
  14. } catch (OssException $e) {
  15. print($e->getMessage());
  16. }
  17. return 'sucess';
  18. };