AWS A3亚马逊云文件管理小结

        最近做项目,接触到了这个神秘而强大的组织——亚马逊云,刚开始听到这个东西的时候,感觉很神秘,同时也有点害怕,毕竟服务器在国外,而且很多api都是用英文写的,正如我所想的,的确遇到了很多棘手的问题,有个问题甚至解决了两天。

        我们就开始,奔跑吧AWS

        第一步注册成为亚马逊的会员,当然如果你有账号可以直接登录,网址http://aws.amazon.com/cn/



         经过填写一系列的个人信息其中包括信用卡号,国内信用卡只支持大银行的信用卡,注册完后,可能要等待一段时间才能使用亚马逊云的部分功能(注册流程我这就略了);

       第二步,创建用户组合用户

      登录账号后就会自动跳转到控制台页面,页面上有好多亚马逊云的产品,真是眼花缭乱,有机会可以研究一下的说

 点击服务,并且选择IAM,进入IAM服务控制台,在这里面管理各种证书啊,还有用户啊,组啊什么的,

创建一个新的组,选择控制台右侧的菜单,选择组,然后创建一个组,输入组名称——选择策略(权限,可以自定义,详见api文档),由于测试我选择了第一个,管理员(AdministratorAccess),创建一个用户,并且添加,创建用户的时候,会产生一个用户凭证,这个值很重要,是我们通过代码调用api验证登陆的条件,有一个访问密匙id和一个私有访问秘钥,一定要纪录下来,还可以下载该凭证,用户创建好后,在之前创建好的用户组里添加该用户即可。至此能够登陆到亚马逊云并且管理服务器文件的用户已经创建就绪,下一步呢,我们需要创建一个神秘存储单元——存储桶。

        说道这个存储桶Bucket,我之前没有注意到,我之前以为是自动创建的,我们直接在调接口的时候写一个bucket名称,亚马逊云会自动帮我们创建这个东西呢,但是我错了,我忘了亚马逊云存储是另外一个服务叫S3,这个应该是亚马逊云最基础的服务,负责存储功能,几乎所有的服务都依赖于此,同样点击服务——S3,就会进入S3服务控制台,点击创建存储桶,过程很简单,输入名称和地区,就可以创建成功了,注意这个地区很重要,在调用api的时候会使用到,当然名称更重要,创建成功后,我们就拥有了一个最基础的亚马逊云的运行环境,下面我们就可以使用代码调用亚马逊云的api来上传文件了。

         很快,我就写出了自己的代码,当然要先下载亚马逊云的SDK,亚马逊云支持很多种语言,我这里就拿PHP为例,代码如下,代码中首先要创建s3Client对象,我写的函数里在创建这个对象的构造器参数是一个数组,数组里有一个credentials,这个值就是我们创建用户的时候产生的访问密匙id和私有访问秘钥,亚马逊官方api不建议这么写,不太灵活,而且容易泄露信息,亚马逊云提供了好几种解决方案,比如通过系统环境变量存储,这个方法我试过好用,还有通过创建INI文件,来存储这个值,还有几种,不一一举例,大家参考API文档,亚马逊的api文档写的很详细,唯一的缺点是英文,有一定的挑战性

     

require 'Aws/aws-autoloader.php';//下载AWS  sdk解压,并且引用该文件,即aws-autoloader.php
  
  
  $s3Client = new Aws\S3\S3Client([
 		'version' => 'latest',//版本
 		'region'  => 'us-east-1',//地区代码,即刚才创建的bucket的地区
  		'credentials' => [//创建用户的两个秘钥
	        'key'    => 'XXXXXXXXXXXXXXXX',
	        'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
	    ]
  ]);
  $result = $s3Client->putObject([//调用putObject创建上传一个Hello World到相应的bucket
 		'Bucket' => 'bucket-name',
 		'Key'    => 'helloworld',
 		'Body'   => 'Hello world!'
  ]);
 

 
 // Download the contents of the object.
 $result = $s3Client->getObject([//获取bucket上存储的对应key的body
 		'Bucket' => 'bucket-name',
 		'Key'    => 'helloworld'
 ]);

ehco $result['body'];

 

 

 启动本地服务,打开相应的测试页面,突然发现报错了,错误信息大概是这样的( SSL certificate problem: unable to get local issuer certificate),就是这个问题困扰了我两天,后来发现这个问题并不是出在我代码上,而是php在请求https请求的时候,会检查系统中的ca证书,可能是由于ca证书过期,或者是某些原因而导致的,解决方案是下载http://curl.haxx.se/docs/caextract.html,并且在php.ini环境配置文件中引入或修改curl.cainfo = 你的路径/cacert.pem属性,改完后发现,问题并没有解决,又是一顿fq查找,发现这个ca证书有个问题,下载网站中也给了明确的说明

 RAS-1024 Removed,没错就是这个原因,点击那个蓝色的链接,你就会看到之前的版本的源码,复制源码到cacert.pem文件中即可,重启服务,输入测试页面,一个偌大的Hello World出现在页面上,这是我们查看S3控制台,就会发现一个名为helloworld的文件,没错,第一步成功了,当然路漫漫才刚开始,亚马逊云真的是一个宝藏,等着我们去挖,它真的可以创造更多的可能

最后附上几个关于亚马逊云必要的地址

使用亚马逊云配置说明:http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/index.html

亚马逊云认证方式介绍:http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html

一些配置说明:http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html

 【本文由“到底是谁我是”发布,2017年1月16日】

 

 

 

 

 

 

猜你喜欢

转载自wangdong9451.iteye.com/blog/2225340
AWS