今天在使用AWS中,由于原来的 key和secrect是放在配置文件ini里面的。现在需要改成从DB里面获取,所以需要自定义Credential.在AWS中重写这个挺简单的。

我这里是继承原先的CredentialProvider类,然后写了一个bucketProvider方法

使用方法:


//调用自定义provider
$provider = \app\library\Aws\S3CredentialProvider::bucketProvider();
$provider = Aws\Credentials\CredentialProvider::memoize($provider);
try {
$s3Client = new Aws\S3\S3Client([
'region' => $region,
'version' => '2006-03-01',
'credentials' => $provider,
]);
}catch (Aws\Exception\CredentialsException $ex){
return null;
}
<?php
namespace app\library\Aws; use Yaf\Registry; use Aws\Credentials\CredentialProvider;
use GuzzleHttp\Promise;
use Aws\Exception\CredentialsException;
use GuzzleHttp\Promise\RejectedPromise;
use Aws\Credentials\Credentials; /**
* Class DB
* @package app\library\Aws
* awazon 自定义credential,根椐存储桶,去获取access_id 和 access_secrect;
*/
class S3CredentialProvider extends CredentialProvider
{ public static function bucketProvider()
{
return function () {
$bucketInfo = [];
try {
$bucketInfo = \app\library\Aws\Bucket::instance()->getBucketRegion(); //获取bucket信息。
}catch(\Exception $ex){
return new Promise\RejectedPromise(new CredentialsException("获取s3认证文件失败"));
} $accessKey = isset($bucketInfo['accessKey']) && $bucketInfo['accessKey'] ? json_decode($bucketInfo['accessKey'],true) : [];
$key = isset($accessKey['id']) && $accessKey['id'] ? $accessKey['id'] : '';
$secret = isset($accessKey['key']) && $accessKey['key'] ? $accessKey['key'] : '';
if ($key && $secret) {
return Promise\promise_for(
new Credentials($key, $secret,NULL)
);
}
return new Promise\RejectedPromise(new CredentialsException("找不到s3的key,secrect用于认证"));
};
} }

在AWS中自定义Credential Provider实现Client连接的更多相关文章

  1. 如何在ASP.NET Core中自定义Azure Storage File Provider

    文章标题:如何在ASP.NET Core中自定义Azure Storage File Provider 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p ...

  2. SharePoint 2013 中自定义WCF服务

    在使用SharePoint2013的时候,如果其他客户端 API 的组合不足,可以通过自定义 Web 服务扩展 SharePoint.默认情况下,SharePoint 2013 不仅支持创建自定义 A ...

  3. 15、自定义Content Provider

     自定义Content Provider的步骤    1. 编写一个类,该类必须继承自ContentProvider类. 实现ContentProvider类中所有的抽象方法. 定义Content ...

  4. AWS中,如果使用了ELB,出现outofservice

    平台:亚马逊AWS EC2 出现状况: 我创建了弹性平衡负载,也注册了实例,但是实例的状态一直是outofservice.为什么? 为什么会出现这个问题呢? 1:实例有问题: 2:负载平衡器创建的有问 ...

  5. 『转』credential Provider 简易改写攻略

    本次小学期的题目是windows下的凭证改编.本人负责的是Win7 下的credentials Provider 的编写以及其他杂七杂八的工作.当然给我印象最深的就是credentials provi ...

  6. 6.2 dubbo在spring中自定义xml标签源码解析

    在6.1 如何在spring中自定义xml标签中我们看到了在spring中自定义xml标签的方式.dubbo也是这样来实现的. 一 META_INF/dubbo.xsd 比较长,只列出<dubb ...

  7. Html中自定义鼠标的形状

    Html中自定义鼠标的形状 <html> <head> <title>自定义的鼠标形状</title> <meta http-equiv=&quo ...

  8. 教你一招:在PowerPoint中自定义可输入文本的占位符

    日常生活中,当我们设计多媒体课件时,默认的版式其实已经够用了.但是,很多时候,我们需要更加个性一点,所以,我们需要自定义很多东西.本文介绍在PowerPoint中自定义可输入文本的占位符. 一.占位符 ...

  9. 在AWS中创建NAT节点

    NAT, Network Address Translation,即网络地址转换.当内部网络的主机想要访问外网,但是又不想直接暴露给公网,可以通过NAT节点来访问外网.这样做有两个好处,第一是内网的主 ...

随机推荐

  1. 构建Apache Web服务器

    Apache 是世界使用排名第一的 Web 服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一.Apache工作模式有多种,其 ...

  2. 201871010107-公海瑜《面向对象程序设计(java)》第七周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第七周学习总结             项目                       内容   这个作业属于哪个课程  ...

  3. 201871010121 王方 《面向对象程序设计(JAVA)》第七周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  4. JDOJ 1946 求最长不下降子序列个数

    Description 设有一个整数的序列:b1,b2,…,bn,对于下标i1<i2<…<im,若有bi1≤bi2≤…≤bim 则称存在一个长度为m的不下降序列. 现在有n个数,请你 ...

  5. [CODEVS4632][BZOJ4326]运输计划

    题目描述 Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P ...

  6. rIoTboard学习系列

    刚在咸鱼买了块开发板,比较老了14年的,SOC为imx6solo,内核3.10,uboot2009的,准备先移植一个较新的uboot 到nxp的git下获取他们维护的uboot,网址http://gi ...

  7. leetcode 354. 俄罗斯套娃信封问题(二维排序有关)

    题目描述 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多能有 ...

  8. lower_case_table_names与表格名称大小写的问题

    1 简介 在MySQL中,数据库对应数据目录中的目录.数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎).因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感 ...

  9. springboot kafka生产者

    pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

  10. Python连载31-threading的使用

    一. 例子:我们对传参是有要求的必须传入一个元组,否则报错 二. import _thread as thread import time def loop1(in1): print("St ...