本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Firehose API 和版本 3 创建传送流 适用于 PHP 的 Amazon SDK
Amazon Data Firehose 使您可以将实时数据发送到其他 Amazon 服务,包括亚马逊 Kinesis Data Streams、亚马逊 S3、亚马逊 OpenSearch 服务(OpenSearch 服务)和亚马逊 Redshift,或者发送到 Splunk。使用传输流创建一个数据创建器,以在您每次添加数据时将数据传送到配置的目的地。
以下示例演示如何:
-
使用创建传送流CreateDeliveryStream。
-
使用获取有关单个传送流的详细信息DescribeDeliveryStream。
-
使用列出您的直播流ListDeliveryStreams。
-
使用向传输流发送数据PutRecord。
-
使用删除传送流DeleteDeliveryStream。
的所有示例代码都可以在此 适用于 PHP 的 Amazon SDK 处找到 GitHub
凭证
在运行示例代码之前,请配置您的 Amazon 证书,如中所述凭证。然后导入 适用于 PHP 的 Amazon SDK,如中所述基本用法。
有关使用亚马逊 Data Firehose 的更多信息,请参阅亚马逊 Kinesis Data Firehose 开发者指南。
使用 Kinesis 数据流来创建传输流
要建立将数据放入现有 Kinesis 数据流的传输流,请使用操作。CreateDeliveryStream
这使开发人员能够将现有的 Kinesis 服务迁移到 Firehose。
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
示例代码
$firehoseClient = new Aws\Firehose\FirehoseClient([ 'profile' => 'default', 'version' => '2015-08-04', 'region' => 'us-east-2' ]); $name = "my_stream_name"; $stream_type = "KinesisStreamAsSource"; $kinesis_stream = "arn:aws:kinesis:us-east-2:0123456789:stream/my_stream_name"; $role = "arn:aws:iam::0123456789:policy/Role"; try { $result = $firehoseClient->createDeliveryStream([ 'DeliveryStreamName' => $name, 'DeliveryStreamType' => $stream_type, 'KinesisStreamSourceConfiguration' => [ 'KinesisStreamARN' => $kinesis_stream, 'RoleARN' => $role, ], ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }
使用 Amazon S3 存储桶来创建传输流
要建立将数据放入现有 Amazon S3 存储桶的传输流,请使用CreateDeliveryStream操作。
提供目标参数,如目标参数中所述。然后,请确保授予 Fire hose 访问您的亚马逊 S3 存储桶的权限,如授予 Kinesis Data Firehos e 访问亚马逊 S3 目标的权限中所述。
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
示例代码
$firehoseClient = new Aws\Firehose\FirehoseClient([ 'profile' => 'default', 'version' => '2015-08-04', 'region' => 'us-east-2' ]); $name = "my_S3_stream_name"; $stream_type = "DirectPut"; $s3bucket = 'arn:aws:s3:::bucket_name'; $s3Role = 'arn:aws:iam::0123456789:policy/Role'; try { $result = $firehoseClient->createDeliveryStream([ 'DeliveryStreamName' => $name, 'DeliveryStreamType' => $stream_type, 'S3DestinationConfiguration' => [ 'BucketARN' => $s3bucket, 'CloudWatchLoggingOptions' => [ 'Enabled' => false, ], 'RoleARN' => $s3Role ], ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }
使用 OpenSearch 服务创建传送流
要建立将数据放入 OpenSearch 服务集群的 Firehose 传输流,请使用操作。CreateDeliveryStream
提供目标参数,如目标参数中所述。确保您授予 Firehose 访问您的 OpenSearch 服务集群的权限,如授予 Kinesis Data Firehose 访问亚马逊 ES 目的地的权限中所述。
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
示例代码
$firehoseClient = new Aws\Firehose\FirehoseClient([ 'profile' => 'default', 'version' => '2015-08-04', 'region' => 'us-east-2' ]); $name = "my_ES_stream_name"; $stream_type = "DirectPut"; $esDomainARN = 'arn:aws:es:us-east-2:0123456789:domain/Name'; $esRole = 'arn:aws:iam::0123456789:policy/Role'; $esIndex = 'root'; $esType = 'PHP_SDK'; $s3bucket = 'arn:aws:s3:::bucket_name'; $s3Role = 'arn:aws:iam::0123456789:policy/Role'; try { $result = $firehoseClient->createDeliveryStream([ 'DeliveryStreamName' => $name, 'DeliveryStreamType' => $stream_type, 'ElasticsearchDestinationConfiguration' => [ 'DomainARN' => $esDomainARN, 'IndexName' => $esIndex, 'RoleARN' => $esRole, 'S3Configuration' => [ 'BucketARN' => $s3bucket, 'CloudWatchLoggingOptions' => [ 'Enabled' => false, ], 'RoleARN' => $s3Role, ], 'TypeName' => $esType, ], ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }
检索传输流
要获取有关现有 Firehose 传送流的详细信息,请使用操作。DescribeDeliveryStream
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
示例代码
$firehoseClient = new Aws\Firehose\FirehoseClient([ 'profile' => 'default', 'version' => '2015-08-04', 'region' => 'us-east-2' ]); $name = "my_stream_name"; try { $result = $firehoseClient->describeDeliveryStream([ 'DeliveryStreamName' => $name, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }
列出已连接到 Kinesis Data Streams 的现有传输流
要列出向 Kinesis Data Streams 发送数据的所有现有 Firehose 传输流,请使用操作。ListDeliveryStreams
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
示例代码
$firehoseClient = new Aws\Firehose\FirehoseClient([ 'profile' => 'default', 'version' => '2015-08-04', 'region' => 'us-east-2' ]); try { $result = $firehoseClient->listDeliveryStreams([ 'DeliveryStreamType' => 'KinesisStreamAsSource', ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }
列出向其他 Amazon 服务发送数据的现有传输流
要列出向亚马逊 S3、 OpenSearch 服务、亚马逊 Redshift 或 Splunk 发送数据的所有现有 Firehose 传输流,请使用该操作。ListDeliveryStreams
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
示例代码
$firehoseClient = new Aws\Firehose\FirehoseClient([ 'profile' => 'default', 'version' => '2015-08-04', 'region' => 'us-east-2' ]); try { $result = $firehoseClient->listDeliveryStreams([ 'DeliveryStreamType' => 'DirectPut', ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }
将数据发送到现有的 Firehose 传输流
要通过 Firehose 传输流将数据发送到您的指定目的地,请在创建 Firehose 传输流之后使用该PutRecord操作。
在向 Firehose 传送流发送数据之前,DescribeDeliveryStream
请使用查看传送流是否处于活动状态。
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
示例代码
$firehoseClient = new Aws\Firehose\FirehoseClient([ 'profile' => 'default', 'version' => '2015-08-04', 'region' => 'us-east-2' ]); $name = "my_stream_name"; $content = '{"ticker_symbol":"QXZ", "sector":"HEALTHCARE", "change":-0.05, "price":84.51}'; try { $result = $firehoseClient->putRecord([ 'DeliveryStreamName' => $name, 'Record' => [ 'Data' => $content, ], ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }
删除 Firehose 传送流
要删除 Firehose 传送流,请使用操作。DeleteDeliveryStreams这也将删除您已发送到该传输流的所有数据。
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
示例代码
$firehoseClient = new Aws\Firehose\FirehoseClient([ 'profile' => 'default', 'version' => '2015-08-04', 'region' => 'us-east-2' ]); $name = "my_stream_name"; try { $result = $firehoseClient->deleteDeliveryStream([ 'DeliveryStreamName' => $name, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }