aws/aws-sdk-php-resources

用于与AWS服务交互的资源型API

0.3.0 2015-06-20 20:55 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:44:58 UTC


README

@awsforphp on Twitter Build Status Apache 2 License

这是一个AWS SDK for PHP的扩展,它使用资源型对象与AWS服务进行交互。

简介

PHP的核心AWS SDK由对应于服务API操作的方法的服务客户端对象组成(例如,Ec2Client::runInstances() 方法映射到EC2服务的RunInstances操作)。

本项目在SDK的基础上构建,增加了新的对象类型,允许您以更资源型的方式与AWS服务API交互。这使得您在处理AWS服务时可以使用更丰富的语法,因为您正在操作理解其与其他资源关系并封装其标识信息的对象。

安装

您必须使用Composer安装AWS资源API,通过在项目中要求aws/aws-sdk-php-resourcescomposer require aws/aws-sdk-php-resources)。

注意:资源API使用AWS SDK for PHP的版本3

对象类型

资源API引入了4个新的对象,都位于Aws\Resource命名空间中。

1. Aws

Aws对象是进入资源API的起点。

<?php

require 'vendor/autoload.php';

use Aws\Resource\Aws;

$aws = new Aws($config);

// Get a resource representing the S3 service.
$s3 = $aws->s3;

如前例所示,$config是一个配置选项数组,其内容与在核心SDK中实例化Aws\Sdk对象时提供的相同。这包括'region''version'、您的凭证等。

您可以通过获取服务资源时指定新值来覆盖服务的全局配置选项。

$s3 = $aws->s3(['region' => 'eu-central-1']);

AWS资源API目前支持7个服务(cloudformationec2glacieriams3snssqs)。

2. Resource

资源对象代表单个可识别的AWS资源(例如,Amazon S3存储桶或Amazon SQS队列)。它们包含有关如何标识资源以及如何加载数据的信息,可以对其执行的操作,以及与之相关的其他资源。

您可以通过调用相关资源名称作为方法并传递其标识符来访问相关资源。

$bucket = $aws->s3->bucket('my-bucket');
$object = $bucket->object('image/bird.jpg');

以这种方式访问资源是惰性评估的,这意味着前面的示例实际上并没有进行任何API调用。

一旦您访问了资源的数据,就会触发API调用以“加载”资源并获取其数据。要检索资源对象的データ,您可以像访问数组一样访问它。

echo $object['LastModified'];

您还可以使用getIdentity()getData()方法提取资源的数据。

print_r($object->getIdentity());
# Array
# (
#     [BucketName] => my-bucket
#     [Key] => image/bird.jpg
# )

print_r($object->getData());
# Array
# (
#     ...
# )

执行操作

您可以通过在对象上调用动词方法来对资源执行操作。

// Create a bucket and object.
$bucket = $aws->s3->createBucket([
    'Bucket' => 'my-new-bucket'
]);
$object = $bucket->putObject([
    'Key'  => 'images/image001.jpg',
    'Body' => fopen('/path/to/image.jpg', 'r'),
]);

// Delete the bucket and object.
$object->delete();
$bucket->delete();

因为资源的标识信息封装在资源对象中,一旦创建了对象,就再也不需要指定它。因此,像$object->delete()这样的操作不需要参数。

3. Collection

一些资源与其他资源之间存在“多个”类型的关联。例如,S3 存储桶包含许多对象。当您访问资源上的复数属性或方法时,您将得到一个资源的 集合。集合是可迭代的,但长度未知,因为检索资源数据的底层 API 操作可能需要多次调用。它们利用核心 SDK 的 分页器 功能来代表您遍历资源数据页面。

集合,像资源一样,是延迟评估的,因此它们实际上不会在开始遍历资源之前触发任何 API 调用。

foreach ($bucket->objects() as $object) {
    echo "Deleting object {$object['Key']}...\n";
    $object->delete();
}

4. 批量处理

批量处理 与集合类似,但长度有限。批量处理是执行操作的结果,其中返回多个资源。例如,SQS “队列”资源有一个名为 “ReceiveMessages” 的操作,该操作返回最多 10 个 “消息”资源。

$messages = $queue->receiveMessages(['VisibilityTimeout' => 60]);
echo "Number of Messages Received: " . count($messages) . "\n";
echo "Receipt Handles:\n";
foreach ($messages as $message) {
    echo "- {$message['ReceiptHandle']}\n";
    $message->delete();
}

使用资源

我们目前正在为 AWS 资源 API 提供API文档。即使没有文档,您也可以通过调用 respondsTo() 方法来编程确定资源对象上可用的方法。

print_r($bucket->respondsTo());
# Array
# (
#     [0] => create
#     [1] => delete
#     [2] => deleteObjects
#     [3] => putObject
#     [4] => multipartUploads
#     [5] => objectVersions
#     [6] => objects
#     [7] => bucketAcl
#     [8] => bucketCors
#     [9] => bucketLifecycle
#     [10] => bucketLogging
#     [11] => bucketPolicy
#     [12] => bucketNotification
#     [13] => bucketRequestPayment
#     [14] => bucketTagging
#     [15] => bucketVersioning
#     [16] => bucketWebsite
#     [17] => object
#     [18] => exists
# )

您可以使用相同的 respondsTo() 方法来检查特定方法是否可用。 getMeta() 方法也可能帮助您了解您的资源对象是如何工作的。

var_dump($bucket->respondsTo('putObject'));
# bool(true)

print_r($bucket->getMeta());
# Array
# (
#     ...
# )

待办事项

在 PHP 的 AWS 资源 API 上仍有大量工作要做。以下是我们计划尽快着手的工作清单。

  1. 支持 Batch 和 Collection 对象上的批量操作(例如,$messages->delete();
  2. 支持更多 AWS 服务
  3. AWS 资源 API 的 API 文档

查看 AWS 资源 API,并让我们知道您在 问题跟踪器 中有什么问题、反馈或想法。谢谢!