全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件

应用示例2 - 授权函数访问其他云服务资源

更新时间:2017-11-10 17:55:21

本文介绍在函数计算中使用RAM(访问控制)来访问自己的阿里云资源。以函数访问对象存储OSS为例,通过函数将一个字符串写入位于oss bucket的文件中, 然后再将从这个文件中读取的数据做为函数的返回值返回给用户。通过该示例,您将了解:

  • 访问控制(RAM)相关概念。

  • 对象存储(OSS)相关概念。

  • 通过RAM授权函数访问OSS资源的相关步骤。

前提条件

本示例假定函数代码存放于code目录,首先请开通对象存储OSS和访问控制RAM。

在oss的控制台,创建自己的bucket,如下图所示:

bucket

编写代码

在当前目录下创建名为 code 的目录,在 code 目录下创建“fc_oss.js” 文件,实现名为 “handler” 的 nodejs 事件处理函数(注意,代码中的oss中的bucket名字改成自己的bucket名字)。

  1. 'use strict';
  2. var oss = require('ali-oss').Wrapper;
  3. module.exports.handler = function(event, context, callback) {
  4. console.log('Received event:', event.toString());
  5. // Create oss client
  6. var ossclient = new oss ({
  7. // Credentials can be retrieved from context
  8. accessKeyId: context.credentials.accessKeyId,
  9. accessKeySecret: context.credentials.accessKeySecret,
  10. stsToken: context.credentials.securityToken,
  11. region: 'oss-cn-shanghai',
  12. bucket: 'ls-oss-test', // your bucket
  13. });
  14. ossclient.put('remote.txt', new Buffer('fc write ' + event.toString() + ' in oss bucket')). then(function(res) {
  15. return ossclient.get('remote.txt');
  16. }).then(function(res) {
  17. callback(null, res.content);
  18. }).catch(function(err) {
  19. callback(err);
  20. });
  21. };
  1. # -*- coding: utf-8 -*-
  2. import time, os
  3. import oss2
  4. def handler(event, context):
  5. endpoint='oss-cn-shanghai.aliyuncs.com'
  6. creds = context.credentials
  7. auth = oss2.StsAuth(creds.access_key_id,
  8. creds.access_key_secret,
  9. creds.security_token)
  10. bucket = oss2.Bucket(auth, endpoint, 'ls-oss-test') # your bucket
  11. bucket.put_object('remote.txt' , 'fc write ' + event + ' into oss bucket')
  12. remote_stream = bucket.get_object('remote.txt')
  13. return remote_stream.read()

创建函数计算服务角色并授权

首先需要创建一个拥有访问oss权限的RAM角色,函数将扮演这个角色来使用oss上的资源。请执行 fcli shell 进入交互模式:

  1. mksr fc-oss-op
  2. mkrp fc-oss-gp -a '["oss:GetObject", "oss:PutObject"]' -r '"*"'
  3. attach -p /ram/policies/fc-oss-gp -r /ram/roles/fc-oss-op
  4. mks oss_demo -r acs:ram::12345:role/fc-oss-op

最后一条命令中的 12345 改成自己阿里云的 Account ID。

上面 4 条命令的逐条解释:

  1. 创建一个RAM角色:fc-oss-op

  2. 创建一个可以读取和写入oss的策略:fc-oss-gp。

  3. 将fc-oss-gp策略赋予角色fc-oss-op,这样角色fc-oss-op就能读写oss上的资源了。

  4. 创建oss_demo服务,并把fc-oss-op作为其服务角色,oss_demo服务下所有的函数都能扮演角色fc-oss-op对oss上资源进行读取或者写入。

注意:在 fcli shell 模式下,所有 RAM 相关的资源都放在/ram/路径下,方便管理。如果想要更加详细了解访问控制RAM,请查阅相关文档

创建函数

在fcli shell中执行mkf oss_demo/fc-oss -h fc_oss.handler -d code -t nodejs6,在服务 oss_demo 中创建名为 fc-oss 的函数。

调用函数

在fcli shell中执行invk oss_demo/fc-oss -s hello_oss,您应当看到输出结果为:fc write hello_oss in oss bucket, 打开oss控制台,可以在对应的bucket中看到有remote.txt文件。

完整示例

备注:有完整的shell操作视频请点击这里,视频里面的命令是可以直接复制。

本文导读目录