

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS SDK for PHP のガイダンス付きのコードサンプル
<a name="examples_index"></a>

このセクションには、AWS を使用する一般的な AWS SDK for PHP シナリオを示すコードサンプルが含まれています。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

**Topics**
+ [認証情報](#examplecredentials)
+ [Amazon CloudFront の例](cf-examples.md)
+ [Amazon CloudSearch](service_cloudsearch-custom-requests.md)
+ [Amazon CloudWatch の例](cw-examples.md)
+ [Amazon EC2 の例](ec2-examples.md)
+ [Amazon OpenSearch Service](service_es-data-plane.md)
+ [AWS Identity and Access Management の例](iam-examples.md)
+ [AWS Key Management Service](kms-examples.md)
+ [Kinesis での例](kinesis-examples.md)
+ [AWS Elemental MediaConvert](emc-examples.md)
+ [Amazon S3の例](s3-examples.md)
+ [AWS Secrets Manager](secretsmanager-examples-manage-secret.md)
+ [Amazon SES の例](ses-examples.md)
+ [Amazon SNS の例](sns-examples.md)
+ [Amazon SQS の例](sqs-examples.md)
+ [Amazon EventBridge](eventbridge-examples.md)

# AWS SDK for PHP バージョン 3 を使用した Amazon CloudWatch のコードサンプル
<a name="cf-examples"></a>

Amazon CloudFrontは、独自のウェブサーバーや Amazon S3 などの AWS サーバーから、静的および動的なウェブコンテンツの提供を高速化する AWS ウェブサービスです。CloudFront では、エッジロケーションというデータセンターの世界的ネットワークを経由してコンテンツを配信します。CloudFront で配信中のコンテンツをユーザーが要求すると、ユーザーは最もレイテンシーが少ないエッジロケーションにルーティングされます。コンテンツがすでにキャッシュされていない場合、CloudFront はオリジンサーバーからコピーを取得して配信し、今後のリクエストに備えてキャッシュします。

CloudFront の詳細については、[Amazon CloudFront デベロッパーガイド](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/)を参照してください。

AWS SDK for PHP バージョン 3 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

# CloudFront API および AWS SDK for PHP バージョン 3 を使用した Amazon CloudFront のディストリビューションの管理
<a name="cloudfront-example-distribution"></a>

Amazon CloudFront は、世界各地にあるエッジロケーションのコンテンツをキャッシュして、お客様独自のサーバーまたは Amazon S3 や Amazon EC2 などの Amazon のサービスに保存する静的ファイルおよび動的ファイルの配信を高速化します。ユーザーがお客様のウェブサイトのコンテンツをリクエストすると、CloudFront は、最も近いエッジロケーションからそのコンテンツを配信します (ファイルがそこにキャッシュされている場合)。それ以外の場合、CloudFront はファイルのコピーを取得し、配信してから、次のリクエストに備えてキャッシュします。エッジロケーションでコンテンツをキャッシュすることにより、そのエリアでの類似したユーザーリクエストのレイテンシーが減ります。

作成する CloudFront ディストリビューションごとに、コンテンツの場所と、ユーザーがリクエストしたときの配信方法を指定します。このトピックでは、HTML、CSS、JSON、イメージファイルなどの静的ファイルおよび動的ファイルの配信について説明します。ビデオオンデマンドで CloudFront を使用する方法の詳細については、「[CloudFront を使用したオンデマンドおよびライブストリーミングビデオ](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/on-demand-streaming-video.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [CreateDistribution](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#createdistribution) を使用してディストリビューションを作成します。
+ [GetDistribution](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#getdistribution) を使用してディストリビューションを取得します。
+ [ListDistributions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#listdistributions) を使用してディストリビューションをリストします。
+ [UpdateDistributions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#updatedistribution) を使用してディストリビューションを更新します。
+ [DisableDistribution](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#disabledistribution) を使用してディストリビューションを無効にします。
+ [DeleteDistributions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#deletedistribution) を使用してディストリビューションを削除します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon CloudFront の使用に関する詳細については、「[Amazon CloudFront デベロッパーガイド](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/)」を参照してください。

## CloudFront ディストリビューションを作成する
<a name="create-a-cf-distribution"></a>

Amazon S3 バケットからディストリビューションを作成します。次の例では、オプションのパラメータはコメントアウトされていますが、デフォルト値は表示されています。ディストリビューションをカスタマイズするには、`$distribution` 内の値とパラメータの両方をコメント解除します。

CloudFront ディストリビューションを作成するには、[CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function createS3Distribution($cloudFrontClient, $distribution)
{
    try {
        $result = $cloudFrontClient->createDistribution([
            'DistributionConfig' => $distribution
        ]);

        $message = '';

        if (isset($result['Distribution']['Id'])) {
            $message = 'Distribution created with the ID of ' .
                $result['Distribution']['Id'];
        }

        $message .= ' and an effective URI of ' .
            $result['@metadata']['effectiveUri'] . '.';

        return $message;
    } catch (AwsException $e) {
        return 'Error: ' . $e['message'];
    }
}

function createsTheS3Distribution()
{
    $originName = 'my-unique-origin-name';
    $s3BucketURL = 'amzn-s3-demo-bucket.s3.amazonaws.com';
    $callerReference = 'my-unique-caller-reference';
    $comment = 'my-comment-about-this-distribution';
    $defaultCacheBehavior = [
        'AllowedMethods' => [
            'CachedMethods' => [
                'Items' => ['HEAD', 'GET'],
                'Quantity' => 2
            ],
            'Items' => ['HEAD', 'GET'],
            'Quantity' => 2
        ],
        'Compress' => false,
        'DefaultTTL' => 0,
        'FieldLevelEncryptionId' => '',
        'ForwardedValues' => [
            'Cookies' => [
                'Forward' => 'none'
            ],
            'Headers' => [
                'Quantity' => 0
            ],
            'QueryString' => false,
            'QueryStringCacheKeys' => [
                'Quantity' => 0
            ]
        ],
        'LambdaFunctionAssociations' => ['Quantity' => 0],
        'MaxTTL' => 0,
        'MinTTL' => 0,
        'SmoothStreaming' => false,
        'TargetOriginId' => $originName,
        'TrustedSigners' => [
            'Enabled' => false,
            'Quantity' => 0
        ],
        'ViewerProtocolPolicy' => 'allow-all'
    ];
    $enabled = false;
    $origin = [
        'Items' => [
            [
                'DomainName' => $s3BucketURL,
                'Id' => $originName,
                'OriginPath' => '',
                'CustomHeaders' => ['Quantity' => 0],
                'S3OriginConfig' => ['OriginAccessIdentity' => '']
            ]
        ],
        'Quantity' => 1
    ];
    $distribution = [
        'CallerReference' => $callerReference,
        'Comment' => $comment,
        'DefaultCacheBehavior' => $defaultCacheBehavior,
        'Enabled' => $enabled,
        'Origins' => $origin
    ];

    $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    echo createS3Distribution($cloudFrontClient, $distribution);
}

// Uncomment the following line to run this code in an AWS account.
// createsTheS3Distribution();
```

## CloudFront ディストリビューションの取得
<a name="retrieve-a-cf-distribution"></a>

指定された CloudFront ディストリビューションのステータスと詳細を取得するには、[GetDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function getDistribution($cloudFrontClient, $distributionId)
{
    try {
        $result = $cloudFrontClient->getDistribution([
            'Id' => $distributionId
        ]);

        $message = '';

        if (isset($result['Distribution']['Status'])) {
            $message = 'The status of the distribution with the ID of ' .
                $result['Distribution']['Id'] . ' is currently ' .
                $result['Distribution']['Status'];
        }

        if (isset($result['@metadata']['effectiveUri'])) {
            $message .= ', and the effective URI is ' .
                $result['@metadata']['effectiveUri'] . '.';
        } else {
            $message = 'Error: Could not get the specified distribution. ' .
                'The distribution\'s status is not available.';
        }

        return $message;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function getsADistribution()
{
    $distributionId = 'E1BTGP2EXAMPLE';

    $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    echo getDistribution($cloudFrontClient, $distributionId);
}

// Uncomment the following line to run this code in an AWS account.
// getsADistribution();
```

## CloudFront ディストリビューションのリスト
<a name="list-cf-distributions"></a>

[ListDistributions](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributions.html) オペレーションを使用して、指定した AWS リージョンの既存のCloudFront ディストリビューションのリストを現在のアカウントから取得します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function listDistributions($cloudFrontClient)
{
    try {
        $result = $cloudFrontClient->listDistributions([]);
        return $result;
    } catch (AwsException $e) {
        exit('Error: ' . $e->getAwsErrorMessage());
    }
}

function listTheDistributions()
{
    $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-2'
    ]);

    $distributions = listDistributions($cloudFrontClient);

    if (count($distributions) == 0) {
        echo 'Could not find any distributions.';
    } else {
        foreach ($distributions['DistributionList']['Items'] as $distribution) {
            echo 'The distribution with the ID of ' . $distribution['Id'] .
                ' has the status of ' . $distribution['Status'] . '.' . "\n";
        }
    }
}

// Uncomment the following line to run this code in an AWS account.
// listTheDistributions();
```

## CloudFront ディストリビューションの更新
<a name="update-a-cf-distribution"></a>

CloudFront ディストリビューションの更新は、ディストリビューションの作成と類似しています。ただし、ディストリビューションを更新するときに、より多くのフィールドが必要になり、すべての値が含まれている必要があります。既存のディストリビューションを変更するには、最初に既存のディストリビューションを取得し、`$distribution` 配列内で変更する値を更新することをお勧めします。

指定された CloudFront ディストリビューションを更新するには、[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function updateDistribution(
    $cloudFrontClient,
    $distributionId,
    $distributionConfig,
    $eTag
) {
    try {
        $result = $cloudFrontClient->updateDistribution([
            'DistributionConfig' => $distributionConfig,
            'Id' => $distributionId,
            'IfMatch' => $eTag
        ]);

        return 'The distribution with the following effective URI has ' .
            'been updated: ' . $result['@metadata']['effectiveUri'];
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function getDistributionConfig($cloudFrontClient, $distributionId)
{
    try {
        $result = $cloudFrontClient->getDistribution([
            'Id' => $distributionId,
        ]);

        if (isset($result['Distribution']['DistributionConfig'])) {
            return [
                'DistributionConfig' => $result['Distribution']['DistributionConfig'],
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        } else {
            return [
                'Error' => 'Error: Cannot find distribution configuration details.',
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        }
    } catch (AwsException $e) {
        return [
            'Error' => 'Error: ' . $e->getAwsErrorMessage()
        ];
    }
}

function getDistributionETag($cloudFrontClient, $distributionId)
{
    try {
        $result = $cloudFrontClient->getDistribution([
            'Id' => $distributionId,
        ]);

        if (isset($result['ETag'])) {
            return [
                'ETag' => $result['ETag'],
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        } else {
            return [
                'Error' => 'Error: Cannot find distribution ETag header value.',
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        }
    } catch (AwsException $e) {
        return [
            'Error' => 'Error: ' . $e->getAwsErrorMessage()
        ];
    }
}

function updateADistribution()
{
    // $distributionId = 'E1BTGP2EXAMPLE';
    $distributionId = 'E1X3BKQ569KEMH';

    $cloudFrontClient = new CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    // To change a distribution, you must first get the distribution's
    // ETag header value.
    $eTag = getDistributionETag($cloudFrontClient, $distributionId);

    if (array_key_exists('Error', $eTag)) {
        exit($eTag['Error']);
    }

    // To change a distribution, you must also first get information about
    // the distribution's current configuration. Then you must use that
    // information to build a new configuration.
    $currentConfig = getDistributionConfig($cloudFrontClient, $distributionId);

    if (array_key_exists('Error', $currentConfig)) {
        exit($currentConfig['Error']);
    }

    // To change a distribution's configuration, you can set the
    // distribution's related configuration value as part of a change request,
    // for example:
    // 'Enabled' => true
    // Some configuration values are required to be specified as part of a change
    // request, even if you don't plan to change their values. For ones you
    // don't want to change but are required to be specified, you can just reuse
    // their current values, as follows.
    $distributionConfig = [
        'CallerReference' => $currentConfig['DistributionConfig']["CallerReference"],
        'Comment' => $currentConfig['DistributionConfig']["Comment"],
        'DefaultCacheBehavior' => $currentConfig['DistributionConfig']["DefaultCacheBehavior"],
        'DefaultRootObject' => $currentConfig['DistributionConfig']["DefaultRootObject"],
        'Enabled' => $currentConfig['DistributionConfig']["Enabled"],
        'Origins' => $currentConfig['DistributionConfig']["Origins"],
        'Aliases' => $currentConfig['DistributionConfig']["Aliases"],
        'CustomErrorResponses' => $currentConfig['DistributionConfig']["CustomErrorResponses"],
        'HttpVersion' => $currentConfig['DistributionConfig']["HttpVersion"],
        'CacheBehaviors' => $currentConfig['DistributionConfig']["CacheBehaviors"],
        'Logging' => $currentConfig['DistributionConfig']["Logging"],
        'PriceClass' => $currentConfig['DistributionConfig']["PriceClass"],
        'Restrictions' => $currentConfig['DistributionConfig']["Restrictions"],
        'ViewerCertificate' => $currentConfig['DistributionConfig']["ViewerCertificate"],
        'WebACLId' => $currentConfig['DistributionConfig']["WebACLId"]
    ];

    echo updateDistribution(
        $cloudFrontClient,
        $distributionId,
        $distributionConfig,
        $eTag['ETag']
    );
}

// Uncomment the following line to run this code in an AWS account.
// updateADistribution();
```

## CloudFront ディストリビューションの無効化
<a name="disable-a-cf-distribution"></a>

ディストリビューションを無効化または削除するには、そのステータスをデプロイ済みから無効に変更します。

指定された CloudFront ディストリビューションを無効にするには、[DisableDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DisableDistribution.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function disableDistribution(
    $cloudFrontClient,
    $distributionId,
    $distributionConfig,
    $eTag
) {
    try {
        $result = $cloudFrontClient->updateDistribution([
            'DistributionConfig' => $distributionConfig,
            'Id' => $distributionId,
            'IfMatch' => $eTag
        ]);
        return 'The distribution with the following effective URI has ' .
            'been disabled: ' . $result['@metadata']['effectiveUri'];
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function getDistributionConfig($cloudFrontClient, $distributionId)
{
    try {
        $result = $cloudFrontClient->getDistribution([
            'Id' => $distributionId,
        ]);

        if (isset($result['Distribution']['DistributionConfig'])) {
            return [
                'DistributionConfig' => $result['Distribution']['DistributionConfig'],
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        } else {
            return [
                'Error' => 'Error: Cannot find distribution configuration details.',
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        }
    } catch (AwsException $e) {
        return [
            'Error' => 'Error: ' . $e->getAwsErrorMessage()
        ];
    }
}

function getDistributionETag($cloudFrontClient, $distributionId)
{
    try {
        $result = $cloudFrontClient->getDistribution([
            'Id' => $distributionId,
        ]);

        if (isset($result['ETag'])) {
            return [
                'ETag' => $result['ETag'],
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        } else {
            return [
                'Error' => 'Error: Cannot find distribution ETag header value.',
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        }
    } catch (AwsException $e) {
        return [
            'Error' => 'Error: ' . $e->getAwsErrorMessage()
        ];
    }
}

function disableADistribution()
{
    $distributionId = 'E1BTGP2EXAMPLE';

    $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    // To disable a distribution, you must first get the distribution's
    // ETag header value.
    $eTag = getDistributionETag($cloudFrontClient, $distributionId);

    if (array_key_exists('Error', $eTag)) {
        exit($eTag['Error']);
    }

    // To delete a distribution, you must also first get information about
    // the distribution's current configuration. Then you must use that
    // information to build a new configuration, including setting the new
    // configuration to "disabled".
    $currentConfig = getDistributionConfig($cloudFrontClient, $distributionId);

    if (array_key_exists('Error', $currentConfig)) {
        exit($currentConfig['Error']);
    }

    $distributionConfig = [
        'CacheBehaviors' => $currentConfig['DistributionConfig']["CacheBehaviors"],
        'CallerReference' => $currentConfig['DistributionConfig']["CallerReference"],
        'Comment' => $currentConfig['DistributionConfig']["Comment"],
        'DefaultCacheBehavior' => $currentConfig['DistributionConfig']["DefaultCacheBehavior"],
        'DefaultRootObject' => $currentConfig['DistributionConfig']["DefaultRootObject"],
        'Enabled' => false,
        'Origins' => $currentConfig['DistributionConfig']["Origins"],
        'Aliases' => $currentConfig['DistributionConfig']["Aliases"],
        'CustomErrorResponses' => $currentConfig['DistributionConfig']["CustomErrorResponses"],
        'HttpVersion' => $currentConfig['DistributionConfig']["HttpVersion"],
        'Logging' => $currentConfig['DistributionConfig']["Logging"],
        'PriceClass' => $currentConfig['DistributionConfig']["PriceClass"],
        'Restrictions' => $currentConfig['DistributionConfig']["Restrictions"],
        'ViewerCertificate' => $currentConfig['DistributionConfig']["ViewerCertificate"],
        'WebACLId' => $currentConfig['DistributionConfig']["WebACLId"]
    ];

    echo disableDistribution(
        $cloudFrontClient,
        $distributionId,
        $distributionConfig,
        $eTag['ETag']
    );
}

// Uncomment the following line to run this code in an AWS account.
// disableADistribution();
```

## CloudFront ディストリビューションの削除
<a name="delete-a-cf-distribution"></a>

ディストリビューションのステータスが「無効」になったら、ディストリビューションを削除できます。

指定された CloudFront ディストリビューションを削除するには、[DeleteDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DeleteDistribution.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function deleteDistribution($cloudFrontClient, $distributionId, $eTag)
{
    try {
        $result = $cloudFrontClient->deleteDistribution([
            'Id' => $distributionId,
            'IfMatch' => $eTag
        ]);
        return 'The distribution at the following effective URI has ' .
            'been deleted: ' . $result['@metadata']['effectiveUri'];
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function getDistributionETag($cloudFrontClient, $distributionId)
{
    try {
        $result = $cloudFrontClient->getDistribution([
            'Id' => $distributionId,
        ]);

        if (isset($result['ETag'])) {
            return [
                'ETag' => $result['ETag'],
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        } else {
            return [
                'Error' => 'Error: Cannot find distribution ETag header value.',
                'effectiveUri' => $result['@metadata']['effectiveUri']
            ];
        }
    } catch (AwsException $e) {
        return [
            'Error' => 'Error: ' . $e->getAwsErrorMessage()
        ];
    }
}

function deleteADistribution()
{
    $distributionId = 'E17G7YNEXAMPLE';

    $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    // To delete a distribution, you must first get the distribution's
    // ETag header value.
    $eTag = getDistributionETag($cloudFrontClient, $distributionId);

    if (array_key_exists('Error', $eTag)) {
        exit($eTag['Error']);
    } else {
        echo deleteDistribution(
            $cloudFrontClient,
            $distributionId,
            $eTag['ETag']
        );
    }
}

// Uncomment the following line to run this code in an AWS account.
// deleteADistribution();
```

# CloudFront API および AWS SDK for PHP バージョン 3 を使用した Amazon CloudFront の無効化の管理 API
<a name="cloudfront-example-invalidation"></a>

Amazon CloudFront は、世界中のエッジロケーションで静的ファイルおよび動的ファイルのコピーをキャッシュします。すべてのエッジロケーションでファイルを削除または更新するには、各ファイルまたはファイルのグループに対して無効化を作成します。

毎月最初の 1,000 件の無効化は無料です。CloudFront エッジロケーションからのコンテンツの削除の詳細については、「[ファイルの無効化](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [CreateInvalidation](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#createinvalidation) を使用してディストリビューションの無効化を作成します。
+ [GetInvalidation](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#getinvalidation) を使用してディストリビューションの無効化を取得します。
+ [ListInvalidations](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#listinvalidations) を使用してディストリビューションをリストします。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon CloudFront の使用に関する詳細については、「[Amazon CloudFront デベロッパーガイド](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/)」を参照してください。

## ディストリビューションの無効化の作成
<a name="create-a-distribution-invalidation"></a>

削除する必要があるファイルのパス位置を指定して、CloudFront ディストリビューションの無効化を作成します。この例では、ディストリビューション内のすべてのファイルが無効になりますが、`Items` で特定のファイルを識別できます。

CloudFront ディストリビューションの無効化を作成するには、[CreateInvalidation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function createInvalidation(
    $cloudFrontClient,
    $distributionId,
    $callerReference,
    $paths,
    $quantity
) {
    try {
        $result = $cloudFrontClient->createInvalidation([
            'DistributionId' => $distributionId,
            'InvalidationBatch' => [
                'CallerReference' => $callerReference,
                'Paths' => [
                    'Items' => $paths,
                    'Quantity' => $quantity,
                ],
            ]
        ]);

        $message = '';

        if (isset($result['Location'])) {
            $message = 'The invalidation location is: ' . $result['Location'];
        }

        $message .= ' and the effective URI is ' . $result['@metadata']['effectiveUri'] . '.';

        return $message;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function createTheInvalidation()
{
    $distributionId = 'E17G7YNEXAMPLE';
    $callerReference = 'my-unique-value';
    $paths = ['/*'];
    $quantity = 1;

    $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    echo createInvalidation(
        $cloudFrontClient,
        $distributionId,
        $callerReference,
        $paths,
        $quantity
    );
}

// Uncomment the following line to run this code in an AWS account.
// createTheInvalidation();
```

## ディストリビューションの無効化の取得
<a name="get-a-distribution-invalidation"></a>

CloudFront ディストリビューションのステータスと詳細を取得するには、[GetInvalidation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetInvalidation.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function getInvalidation($cloudFrontClient, $distributionId, $invalidationId)
{
    try {
        $result = $cloudFrontClient->getInvalidation([
            'DistributionId' => $distributionId,
            'Id' => $invalidationId,
        ]);

        $message = '';

        if (isset($result['Invalidation']['Status'])) {
            $message = 'The status for the invalidation with the ID of ' .
                $result['Invalidation']['Id'] . ' is ' .
                $result['Invalidation']['Status'];
        }

        if (isset($result['@metadata']['effectiveUri'])) {
            $message .= ', and the effective URI is ' .
                $result['@metadata']['effectiveUri'] . '.';
        } else {
            $message = 'Error: Could not get information about ' .
                'the invalidation. The invalidation\'s status ' .
                'was not available.';
        }

        return $message;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function getsAnInvalidation()
{
    $distributionId = 'E1BTGP2EXAMPLE';
    $invalidationId = 'I1CDEZZEXAMPLE';

    $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    echo getInvalidation($cloudFrontClient, $distributionId, $invalidationId);
}

// Uncomment the following line to run this code in an AWS account.
// getsAnInvalidation();
```

## ディストリビューションの無効化のリスト表示
<a name="list-distribution-invalidations"></a>

現在のすべての CloudFront ディストリビューションの無効化をリストするには、[ListInvalidations](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListInvalidations.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function listInvalidations($cloudFrontClient, $distributionId)
{
    try {
        $result = $cloudFrontClient->listInvalidations([
            'DistributionId' => $distributionId
        ]);
        return $result;
    } catch (AwsException $e) {
        exit('Error: ' . $e->getAwsErrorMessage());
    }
}

function listTheInvalidations()
{
    $distributionId = 'E1WICG1EXAMPLE';

    $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    $invalidations = listInvalidations(
        $cloudFrontClient,
        $distributionId
    );

    if (isset($invalidations['InvalidationList'])) {
        if ($invalidations['InvalidationList']['Quantity'] > 0) {
            foreach ($invalidations['InvalidationList']['Items'] as $invalidation) {
                echo 'The invalidation with the ID of ' . $invalidation['Id'] .
                    ' has the status of ' . $invalidation['Status'] . '.' . "\n";
            }
        } else {
            echo 'Could not find any invalidations for the specified distribution.';
        }
    } else {
        echo 'Error: Could not get invalidation information. Could not get ' .
            'information about the specified distribution.';
    }
}

// Uncomment the following line to run this code in an AWS account.
// listTheInvalidations();
```

# AWS SDK for PHP バージョン 3 を使用した Amazon CloudFront URLs の署名
<a name="cloudfront-example-signed-url"></a>

署名付き URL によりプライベートコンテンツへのアクセス権をユーザーに付与できます。署名付き URL には有効期限などの追加情報が含まれており、これによってコンテンツへのアクセスに対する管理が許可されます。この追加情報は、既定ポリシーまたはカスタムポリシーに基づくポリシーステートメントに含まれます。プライベートディストリビューションをセットアップする方法および URL の署名が必要な理由の詳細については、Amazon CloudFront デベロッパーガイドの「[Amazon CloudFron を使用したプライベートコンテンツの提供](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html)」を参照してください。
+ [getSignedURL](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CloudFront.CloudFrontClient.html#_getSignedUrl) を使用して、署名付きの Amazon CloudFront を作成します。
+ [getSignedCookie](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CloudFront.CloudFrontClient.html#_getSignedCookie) を使用して、署名付きの Amazon CloudFront Cookie を作成します。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

Amazon CloudFront の使用に関する詳細については、「[Amazon CloudFront デベロッパーガイド](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/)」を参照してください。

## プライベートディストリビューションの CloudFront URL の署名
<a name="signing-cf-urls-for-private-distributions"></a>

SDK の CloudFront クライアントを使用して URL に署名できます。最初に、`CloudFrontClient` オブジェクトを作成する必要があります。既定またはカスタムポリシーを使用して、ビデオリソースの CloudFront URL に署名することができます。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function signPrivateDistribution(
    $cloudFrontClient,
    $resourceKey,
    $expires,
    $privateKey,
    $keyPairId
) {
    try {
        $result = $cloudFrontClient->getSignedUrl([
            'url' => $resourceKey,
            'expires' => $expires,
            'private_key' => $privateKey,
            'key_pair_id' => $keyPairId
        ]);

        return $result;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function signAPrivateDistribution()
{
    $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt';
    $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now.
    $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem';
    $keyPairId = 'AAPKAJIKZATYYYEXAMPLE';

    $cloudFrontClient = new CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    echo signPrivateDistribution(
        $cloudFrontClient,
        $resourceKey,
        $expires,
        $privateKey,
        $keyPairId
    );
}

// Uncomment the following line to run this code in an AWS account.
// signAPrivateDistribution();
```

## CloudFront URL 作成時のカスタムポリシーの使用
<a name="use-a-custom-policy-when-creating-cf-urls"></a>

カスタムポリシーを使用するには、`policy` キーを `expires` の代わりに指定します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function signPrivateDistributionPolicy(
    $cloudFrontClient,
    $resourceKey,
    $customPolicy,
    $privateKey,
    $keyPairId
) {
    try {
        $result = $cloudFrontClient->getSignedUrl([
            'url' => $resourceKey,
            'policy' => $customPolicy,
            'private_key' => $privateKey,
            'key_pair_id' => $keyPairId
        ]);

        return $result;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function signAPrivateDistributionPolicy()
{
    $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt';
    $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now.
    $customPolicy = <<<POLICY
{
    "Statement": [
        {
            "Resource": "$resourceKey",
            "Condition": {
                "IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"},
                "DateLessThan": {"AWS:EpochTime": $expires}
            }
        }
    ]
}
POLICY;
    $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem';
    $keyPairId = 'AAPKAJIKZATYYYEXAMPLE';

    $cloudFrontClient = new CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    echo signPrivateDistributionPolicy(
        $cloudFrontClient,
        $resourceKey,
        $customPolicy,
        $privateKey,
        $keyPairId
    );
}

// Uncomment the following line to run this code in an AWS account.
// signAPrivateDistributionPolicy();
```

## CloudFront 署名付き URL の使用
<a name="use-a-cf-signed-url"></a>

署名付き URL の形式は、署名する URL で使用されているのが「HTTP」スキームであるか「RTMP」スキームであるかによって異なります。「HTTP」の場合は、完全な、絶対 URL が返されます。「RTMP」の場合は、わかりやすいように相対 URL だけが返されます。これは、一部のプレイヤーでホストとパスを個別パラメーターとして指定することが、必要となるからです。

次の例では、[JWPlayer](http://www.longtailvideo.com/jw-player/) を使用してビデオを表示するウェブページを構築するために署名付き URL を使用する方法を示します。同様の手法が [FlowPlayer](http://flowplayer.org/) などの他のプレイヤーに適用されますが、異なるクライアント側コードが必要になります。

```
<html>
<head>
    <title>|CFlong| Streaming Example</title>
    <script type="text/javascript" src="https://example.com/jwplayer.js"></script>
</head>
<body>
    <div id="video">The canned policy video will be here.</div>
    <script type="text/javascript">
        jwplayer('video').setup({
            file: "<?= $streamHostUrl ?>/cfx/st/<?= $signedUrlCannedPolicy ?>",
            width: "720",
            height: "480"
        });
    </script>
</body>
</html>
```

## プライベートディストリビューションの CloudFront Cookie の署名
<a name="signing-cf-cookies-for-private-distributions"></a>

署名付き URL の代わりに、署名付き Cookie を使用してプライベートディストリビューションにクライアントアクセスを許可することもできます。署名付き cookie により複数の制限されたファイル (HLS 形式の動画ファイルすべてやウェブサイトの購読者領域にあるすべてのファイルなど) へのアクセスを提供できます。署名付き URL の代わりに、署名付き Cookie が必要になる (またはその逆の) 理由の詳細については、Amazon CloudFront デベロッパーガイドの「[署名付き URL と署名付き Cookie の選択](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-choosing-signed-urls-cookies.html)」を参照してください。

署名付き Cookie の作成は、署名付き URL の作成に似ています。唯一の違いは、呼び出すメソッドです (`getSignedCookie` が `getSignedUrl` の代わりに呼び出される)。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function signCookie(
    $cloudFrontClient,
    $resourceKey,
    $expires,
    $privateKey,
    $keyPairId
) {
    try {
        $result = $cloudFrontClient->getSignedCookie([
            'url' => $resourceKey,
            'expires' => $expires,
            'private_key' => $privateKey,
            'key_pair_id' => $keyPairId
        ]);

        return $result;
    } catch (AwsException $e) {
        return [ 'Error' => $e->getAwsErrorMessage() ];
    }
}

function signACookie()
{
    $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt';
    $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now.
    $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem';
    $keyPairId = 'AAPKAJIKZATYYYEXAMPLE';

    $cloudFrontClient = new CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    $result = signCookie(
        $cloudFrontClient,
        $resourceKey,
        $expires,
        $privateKey,
        $keyPairId
    );

    /* If successful, returns something like:
    CloudFront-Expires = 1589926678
    CloudFront-Signature = Lv1DyC2q...2HPXaQ__
    CloudFront-Key-Pair-Id = AAPKAJIKZATYYYEXAMPLE
    */
    foreach ($result as $key => $value) {
        echo $key . ' = ' . $value . "\n";
    }
}

// Uncomment the following line to run this code in an AWS account.
// signACookie();
```

## CloudFront Cookie 作成時のカスタムポリシーの使用
<a name="use-a-custom-policy-when-creating-cf-cookies"></a>

`getSignedUrl` パラメーターの場合と同様に `'policy'` パラメーターを、`expires` パラメーターと `url` パラメーターの代わりに指定して、カスタムポリシーで Cookie に署名できます。カスタムポリシーを使用すると、リソースキーにワイルドカードを含めることができます。これにより、複数のファイルに対する単一の署名付き Cookie を作成できます。

 `getSignedCookie` はキーと値のペアの配列を返します。それらのすべてを、プライベートディストリビューションへのアクセスを許可する Cookie として設定する必要があります。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function signCookiePolicy(
    $cloudFrontClient,
    $customPolicy,
    $privateKey,
    $keyPairId
) {
    try {
        $result = $cloudFrontClient->getSignedCookie([
            'policy' => $customPolicy,
            'private_key' => $privateKey,
            'key_pair_id' => $keyPairId
        ]);

        return $result;
    } catch (AwsException $e) {
        return [ 'Error' => $e->getAwsErrorMessage() ];
    }
}

function signACookiePolicy()
{
    $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt';
    $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now.
    $customPolicy = <<<POLICY
{
    "Statement": [
        {
            "Resource": "{$resourceKey}",
            "Condition": {
                "IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"},
                "DateLessThan": {"AWS:EpochTime": {$expires}}
            }
        }
    ]
}
POLICY;
    $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem';
    $keyPairId = 'AAPKAJIKZATYYYEXAMPLE';

    $cloudFrontClient = new CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    $result = signCookiePolicy(
        $cloudFrontClient,
        $customPolicy,
        $privateKey,
        $keyPairId
    );

    /* If successful, returns something like:
    CloudFront-Policy = eyJTdGF0...fX19XX0_
    CloudFront-Signature = RowqEQWZ...N8vetw__
    CloudFront-Key-Pair-Id = AAPKAJIKZATYYYEXAMPLE
    */
    foreach ($result as $key => $value) {
        echo $key . ' = ' . $value . "\n";
    }
}

// Uncomment the following line to run this code in an AWS account.
// signACookiePolicy();
```

## Guzzle クライアントへの CloudFront Cookie の送信
<a name="send-cf-cookies-to-guzzle-client"></a>

Guzzle クライアント使用するために、これらの Cookie を `GuzzleHttp\Cookie\CookieJar` に渡すこともできます。

```
use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;

$distribution = "example-distribution.cloudfront.net";
$client = new \GuzzleHttp\Client([
    'base_uri' => "https://$distribution",
    'cookies' => CookieJar::fromArray($signedCookieCustomPolicy, $distribution),
]);

$client->get('video.mp4');
```

詳細については、Amazon CloudFront デベロッパーガイドの「[署名付き Cookie の使用](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html)」を参照してください。

# AWS SDK for PHP バージョン 3 によるカスタム Amazon CloudSearch ドメインリクエストへの署名
<a name="service_cloudsearch-custom-requests"></a>

Amazon CloudSearch ドメインリクエストは、AWS SDK for PHP でサポートされているもの以外でもカスタマイズできます。IAM 認証によって保護されているドメインへのカスタムリクエストを作成する必要がある場合は、SDK の認証情報プロバイダと署名者を使用して、任意の [PSR-7 リクエスト](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Psr.Http.Message.RequestInterface.html)に署名できます。

たとえば、「[Cloud Search の使用開始](https://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-started.html)」に従って、[ステップ 3](https://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-started-search.html) で IAM で保護されているドメインを使用する場合は、次のようにリクエストに署名して実行する必要があります。

以下の例では、次の方法を示しています。
+ [SignatureV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Signature.SignatureV4.html#_signRequest) を使用して、AWS 署名プロトコルでリクエストに署名します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## Amazon CloudSearch ドメインリクエストに署名
<a name="sign-cslong-domain-request"></a>

 **インポート**。

```
require './vendor/autoload.php';

use Aws\Credentials\CredentialProvider;
use Aws\Signature\SignatureV4;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
```

 **サンプルコード** 

```
function searchDomain(
    $client,
    $domainName,
    $domainId,
    $domainRegion,
    $searchString
) {
    $domainPrefix = 'search-';
    $cloudSearchDomain = 'cloudsearch.amazonaws.com';
    $cloudSearchVersion = '2013-01-01';
    $searchPrefix = 'search?';

    // Specify the search to send.
    $request = new Request(
        'GET',
        "https://$domainPrefix$domainName-$domainId.$domainRegion." .
            "$cloudSearchDomain/$cloudSearchVersion/" .
            "$searchPrefix$searchString"
    );

    // Get default AWS account access credentials.
    $credentials = call_user_func(CredentialProvider::defaultProvider())->wait();

    // Sign the search request with the credentials.
    $signer = new SignatureV4('cloudsearch', $domainRegion);
    $request = $signer->signRequest($request, $credentials);

    // Send the signed search request.
    $response = $client->send($request);

    // Report the search results, if any.
    $results = json_decode($response->getBody());

    $message = '';

    if ($results->hits->found > 0) {
        $message .= 'Search results:' . "\n";

        foreach ($results->hits->hit as $hit) {
            $message .= $hit->fields->title . "\n";
        }
    } else {
        $message .= 'No search results.';
    }

    return $message;
}

function searchADomain()
{
    $domainName = 'my-search-domain';
    $domainId = '7kbitd6nyiglhdtmssxEXAMPLE';
    $domainRegion = 'us-east-1';
    $searchString = 'q=star+wars&return=title';
    $client = new Client();

    echo searchDomain(
        $client,
        $domainName,
        $domainId,
        $domainRegion,
        $searchString
    );
}

// Uncomment the following line to run this code in an AWS account.
// searchADomain();
```

# AWS SDK for PHP バージョン 3 を使用した Amazon CloudWatch のコード例
<a name="cw-examples"></a>

Amazon CloudWatch (CloudWatch) は、AWS で実行されている Amazon Web Services のリソースやアプリケーションをリアルタイムでモニタリングするウェブサービスです。CloudWatch を使用してメトリクスを収集し、追跡できます。メトリクスとは、リソースやアプリケーションに関して測定できる変数です。CloudWatch アラームは、ユーザーが定義したルールに基づいて、通知を送信したり、モニタリングしているリソースに自動的に変更を加えたりします。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

**Topics**
+ [認証情報](#examplecredentials)
+ [Amazon CloudWatch アラームの使用](cw-examples-work-with-alarms.md)
+ [CloudWatch からのメトリクスの取得](cw-examples-getting-metrics.md)
+ [Amazon CloudWatch でのカスタムメトリクスの発行](cw-examples-publishing-custom-metrics.md)
+ [Amazon CloudWatch Events にイベントを送信します](cw-examples-sending-events.md)
+ [Amazon CloudWatch アラームでのアラームアクションの使用](cw-examples-using-alarm-actions.md)

# AWS SDK for PHP バージョン 3 を使用した Amazon CloudWatch アラームの操作
<a name="cw-examples-work-with-alarms"></a>

Amazon CloudWatch アラームで、指定した期間中、1 つのメトリクスを監視します。このアラームは、複数の期間にわたる一定のしきい値とメトリクスの値の関係性に基づき、1 つ以上のアクションを実行します。

以下の例では、次の方法を示しています。
+ [DescribeAlarms](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#describealarms) を使用したアラームの記述。
+ [PutMetricAlarm](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#putmetricalarm) を使用したアラームの作成。
+ [DeleteAlarms](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#deletealarms) を使用したアラームの削除。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## アラームの記述
<a name="describe-alarms"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function describeAlarms($cloudWatchClient)
{
    try {
        $result = $cloudWatchClient->describeAlarms();

        $message = '';

        if (isset($result['@metadata']['effectiveUri'])) {
            $message .= 'Alarms at the effective URI of ' .
                $result['@metadata']['effectiveUri'] . "\n\n";

            if (isset($result['CompositeAlarms'])) {
                $message .= "Composite alarms:\n";

                foreach ($result['CompositeAlarms'] as $alarm) {
                    $message .= $alarm['AlarmName'] . "\n";
                }
            } else {
                $message .= "No composite alarms found.\n";
            }

            if (isset($result['MetricAlarms'])) {
                $message .= "Metric alarms:\n";

                foreach ($result['MetricAlarms'] as $alarm) {
                    $message .= $alarm['AlarmName'] . "\n";
                }
            } else {
                $message .= 'No metric alarms found.';
            }
        } else {
            $message .= 'No alarms found.';
        }

        return $message;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function describeTheAlarms()
{
    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2010-08-01'
    ]);

    echo describeAlarms($cloudWatchClient);
}

// Uncomment the following line to run this code in an AWS account.
// describeTheAlarms();
```

## アラームの作成
<a name="create-an-alarm"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function putMetricAlarm(
    $cloudWatchClient,
    $cloudWatchRegion,
    $alarmName,
    $namespace,
    $metricName,
    $dimensions,
    $statistic,
    $period,
    $comparison,
    $threshold,
    $evaluationPeriods
) {
    try {
        $result = $cloudWatchClient->putMetricAlarm([
            'AlarmName' => $alarmName,
            'Namespace' => $namespace,
            'MetricName' => $metricName,
            'Dimensions' => $dimensions,
            'Statistic' => $statistic,
            'Period' => $period,
            'ComparisonOperator' => $comparison,
            'Threshold' => $threshold,
            'EvaluationPeriods' => $evaluationPeriods
        ]);

        if (isset($result['@metadata']['effectiveUri'])) {
            if (
                $result['@metadata']['effectiveUri'] ==
                'https://monitoring.' . $cloudWatchRegion . '.amazonaws.com'
            ) {
                return 'Successfully created or updated specified alarm.';
            } else {
                return 'Could not create or update specified alarm.';
            }
        } else {
            return 'Could not create or update specified alarm.';
        }
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function putTheMetricAlarm()
{
    $alarmName = 'my-ec2-resources';
    $namespace = 'AWS/Usage';
    $metricName = 'ResourceCount';
    $dimensions = [
        [
            'Name' => 'Type',
            'Value' => 'Resource'
        ],
        [
            'Name' => 'Resource',
            'Value' => 'vCPU'
        ],
        [
            'Name' => 'Service',
            'Value' => 'EC2'
        ],
        [
            'Name' => 'Class',
            'Value' => 'Standard/OnDemand'
        ]
    ];
    $statistic = 'Average';
    $period = 300;
    $comparison = 'GreaterThanThreshold';
    $threshold = 1;
    $evaluationPeriods = 1;

    $cloudWatchRegion = 'us-east-1';
    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => $cloudWatchRegion,
        'version' => '2010-08-01'
    ]);

    echo putMetricAlarm(
        $cloudWatchClient,
        $cloudWatchRegion,
        $alarmName,
        $namespace,
        $metricName,
        $dimensions,
        $statistic,
        $period,
        $comparison,
        $threshold,
        $evaluationPeriods
    );
}

// Uncomment the following line to run this code in an AWS account.
// putTheMetricAlarm();
```

## アラームの削除
<a name="delete-alarms"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function deleteAlarms($cloudWatchClient, $alarmNames)
{
    try {
        $result = $cloudWatchClient->deleteAlarms([
            'AlarmNames' => $alarmNames
        ]);

        return 'The specified alarms at the following effective URI have ' .
            'been deleted or do not currently exist: ' .
            $result['@metadata']['effectiveUri'];
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function deleteTheAlarms()
{
    $alarmNames = array('my-alarm');

    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2010-08-01'
    ]);

    echo deleteAlarms($cloudWatchClient, $alarmNames);
}

// Uncomment the following line to run this code in an AWS account.
// deleteTheAlarms();
```

# AWS SDK for PHP バージョン 3 を使用した Amazon CloudWatch からのメトリクスの取得
<a name="cw-examples-getting-metrics"></a>

メトリクスとは、システムのパフォーマンスに関するデータです。Amazon EC2 インスタンスや、独自のアプリケーションメトリクスなどの一部のリソースの詳細モニタリングを有効にできます。

以下の例では、次の方法を示しています。
+ [ListMetrics](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#listmetrics) を使用して、メトリクスのリストを取得します。
+ [DescribeAlarmsForMetric](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#describealarmsformetric) を使用して、メトリクスに対するアラームを取得します。
+ [GetMetricStatistics](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#getmetricstatistics) を使用して、特定のメトリクスの統計情報を取得します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## メトリクスの一覧表示
<a name="list-metrics"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function listMetrics($cloudWatchClient)
{
    try {
        $result = $cloudWatchClient->listMetrics();

        $message = '';

        if (isset($result['@metadata']['effectiveUri'])) {
            $message .= 'For the effective URI at ' .
                $result['@metadata']['effectiveUri'] . ":\n\n";

            if (
                (isset($result['Metrics'])) and
                (count($result['Metrics']) > 0)
            ) {
                $message .= "Metrics found:\n\n";

                foreach ($result['Metrics'] as $metric) {
                    $message .= 'For metric ' . $metric['MetricName'] .
                        ' in namespace ' . $metric['Namespace'] . ":\n";

                    if (
                        (isset($metric['Dimensions'])) and
                        (count($metric['Dimensions']) > 0)
                    ) {
                        $message .= "Dimensions:\n";

                        foreach ($metric['Dimensions'] as $dimension) {
                            $message .= 'Name: ' . $dimension['Name'] .
                                ', Value: ' . $dimension['Value'] . "\n";
                        }

                        $message .= "\n";
                    } else {
                        $message .= "No dimensions.\n\n";
                    }
                }
            } else {
                $message .= 'No metrics found.';
            }
        } else {
            $message .= 'No metrics found.';
        }

        return $message;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function listTheMetrics()
{
    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2010-08-01'
    ]);

    echo listMetrics($cloudWatchClient);
}

// Uncomment the following line to run this code in an AWS account.
// listTheMetrics();
```

## メトリクスに対するアラームを取得する
<a name="retrieve-alarms-for-a-metric"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function describeAlarmsForMetric(
    $cloudWatchClient,
    $metricName,
    $namespace,
    $dimensions
) {
    try {
        $result = $cloudWatchClient->describeAlarmsForMetric([
            'MetricName' => $metricName,
            'Namespace' => $namespace,
            'Dimensions' => $dimensions
        ]);

        $message = '';

        if (isset($result['@metadata']['effectiveUri'])) {
            $message .= 'At the effective URI of ' .
                $result['@metadata']['effectiveUri'] . ":\n\n";

            if (
                (isset($result['MetricAlarms'])) and
                (count($result['MetricAlarms']) > 0)
            ) {
                $message .= 'Matching alarms for ' . $metricName . ":\n\n";

                foreach ($result['MetricAlarms'] as $alarm) {
                    $message .= $alarm['AlarmName'] . "\n";
                }
            } else {
                $message .= 'No matching alarms found for ' . $metricName . '.';
            }
        } else {
            $message .= 'No matching alarms found for ' . $metricName . '.';
        }

        return $message;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function describeTheAlarmsForMetric()
{
    $metricName = 'BucketSizeBytes';
    $namespace = 'AWS/S3';
    $dimensions = [
        [
            'Name' => 'StorageType',
            'Value' => 'StandardStorage'
        ],
        [
            'Name' => 'BucketName',
            'Value' => 'amzn-s3-demo-bucket'
        ]
    ];

    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2010-08-01'
    ]);

    echo describeAlarmsForMetric(
        $cloudWatchClient,
        $metricName,
        $namespace,
        $dimensions
    );
}

// Uncomment the following line to run this code in an AWS account.
// describeTheAlarmsForMetric();
```

## メトリクスの統計情報を取得する
<a name="get-metric-statistics"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function getMetricStatistics(
    $cloudWatchClient,
    $namespace,
    $metricName,
    $dimensions,
    $startTime,
    $endTime,
    $period,
    $statistics,
    $unit
) {
    try {
        $result = $cloudWatchClient->getMetricStatistics([
            'Namespace' => $namespace,
            'MetricName' => $metricName,
            'Dimensions' => $dimensions,
            'StartTime' => $startTime,
            'EndTime' => $endTime,
            'Period' => $period,
            'Statistics' => $statistics,
            'Unit' => $unit
        ]);

        $message = '';

        if (isset($result['@metadata']['effectiveUri'])) {
            $message .= 'For the effective URI at ' .
                $result['@metadata']['effectiveUri'] . "\n\n";

            if (
                (isset($result['Datapoints'])) and
                (count($result['Datapoints']) > 0)
            ) {
                $message .= "Datapoints found:\n\n";

                foreach ($result['Datapoints'] as $datapoint) {
                    foreach ($datapoint as $key => $value) {
                        $message .= $key . ' = ' . $value . "\n";
                    }

                    $message .= "\n";
                }
            } else {
                $message .= 'No datapoints found.';
            }
        } else {
            $message .= 'No datapoints found.';
        }

        return $message;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function getTheMetricStatistics()
{
    // Average number of Amazon EC2 vCPUs every 5 minutes within
    // the past 3 hours.
    $namespace = 'AWS/Usage';
    $metricName = 'ResourceCount';
    $dimensions = [
        [
            'Name' => 'Service',
            'Value' => 'EC2'
        ],
        [
            'Name' => 'Resource',
            'Value' => 'vCPU'
        ],
        [
            'Name' => 'Type',
            'Value' => 'Resource'
        ],
        [
            'Name' => 'Class',
            'Value' => 'Standard/OnDemand'
        ]
    ];
    $startTime = strtotime('-3 hours');
    $endTime = strtotime('now');
    $period = 300; // Seconds. (5 minutes = 300 seconds.)
    $statistics = ['Average'];
    $unit = 'None';

    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2010-08-01'
    ]);

    echo getMetricStatistics(
        $cloudWatchClient,
        $namespace,
        $metricName,
        $dimensions,
        $startTime,
        $endTime,
        $period,
        $statistics,
        $unit
    );

    // Another example: average number of bytes of standard storage in the
    // specified Amazon S3 bucket each day for the past 3 days.

    /*
    $namespace = 'AWS/S3';
    $metricName = 'BucketSizeBytes';
    $dimensions = [
        [
            'Name' => 'StorageType',
            'Value'=> 'StandardStorage'
        ],
        [
            'Name' => 'BucketName',
            'Value' => 'amzn-s3-demo-bucket'
        ]
    ];
    $startTime = strtotime('-3 days');
    $endTime = strtotime('now');
    $period = 86400; // Seconds. (1 day = 86400 seconds.)
    $statistics = array('Average');
    $unit = 'Bytes';

    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2010-08-01'
    ]);

    echo getMetricStatistics($cloudWatchClient, $namespace, $metricName,
    $dimensions, $startTime, $endTime, $period, $statistics, $unit);
    */
}

// Uncomment the following line to run this code in an AWS account.
// getTheMetricStatistics();
```

# AWS SDK for PHP バージョン 3 を使用した Amazon CloudWatch でのカスタムメトリクスの発行
<a name="cw-examples-publishing-custom-metrics"></a>

メトリクスとは、システムのパフォーマンスに関するデータです。1 つのアラームで、指定した期間中、1 つのメトリクスを監視します。このアラームは、複数の期間にわたる一定のしきい値とメトリクスの値の関係性に基づき、1 つ以上のアクションを実行します。

以下の例では、次の方法を示しています。
+ [PutMetricData](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#putmetricdata) を使用したメトリクスデータの発行。
+ [PutMetricAlarm](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#putmetricalarm) を使用したアラームの作成。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## メトリクスデータを発行する
<a name="publish-metric-data"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function putMetricData(
    $cloudWatchClient,
    $cloudWatchRegion,
    $namespace,
    $metricData
) {
    try {
        $result = $cloudWatchClient->putMetricData([
            'Namespace' => $namespace,
            'MetricData' => $metricData
        ]);

        if (isset($result['@metadata']['effectiveUri'])) {
            if (
                $result['@metadata']['effectiveUri'] ==
                'https://monitoring.' . $cloudWatchRegion . '.amazonaws.com'
            ) {
                return 'Successfully published datapoint(s).';
            } else {
                return 'Could not publish datapoint(s).';
            }
        } else {
            return 'Error: Could not publish datapoint(s).';
        }
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function putTheMetricData()
{
    $namespace = 'MyNamespace';
    $metricData = [
        [
            'MetricName' => 'MyMetric',
            'Timestamp' => 1589228818, // 11 May 2020, 20:26:58 UTC.
            'Dimensions' => [
                [
                    'Name' => 'MyDimension1',
                    'Value' => 'MyValue1'

                ],
                [
                    'Name' => 'MyDimension2',
                    'Value' => 'MyValue2'
                ]
            ],
            'Unit' => 'Count',
            'Value' => 1
        ]
    ];

    $cloudWatchRegion = 'us-east-1';
    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => $cloudWatchRegion,
        'version' => '2010-08-01'
    ]);

    echo putMetricData(
        $cloudWatchClient,
        $cloudWatchRegion,
        $namespace,
        $metricData
    );
}

// Uncomment the following line to run this code in an AWS account.
// putTheMetricData();
```

## アラームの作成
<a name="create-an-alarm"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function putMetricAlarm(
    $cloudWatchClient,
    $cloudWatchRegion,
    $alarmName,
    $namespace,
    $metricName,
    $dimensions,
    $statistic,
    $period,
    $comparison,
    $threshold,
    $evaluationPeriods
) {
    try {
        $result = $cloudWatchClient->putMetricAlarm([
            'AlarmName' => $alarmName,
            'Namespace' => $namespace,
            'MetricName' => $metricName,
            'Dimensions' => $dimensions,
            'Statistic' => $statistic,
            'Period' => $period,
            'ComparisonOperator' => $comparison,
            'Threshold' => $threshold,
            'EvaluationPeriods' => $evaluationPeriods
        ]);

        if (isset($result['@metadata']['effectiveUri'])) {
            if (
                $result['@metadata']['effectiveUri'] ==
                'https://monitoring.' . $cloudWatchRegion . '.amazonaws.com'
            ) {
                return 'Successfully created or updated specified alarm.';
            } else {
                return 'Could not create or update specified alarm.';
            }
        } else {
            return 'Could not create or update specified alarm.';
        }
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function putTheMetricAlarm()
{
    $alarmName = 'my-ec2-resources';
    $namespace = 'AWS/Usage';
    $metricName = 'ResourceCount';
    $dimensions = [
        [
            'Name' => 'Type',
            'Value' => 'Resource'
        ],
        [
            'Name' => 'Resource',
            'Value' => 'vCPU'
        ],
        [
            'Name' => 'Service',
            'Value' => 'EC2'
        ],
        [
            'Name' => 'Class',
            'Value' => 'Standard/OnDemand'
        ]
    ];
    $statistic = 'Average';
    $period = 300;
    $comparison = 'GreaterThanThreshold';
    $threshold = 1;
    $evaluationPeriods = 1;

    $cloudWatchRegion = 'us-east-1';
    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => $cloudWatchRegion,
        'version' => '2010-08-01'
    ]);

    echo putMetricAlarm(
        $cloudWatchClient,
        $cloudWatchRegion,
        $alarmName,
        $namespace,
        $metricName,
        $dimensions,
        $statistic,
        $period,
        $comparison,
        $threshold,
        $evaluationPeriods
    );
}

// Uncomment the following line to run this code in an AWS account.
// putTheMetricAlarm();
```

# AWS SDK for PHP バージョン 3 を使用した Amazon CloudWatch Events へのイベントの送信
<a name="cw-examples-sending-events"></a>

CloudWatch Events では、Amazon Web Services (AWS) リソースの変更を記述した、システムイベントのほぼリアルタイムのストリーミングをさまざまなターゲットに配信します。簡単なルールを使用して、一致したイベントを 1 つ以上のターゲット関数またはストリームに振り分けることができます。

以下の例では、次の方法を示しています。
+ [PutRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-events-2015-10-07.html#putrule) を使用してルールを作成します。
+ [PutTargets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-events-2015-10-07.html#puttargets) を使用してルールにターゲットを追加します。
+ [PutEvents](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-events-2015-10-07.html#putevents) を使用した CloudWatch Events へのカスタムイベントの送信

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

## ルールの作成
<a name="create-a-rule"></a>

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new Aws\cloudwatchevents\cloudwatcheventsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2015-10-07'
]);

try {
    $result = $client->putRule([
        'Name' => 'DEMO_EVENT', // REQUIRED
        'RoleArn' => 'IAM_ROLE_ARN',
        'ScheduleExpression' => 'rate(5 minutes)',
        'State' => 'ENABLED',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## ルールにターゲットを追加する
<a name="add-targets-to-a-rule"></a>

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new Aws\cloudwatchevents\cloudwatcheventsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2015-10-07'
]);

try {
    $result = $client->putTargets([
        'Rule' => 'DEMO_EVENT', // REQUIRED
        'Targets' => [ // REQUIRED
            [
                'Arn' => 'LAMBDA_FUNCTION_ARN', // REQUIRED
                'Id' => 'myCloudWatchEventsTarget' // REQUIRED
            ],
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## カスタムイベントを送信する
<a name="send-custom-events"></a>

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new Aws\cloudwatchevents\cloudwatcheventsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2015-10-07'
]);

try {
    $result = $client->putEvents([
        'Entries' => [ // REQUIRED
            [
                'Detail' => '<string>',
                'DetailType' => '<string>',
                'Resources' => ['<string>'],
                'Source' => '<string>',
                'Time' => time()
            ],
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 での Amazon CloudWatch アラームによるアラームアクションの使用
<a name="cw-examples-using-alarm-actions"></a>

アラームアクションを使用して、Amazon EC2 インスタンスを自動的に停止、終了、再起動、または復旧するアラームを作成します。今後インスタンスを実行する必要がなくなったときに、停止または終了アクションを使用できます。再起動と復元アクションを使用して、自動的にそのインスタンスを再起動できます。

以下の例では、次の方法を示しています。
+ [EnableAlarmActions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#enablealarmactions) を使用して、指定したアラームのアクションを有効にします。
+ [DisableAlarmActions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#disablealarmactions) を使用して、指定したアラームのアクションを無効にします。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## アラームアクションの有効化
<a name="enable-alarm-actions"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function enableAlarmActions($cloudWatchClient, $alarmNames)
{
    try {
        $result = $cloudWatchClient->enableAlarmActions([
            'AlarmNames' => $alarmNames
        ]);

        if (isset($result['@metadata']['effectiveUri'])) {
            return 'At the effective URI of ' .
                $result['@metadata']['effectiveUri'] .
                ', actions for any matching alarms have been enabled.';
        } else {
            return'Actions for some matching alarms ' .
                'might not have been enabled.';
        }
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function enableTheAlarmActions()
{
    $alarmNames = array('my-alarm');

    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2010-08-01'
    ]);

    echo enableAlarmActions($cloudWatchClient, $alarmNames);
}

// Uncomment the following line to run this code in an AWS account.
// enableTheAlarmActions();
```

## アラームアクションの無効化
<a name="disable-alarm-actions"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\CloudWatch\CloudWatchClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
function disableAlarmActions($cloudWatchClient, $alarmNames)
{
    try {
        $result = $cloudWatchClient->disableAlarmActions([
            'AlarmNames' => $alarmNames
        ]);

        if (isset($result['@metadata']['effectiveUri'])) {
            return 'At the effective URI of ' .
                $result['@metadata']['effectiveUri'] .
                ', actions for any matching alarms have been disabled.';
        } else {
            return 'Actions for some matching alarms ' .
                'might not have been disabled.';
        }
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function disableTheAlarmActions()
{
    $alarmNames = array('my-alarm');

    $cloudWatchClient = new CloudWatchClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2010-08-01'
    ]);

    echo disableAlarmActions($cloudWatchClient, $alarmNames);
}

// Uncomment the following line to run this code in an AWS account.
// disableTheAlarmActions();
```

# AWS SDK for PHP バージョン 3 を使用した Amazon EC2 のコードサンプル
<a name="ec2-examples"></a>

Amazon Elastic Compute Cloud (Amazon EC2) は、クラウド内で仮想サーバーのホスティングを提供するウェブサービスです。規模を変更可能なコンピューティング性能を提供することによって、ウェブスケールのクラウドコンピューティングをデベロッパーが簡単に利用できるように設計されています。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

**Topics**
+ [認証情報](#examplecredentials)
+ [Amazon EC2 インスタンスの管理](ec2-examples-managing-instances.md)
+ [Elastic IP アドレスの使用](ec2-examples-using-elastic-ip-addresses.md)
+ [リージョンとアベイラビリティーゾーンの使用](ec2-examples-using-regions-and-zones.md)
+ [キーペアによる作業](ec2-examples-working-with-key-pairs.md)
+ [セキュリティグループを操作する](ec2-examples-using-security-groups.md)

# AWS SDK for PHP バージョン 3 を使用した Amazon EC2 インスタンスの管理
<a name="ec2-examples-managing-instances"></a>

以下の例では、次の方法を示しています。
+ [DescribeInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeinstances) を使用して Amazon EC2 インスタンスを記述します。
+ [MonitorInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#monitorinstances) を使用して、実行中のインスタンスの詳細モニタリングを有効にします。
+ [UnmonitorInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#unmonitorinstances) を使用して、実行中のインスタンスのモニタリングを無効にします。
+ [StartInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#startinstances) を使用して以前に停止した Amazon EBS-backed AMI を開始します。
+ [StopInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#stopinstances) を使用して Amazon EBS-backed インスタンスを停止します。
+ [RebootInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#rebootinstances) を使用して、1 つ以上のインスタンスの再起動をリクエストします。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## インスタンスの説明
<a name="describe-instances"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Ec2\Ec2Client;
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);
$result = $ec2Client->describeInstances();
echo "Instances: \n";
foreach ($result['Reservations'] as $reservation) {
    foreach ($reservation['Instances'] as $instance) {
        echo "InstanceId: {$instance['InstanceId']} - {$instance['State']['Name']} \n";
    }
}
```

## モニタリングを有効または無効にする
<a name="enable-and-disable-monitoring"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$instanceIds = ['InstanceID1', 'InstanceID2'];

$monitorInstance = 'ON';

if ($monitorInstance == 'ON') {
    $result = $ec2Client->monitorInstances([
        'InstanceIds' => $instanceIds
    ]);
} else {
    $result = $ec2Client->unmonitorInstances([
        'InstanceIds' => $instanceIds
    ]);
}

var_dump($result);
```

## インスタンスを起動または停止する
<a name="start-and-stop-an-instance"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$action = 'START';

$instanceIds = ['InstanceID1', 'InstanceID2'];

if ($action == 'START') {
    $result = $ec2Client->startInstances([
        'InstanceIds' => $instanceIds,
    ]);
} else {
    $result = $ec2Client->stopInstances([
        'InstanceIds' => $instanceIds,
    ]);
}

var_dump($result);
```

## インスタンスの再起動
<a name="reboot-an-instance"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$instanceIds = ['InstanceID1', 'InstanceID2'];

$result = $ec2Client->rebootInstances([
    'InstanceIds' => $instanceIds
]);

var_dump($result);
```

# AWS SDK for PHP バージョン 3 での Amazon EC2 での Elastic IP アドレスの使用
<a name="ec2-examples-using-elastic-ip-addresses"></a>

Elastic IP アドレスは、動的なクラウドコンピューティングのために設計された静的 IP アドレスです。Elastic IP アドレスは に関連付けられています AWS アカウント。これは、インターネットから到達可能なパブリック IP アドレスです。インスタンスにパブリック IP アドレスがない場合は、Elastic IP アドレスをインスタンスに関連付けて、インターネットとの通信を有効にできます。

以下の例では、次の方法を示しています。
+ [DescribeInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeinstances) を使用して、1 つ以上のインスタンスを記述します。
+ [AllocateAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#allocateaddress) を使用して、Elastic IP アドレスを取得します。
+ [AssociateAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#associateaddress) を使用して、Elastic IP アドレスをインスタンスに関連付けます。
+ [ReleaseAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#releaseaddress) を使用して、Elastic IP アドレスを解放します。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

## インスタンスを記述する
<a name="describe-an-instance"></a>

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Ec2\Ec2Client;
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);
$result = $ec2Client->describeInstances();
echo "Instances: \n";
foreach ($result['Reservations'] as $reservation) {
    foreach ($reservation['Instances'] as $instance) {
        echo "InstanceId: {$instance['InstanceId']} - {$instance['State']['Name']} \n";
    }
}
```

## アドレスを割り当てて関連付ける
<a name="allocate-and-associate-an-address"></a>

 **インポート** 

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$instanceId = 'InstanceID';

$allocation = $ec2Client->allocateAddress(array(
    'DryRun' => false,
    'Domain' => 'vpc',
));

$result = $ec2Client->associateAddress(array(
    'DryRun' => false,
    'InstanceId' => $instanceId,
    'AllocationId' => $allocation->get('AllocationId')
));

var_dump($result);
```

## アドレスを解放する
<a name="release-an-address"></a>

 **インポート** 

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$associationID = 'AssociationID';

$allocationID = 'AllocationID';

$result = $ec2Client->disassociateAddress([
    'AssociationId' => $associationID,
]);

$result = $ec2Client->releaseAddress([
    'AllocationId' => $allocationID,
]);

var_dump($result);
```

# AWS SDK for PHP バージョン 3 での Amazon EC2 のリージョンとアベイラビリティーゾーンの使用
<a name="ec2-examples-using-regions-and-zones"></a>

Amazon EC2 は、世界中の複数のロケーションでホスティングされています。これらの場所は、AWS リージョンとアベイラビリティーゾーンで構成されています。各リージョンは地理的に離れた領域です。1 つのリージョンには複数の独立したロケーションがあり、アベイラビリティーゾーンと呼ばれます。Amazon EC2 では、複数のロケーションにインスタンスとデータを配置することができます。

以下の例では、次の方法を示しています。
+ [DescribeAvailabilityZones](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeavailabilityzones) を使用して、ユーザーが利用可能なアベイラビリティーゾーンを記述します。
+ [DescribeRegions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeregions) を使用して、ユーザーが現在利用可能な AWS リージョンを記述します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## アベイラビリティーゾーンの詳細を表示する
<a name="describe-availability-zones"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->describeAvailabilityZones();

var_dump($result);
```

## リージョンの詳細を表示する
<a name="describe-regions"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->describeRegions();

var_dump($result);
```

# AWS SDK for PHP バージョン 3 を使用した Amazon EC2 キーペアでの作業
<a name="ec2-examples-working-with-key-pairs"></a>

Amazon EC2 は公開キー暗号化を使用し、ログイン情報の暗号化と復号を行います。パブリックキー暗号は、パブリックキーを使用してデータを暗号化します。次に、受取人はプライベートキーを使用してデータを復号化します。パブリックキーとプライベートキーは、キーペアと呼ばれます。

以下の例では、次の方法を示しています。
+ [CreateKeyPair](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#createkeypair) を使用した 2048 ビットの RSA キーペアの作成。
+ [DeleteKeyPair](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#deletekeypair) を使用した、指定キーペアの削除。
+ [DescribeKeyPairs](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describekeypairs) を使用した 1 つ以上のキーペアの記述。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## キーペアを作成する
<a name="create-a-key-pair"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$keyPairName = 'my-keypair';

$result = $ec2Client->createKeyPair(array(
    'KeyName' => $keyPairName
));

// Save the private key
$saveKeyLocation = getenv('HOME') . "/.ssh/{$keyPairName}.pem";
file_put_contents($saveKeyLocation, $result['keyMaterial']);

// Update the key's permissions so it can be used with SSH
chmod($saveKeyLocation, 0600);
```

## キーペアの削除
<a name="delete-a-key-pair"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$keyPairName = 'my-keypair';

$result = $ec2Client->deleteKeyPair(array(
    'KeyName' => $keyPairName
));

var_dump($result);
```

## キーペアの記述
<a name="describe-key-pairs"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->describeKeyPairs();

var_dump($result);
```

# AWS SDK for PHP バージョン 3 を使用した Amazon EC2 のセキュリティグループでの作業
<a name="ec2-examples-using-security-groups"></a>

Amazon EC2 セキュリティグループは、1 つ以上のインスタンスのトラフィックを制御する仮想ファイアウォールとして機能します。各セキュリティグループに対してルールを追加し、関連付けられたインスタンスに対するトラフィックを許可します。セキュリティグループのルールはいつでも変更できます。新しいルールは、セキュリティグループに関連付けられたすべてのインスタンスに自動的に適用されます。

以下の例では、次の方法を示しています。
+ [DescribeSecurityGroups](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describesecuritygroups) を使用して、1 つ以上のセキュリティグループを記述します。
+ [AuthorizeSecurityGroupIngress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#authorizesecuritygroupingress) を使用して、セキュリティグループに進入ルールを追加します。
+ [CreateSecurityGroup](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#createsecuritygroup) を使用して、セキュリティグループを作成します。
+ [DeleteSecurityGroup](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#deletesecuritygroup) を使用して、セキュリティグループを削除します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## セキュリティグループを記述する
<a name="describe-security-groups"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->describeSecurityGroups();

var_dump($result);
```

## 進入ルールを追加する
<a name="add-an-ingress-rule"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->authorizeSecurityGroupIngress(array(
    'GroupName' => 'string',
    'SourceSecurityGroupName' => 'string'
));

var_dump($result);
```

## セキュリティグループの作成
<a name="create-a-security-group"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

// Create the security group
$securityGroupName = 'my-security-group';
$result = $ec2Client->createSecurityGroup(array(
    'GroupId' => $securityGroupName,

));

// Get the security group ID (optional)
$securityGroupId = $result->get('GroupId');

echo "Security Group ID: " . $securityGroupId . '\n';
```

## セキュリティグループを削除する
<a name="delete-a-security-group"></a>

 **インポート**。

```
require 'vendor/autoload.php';
```

 **サンプルコード** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$securityGroupId = 'my-security-group-id';

$result = $ec2Client->deleteSecurityGroup([
    'GroupId' => $securityGroupId
]);

var_dump($result);
```

# AWS SDK for PHP バージョン 3 を使用して Amazon OpenSearch サービスの検索リクエストに署名する
<a name="service_es-data-plane"></a>

Amazon OpenSearch Serviceは、一般的なオープンソースの検索および分析エンジンである Amazon OpenSearch Service のデプロイ、運用、およびスケーリングを容易にするマネージドサービスです。OpenSearch サービスは Amazon OpenSearch サービス API への直接アクセスを提供します。つまり、開発者は使い慣れたツール、および堅牢なセキュリティオプションを使用できます。Amazon OpenSearch Service のクライアントの多くでリクエスト署名がサポートされていますが、サポートされていないクライアントを使用している場合に、AWS SDK for PHP の組み込み認証情報プロバイダと署名者を使用して任意の PSR-7 リクエストに署名できます。

以下の例では、次の方法を示しています。
+ [SignatureV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Signature.SignatureV4.html#_signRequest) を使用して、AWS 署名プロトコルでリクエストに署名します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## OpenSearch Service リクエストの署名
<a name="signing-an-es-request"></a>

OpenSearch Service は、[Signature バージョン 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) を使用します。つまり、サービスの署名 (この場合は `es`) と OpenSearch Service ドメインの リージョンに対するリクエストに署名する必要があります。OpenSearch Service でサポートされているリージョンの一覧については、AWS の「Amazon Web Services 全般のリファレンスAWS のリージョンとエンドポイント」を参照してください。ただし、次の例では、`us-west-2` リージョンにある OpenSearch Service ドメインに対するリクエストに署名します。

必要な認証情報を指定するには、SDK のデフォルトプロバイダーチェーンを使用するか、「[AWS SDK for PHP バージョン 3 の認証情報](guide_credentials.md)」に記載されている任意の形式の認証情報を使用することができます。また、[PSR-7 リクエスト](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Psr.Http.Message.RequestInterface.html) (次のコードでは、`$psr7Request` という名前を想定) も必要になります。

```
// Pull credentials from the default provider chain
$provider = Aws\Credentials\CredentialProvider::defaultProvider();
$credentials = call_user_func($provider)->wait();

// Create a signer with the service's signing name and Region
$signer = new Aws\Signature\SignatureV4('es', 'us-west-2');

// Sign your request
$signedRequest = $signer->signRequest($psr7Request, $credentials);
```

# AWS Identity and Access Management バージョン 3 を使用した AWS SDK for PHP の例
<a name="iam-examples"></a>

AWS Identity and Access Management (IAM) は、Amazon Web Services のお客様が でユーザーとユーザーの許可を管理できるようにするウェブサービスです。AWSこのサービスは、複数のユーザーまたはシステムがクラウドで AWS 製品を使用する組織を対象としています。IAM を使用すると、ユーザー、セキュリティ認証情報 (アクセスキーなど)、およびユーザーがアクセスできる AWS リソースを制御する許可を集中管理できます。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

**Topics**
+ [認証情報](#examplecredentials)
+ [IAM アクセスキーの管理](iam-examples-managing-access-keys.md)
+ [IAM ユーザーの管理](iam-examples-managing-users.md)
+ [IAM アカウントエイリアスの使用](iam-examples-using-account-aliases.md)
+ [IAMポリシーの操作](iam-examples-working-with-policies.md)
+ [IAMサーバー証明書の操作](iam-examples-working-with-certs.md)

# AWS SDK for PHP バージョン 3 での IAM アクセスキーの管理
<a name="iam-examples-managing-access-keys"></a>

ユーザーがプログラムで AWS を呼び出すには、独自のアクセスキーが必要です。このニーズを満たすために、IAM ユーザーのアクセスキー (アクセスキー ID およびシークレットアクセスキー) を作成、修正、表示、および更新できます。デフォルトでは、アクセスキーを作成したときのステータスが [Active] です。これは、ユーザーが API 呼び出しにそのアクセスキーを使用できることを意味します。

以下の例では、次の方法を示しています。
+ [CreateAccessKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#createaccesskey) を使用した、シークレットアクセスキーと対応するアクセスキー ID の作成。
+ [ListAccessKeys](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#listaccesskeys) を使用した、IAM ユーザーに関連付けられたアクセスキー ID に関する情報の取得。
+ [GetAccessKeyLastUsed](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#getaccesskeylastused) を使用した、アクセスキーの最終使用日時に関する情報の取得。
+ [UpdateAccessKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#updateaccesskey) を使用した、アクセスキーのステータスの変更 (アクティブから非アクティブまたはその逆)。
+ [DeleteAccessKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteaccesskey) を使用した、IAM ユーザーに関連付けられたアクセスキーペアの削除。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## アクセスキーの作成
<a name="create-an-access-key"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->createAccessKey([
        'UserName' => 'IAM_USER_NAME',
    ]);
    $keyID = $result['AccessKey']['AccessKeyId'];
    $createDate = $result['AccessKey']['CreateDate'];
    $userName = $result['AccessKey']['UserName'];
    $status = $result['AccessKey']['Status'];
    // $secretKey = $result['AccessKey']['SecretAccessKey']
    echo "<p>AccessKey " . $keyID . " created on " . $createDate . "</p>";
    echo "<p>Username: " . $userName . "</p>";
    echo "<p>Status: " . $status . "</p>";
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## アクセスキーの一覧表示
<a name="list-access-keys"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->listAccessKeys();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## アクセスキーの前回使用時情報の取得
<a name="get-information-about-an-access-key-s-last-use"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->getAccessKeyLastUsed([
        'AccessKeyId' => 'ACCESS_KEY_ID', // REQUIRED
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## アクセスキーの更新
<a name="update-an-access-key"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->updateAccessKey([
        'AccessKeyId' => 'ACCESS_KEY_ID', // REQUIRED
        'Status' => 'Inactive', // REQUIRED
        'UserName' => 'IAM_USER_NAME',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## アクセスキーの削除
<a name="delete-an-access-key"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->deleteAccessKey([
        'AccessKeyId' => 'ACCESS_KEY_ID', // REQUIRED
        'UserName' => 'IAM_USER_NAME',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 での IAM ユーザーの管理
<a name="iam-examples-managing-users"></a>

IAM ユーザーは AWS で作成するエンティティであり、AWS とやり取りするためにこれを使用する人またはサービスを表します。AWS のユーザーは名前と認証情報で構成されます。

以下の例では、次の方法を示しています。
+ [CreateUser](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#createuser) を使用して新しい IAM ユーザーを作成する
+ [ListUsers](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#listusers) を使用して IAM ユーザーのリストを取得する
+ [UpdateUser](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#updateuser) を使用して IAM ユーザーを更新する
+ [GetUser](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#getuser) を使用して IAM ユーザーに関する情報を取得する
+ [DeleteUser](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteuser) を使用して IAM ユーザーを削除する

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## IAM ユーザーを作成する
<a name="create-an-iam-user"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->createUser(array(
        // UserName is required
        'UserName' => 'string',
    ));
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## IAM ユーザーのリストを取得する
<a name="list-iam-users"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->listUsers();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## IAM ユーザーを更新する
<a name="update-an-iam-user"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->updateUser([
        // UserName is required
        'UserName' => 'string1',
        'NewUserName' => 'string'
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## IAM ユーザーに関する情報を取得する
<a name="get-information-about-an-iam-user"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->getUser([
        'UserName' => 'string',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## IAM ユーザーを削除する
<a name="delete-an-iam-user"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->deleteUser([
        // UserName is required
        'UserName' => 'string'
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 での アカウントエイリアスの使用
<a name="iam-examples-using-account-aliases"></a>

サインインページの URL に、AWS アカウント ID ではなく企業の名前または他のわかりやすい識別子を含めるには、AWS アカウント ID のエイリアスを作成します。AWS アカウント エイリアスを作成すると、サインインページの URL は変更され、エイリアスが組み込まれます。

以下の例では、次の方法を示しています。
+ [CreateAccountAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#createaccountalias) を使用してエイリアスを作成します。
+ [ListAccountAliases](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#listaccountaliases) を使用して、AWS アカウント に関連付けられているエイリアスのリストを取得します。
+ [DeleteAccountAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteaccountalias) を使用してエイリアスを削除します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## エイリアスの作成
<a name="create-an-alias"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->createAccountAlias(array(
        // AccountAlias is required
        'AccountAlias' => 'string',
    ));
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## アカウントエイリアスの一覧表示
<a name="list-account-aliases"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->listAccountAliases();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## エイリアスを削除する
<a name="delete-an-alias"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->deleteAccountAlias([
        // AccountAlias is required
        'AccountAlias' => 'string',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 での IAM ポリシーの使用
<a name="iam-examples-working-with-policies"></a>

ポリシーを作成することによって、ユーザーにアクセス許可を付与します。ポリシーとは、ユーザーが実行できるアクションと、そのアクションが影響を与えるリソースの一覧が記載されているドキュメントです。デフォルトでは、明示的に許可されていないアクションやリソースはすべて拒否されます。ポリシーを作成して、ユーザー、ユーザーのグループ、ユーザーが引き受けるロール、およびリソースにアタッチできます。

以下の例では、次の方法を示しています。
+ [CreatePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#createpolicy) を使用して管理ポリシーを作成する
+ [AttachRolePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#attachrolepolicy) を使用してポリシーをロールにアタッチする
+ [AttachUserPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#attachuserpolicy) を使用してポリシーをユーザーにアタッチする
+ [AttachGroupPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#attachgrouppolicy) を使用してポリシーをグループにアタッチする
+ [DetachRolePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#detachrolepolicy) を使用してロールポリシーを削除する
+ [DetachUserPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#detachuserpolicy) を使用してユーザーポリシーを削除する
+ [DetachGroupPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#detachgrouppolicy) を使用してグループポリシーを削除する
+ [DeletePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deletepolicy) を使用して管理ポリシーを削除する
+ [DeleteRolePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleterolepolicy) を使用してロールポリシーを削除する
+ [DeleteUserPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteuserpolicy) を使用してユーザーポリシーを削除する
+ [DeleteGroupPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deletegrouppolicy) を使用してグループポリシーを削除する

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## ポリシーの作成
<a name="create-a-policy"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

$myManagedPolicy = '{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "RESOURCE_ARN"
        },
        {
            "Effect": "Allow",
            "Action": [
            "dynamodb:DeleteItem",
            "dynamodb:GetItem",
            "dynamodb:PutItem",
            "dynamodb:Scan",
            "dynamodb:UpdateItem"
        ],
            "Resource": "RESOURCE_ARN"
        }
    ]
}';

try {
    $result = $client->createPolicy(array(
        // PolicyName is required
        'PolicyName' => 'myDynamoDBPolicy',
        // PolicyDocument is required
        'PolicyDocument' => $myManagedPolicy
    ));
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## ポリシーをロールにアタッチする
<a name="attach-a-policy-to-a-role"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

$roleName = 'ROLE_NAME';

$policyName = 'AmazonDynamoDBFullAccess';

$policyArn = 'arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess';

try {
    $attachedRolePolicies = $client->getIterator('ListAttachedRolePolicies', ([
        'RoleName' => $roleName,
    ]));
    if (count($attachedRolePolicies) > 0) {
        foreach ($attachedRolePolicies as $attachedRolePolicy) {
            if ($attachedRolePolicy['PolicyName'] == $policyName) {
                echo $policyName . " is already attached to this role. \n";
                exit();
            }
        }
    }
    $result = $client->attachRolePolicy(array(
        // RoleName is required
        'RoleName' => $roleName,
        // PolicyArn is required
        'PolicyArn' => $policyArn
    ));
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## ポリシーをユーザーにアタッチします
<a name="attach-a-policy-to-a-user"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

$userName = 'USER_NAME';

$policyName = 'AmazonDynamoDBFullAccess';

$policyArn = 'arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess';

try {
    $attachedUserPolicies = $client->getIterator('ListAttachedUserPolicies', ([
        'UserName' => $userName,
    ]));
    if (count($attachedUserPolicies) > 0) {
        foreach ($attachedUserPolicies as $attachedUserPolicy) {
            if ($attachedUserPolicy['PolicyName'] == $policyName) {
                echo $policyName . " is already attached to this role. \n";
                exit();
            }
        }
    }
    $result = $client->attachUserPolicy(array(
        // UserName is required
        'UserName' => $userName,
        // PolicyArn is required
        'PolicyArn' => $policyArn,
    ));
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## グループにポリシーをアタッチする
<a name="attach-a-policy-to-a-group"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->attachGroupPolicy(array(
        // GroupName is required
        'GroupName' => 'string',
        // PolicyArn is required
        'PolicyArn' => 'string',
    ));
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## ユーザーポリシーをデタッチする
<a name="detach-a-user-policy"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->detachUserPolicy([
        // UserName is required
        'UserName' => 'string',
        // PolicyArn is required
        'PolicyArn' => 'string',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## グループポリシーをデタッチする
<a name="detach-a-group-policy"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->detachGroupPolicy([
        // GroupName is required
        'GroupName' => 'string',
        // PolicyArn is required
        'PolicyArn' => 'string',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## ポリシーの削除
<a name="delete-a-policy"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->deletePolicy(array(
        // PolicyArn is required
        'PolicyArn' => 'string'
    ));
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## ロールポリシーを削除
<a name="delete-a-role-policy"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->deleteRolePolicy([
        // RoleName is required
        'RoleName' => 'string',
        // PolicyName is required
        'PolicyName' => 'string'
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## ユーザーポリシーを削除する
<a name="delete-a-user-policy"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->deleteUserPolicy([
        // UserName is required
        'UserName' => 'string',
        // PolicyName is required
        'PolicyName' => 'string',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## グループポリシーを削除する
<a name="delete-a-group-policy"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->deleteGroupPolicy(array(
        // GroupName is required
        'GroupName' => 'string',
        // PolicyName is required
        'PolicyName' => 'string',
    ));
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 での サーバー証明書の使用
<a name="iam-examples-working-with-certs"></a>

AWS でウェブサイトまたはアプリケーションへの HTTPS 接続を有効にするには、SSL/TLS サーバー証明書が必要です。外部プロバイダーから取得した証明書を AWS でウェブサイトまたはアプリケーションで使用するには、証明書を IAM にアップロードするか、AWS Certificate Manager にインポートする必要があります。

以下の例では、次の方法を示しています。
+ [ListServerCertificates](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#listservercertificates) を使用して、IAM に保存されている証明書のリストを取得します。
+ [GetServerCertificate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#getservercertificate) を使用して証明書に関する情報を取得する
+ [UpdateServerCertificate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#updateservercertificate) を使用して証明書を更新する
+ [DeleteServerCertificate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteservercertificate) を使用して証明書を削除する

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## サーバー証明書の一覧表示
<a name="list-server-certificates"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->listServerCertificates();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## サーバー証明書を取得する
<a name="retrieve-a-server-certificate"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->getServerCertificate([
        // ServerCertificateName is required
        'ServerCertificateName' => 'string',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## サーバー証明書の更新
<a name="update-a-server-certificate"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->updateServerCertificate([
        // ServerCertificateName is required
        'ServerCertificateName' => 'string',
        'NewServerCertificateName' => 'string',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## サーバー証明書の削除
<a name="delete-a-server-certificate"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Iam\IamClient;
```

 **サンプルコード** 

```
$client = new IamClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2010-05-08'
]);

try {
    $result = $client->deleteServerCertificate([
        // ServerCertificateName is required
        'ServerCertificateName' => 'string',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS Key Management Service バージョン 3 を使用した AWS SDK for PHP の例
<a name="kms-examples"></a>

AWS Key Management Service (AWS KMS) は、データの暗号化に使用される暗号化キーの作成と管理を容易にするマネージド型サービスです。AWS KMS に関する詳細は、[Amazon KMS ドキュメント](https://aws.amazon.com/documentation/kms/)を参照してください。セキュア PHP のアプリケーションを作成しているか、他の AWS サービスにデータを送信しているかにかかわらず、AWS KMS を使用すると、キーを使用できるユーザー、および暗号化されたデータにアクセスできるユーザーを制御できます。

AWS SDK for PHP バージョン 3 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

**Topics**
+ [キーの使用](kms-example-keys.md)
+ [データキーの暗号化と復号](kms-example-encrypt.md)
+ [キーポリシーの使用](kms-example-key-policy.md)
+ [許可の使用](kms-example-grants.md)
+ [エイリアスの使用](kms-example-alias.md)

# AWS KMS API と AWS SDK for PHP バージョン 3 を使用したキーの操作
<a name="kms-example-keys"></a>

 AWS Key Management Service (AWS KMS) のプライマリリソースは です[AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)。KMS キーを使用してデータを暗号化できます。

以下の例では、次の方法を示しています。
+ [CreateKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#createkey) を使用してカスタマー KMS キーを作成する。
+ [GenerateDataKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#generatedatakey) を使用してデータキーを生成する。
+ [DescribeKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#describekey) を使用して KMS キーを表示する。
+ [ListKeys](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#listkeys) を使用して KMS キーのキー ID とキー ARN を取得する
+ [EnableKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#enablekey) を使用して KMS キーを有効にする。
+ [DisableKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#disablekey) を使用して KMS キーを無効にする

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

 AWS Key Management Service (AWS KMS) の使用の詳細については、「 [AWS KMS デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/)」を参照してください。

## KMS キーを作成する
<a name="create-a-cmk"></a>

[KMS キー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)を作成するには、[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

//Creates a customer master key (CMK) in the caller's AWS account.
$desc = "Key for protecting critical data";

try {
    $result = $KmsClient->createKey([
        'Description' => $desc,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## データキーを生成する
<a name="generate-a-data-key"></a>

データ暗号化キーを生成するには、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) オペレーションを使用します。このオペレーションでは、作成されるデータキーのプレーンテキストおよび暗号化されたコピーが返されます。データキーを生成する AWS KMS key を指定します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$keySpec = 'AES_256';

try {
    $result = $KmsClient->generateDataKey([
        'KeyId' => $keyId,
        'KeySpec' => $keySpec,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## KMS キーを表示する
<a name="view-a-cmk"></a>

KMS キーの Amazon リソースネーム (ARN) および[キーの状態](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)を含む KMS キーについての詳細を取得するには、[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) オペレーションを使用します。

 `DescribeKey` はエイリアスを取得しません。エイリアスを取得するには、 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

try {
    $result = $KmsClient->describeKey([
        'KeyId' => $keyId,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## KMS キーのキー ID およびキー ARN を取得する
<a name="get-the-key-id-and-key-arns-of-a-cmk"></a>

KMS キーの ID と ARN を取得するには、[ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$limit = 10;

try {
    $result = $KmsClient->listKeys([
        'Limit' => $limit,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## KMS キーを有効にする
<a name="enable-a-cmk"></a>

無効になっている KMS キーを有効にするには、[EnableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKey.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

try {
    $result = $KmsClient->enableKey([
        'KeyId' => $keyId,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## KMS キーを無効にする
<a name="disable-a-cmk"></a>

KMS キーを無効にするには、[DisableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html) オペレーションを使用します。KMS キーを無効にすると、使用されなくなります。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

try {
    $result = $KmsClient->disableKey([
        'KeyId' => $keyId,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 を使用した AWS KMS データキーの暗号化と復号
<a name="kms-example-encrypt"></a>

データキーは、大量のデータや他のデータ暗号化キーといったデータを暗号化するための暗号化キーです。

 AWS Key Management Serviceの (AWS KMS) を使用して、データキー[AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)を生成、暗号化、復号できます。

以下の例では、次の方法を示しています。
+ [Encrypt](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#encrypt) を使用してデータキーを暗号化する。
+ [Decrypt](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#decrypt) を使用してデータキーを復号化する。
+ [ReEncrypt](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#reencrypt) を使用して新しい KMS キーでデータキーを再暗号化します。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

 AWS Key Management Service (AWS KMS) の使用の詳細については、「 [AWS KMS デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/)」を参照してください。

## 暗号化
<a name="encrypt"></a>

[Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) オペレーションは、データキーを暗号化するように設計されていますが、頻繁には使用されていません。[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) および [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) オペレーションは、暗号化されたデータキーを返します。暗号化されたデータを新しい AWS リージョンに移動し、その新しいリージョンで KMS キーを使用してデータキーを暗号化するときに `Encypt` メソッドを使用できます。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$message = pack('c*', 1, 2, 3, 4, 5, 6, 7, 8, 9, 0);

try {
    $result = $KmsClient->encrypt([
        'KeyId' => $keyId,
        'Plaintext' => $message,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Decrypt
<a name="decrypt"></a>

データキーを復号するには、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを使用します。

指定する `ciphertextBlob` は、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、または [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) レスポンスからの `CiphertextBlob` フィールド値である必要があります。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$ciphertext = 'Place your cipher text blob here';

try {
    $result = $KmsClient->decrypt([
        'CiphertextBlob' => $ciphertext,
    ]);
    $plaintext = $result['Plaintext'];
    var_dump($plaintext);
} catch (AwsException $e) {
    // Output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 再暗号化
<a name="reencrypt"></a>

暗号化されたデータキーを復号し、続いてすぐに異なる KMS キーでデータキーを再暗号化するには、[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) オペレーションを使用します。オペレーションは内部のサーバー側で完全に実行されるため AWS KMS、プレーンテキストが外部に公開されることはありません AWS KMS。

指定する `ciphertextBlob` は、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、または [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) レスポンスからの `CiphertextBlob` フィールド値である必要があります。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$ciphertextBlob = 'Place your cipher text blob here';

try {
    $result = $KmsClient->reEncrypt([
        'CiphertextBlob' => $ciphertextBlob,
        'DestinationKeyId' => $keyId,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 を使用した AWS KMS キーポリシーの操作
<a name="kms-example-key-policy"></a>

[AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) の作成時に、KMS キーを使用および管理できるユーザーを決定します。これらのアクセス許可は、キーポリシーと呼ばれるドキュメントに含まれます。キーポリシーを使用して、カスタマーマネージド KMS キーのアクセス許可をいつでも追加、削除、または変更できますが、 AWS マネージド KMS キーのキーポリシーを編集することはできません。詳細については、「[AWS KMSに対する認証とアクセスコントロール](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [ListKeyPolicies](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#listkeypolicies) を使用してキーポリシーの名前をリストする。
+ [GetKeyPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#getkeypolicy) を使用してキーポリシーを取得する。
+ [PutKeyPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#putkeypolicy) を使用してキーポリシーを設定する。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

 AWS Key Management Service (AWS KMS) の使用の詳細については、「 [AWS KMS デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/)」を参照してください。

## すべてのキーポリシーをリストする
<a name="list-all-key-policies"></a>

KMS キーのキーポリシーの名前を取得するには、`ListKeyPolicies` オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$limit = 10;

try {
    $result = $KmsClient->listKeyPolicies([
        'KeyId' => $keyId,
        'Limit' => $limit,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## キーポリシーを取得する
<a name="retrieve-a-key-policy"></a>

KMS キーのキーポリシーを取得するには、`GetKeyPolicy` オペレーションを使用します。

 `GetKeyPolicy` では、ポリシー名が必要です。KMS キーを作成したときにキーポリシーを作成した場合を除き、唯一の有効なポリシー名は default です。[デフォルトキーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)の詳細については、*AWS Key Management Service 開発者ガイド*をご覧ください。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$policyName = "default";

try {
    $result = $KmsClient->getKeyPolicy([
        'KeyId' => $keyId,
        'PolicyName' => $policyName
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## キーポリシーを設定する
<a name="set-a-key-policy"></a>

KMS キーのキーポリシーを作成または変更するには、`PutKeyPolicy` オペレーションを使用します。

 `PutKeyPolicy` では、ポリシー名が必要です。KMS キーを作成したときにキーポリシーを作成した場合を除き、唯一の有効なポリシー名は default です。[デフォルトキーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)の詳細については、*AWS Key Management Service 開発者ガイド*をご覧ください。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$policyName = "default";

try {
    $result = $KmsClient->putKeyPolicy([
        'KeyId' => $keyId,
        'PolicyName' => $policyName,
        'Policy' => '{ 
            "Version":"2012-10-17",		 	 	  
            "Id": "custom-policy-2016-12-07", 
            "Statement": [ 
                { "Sid": "Enable IAM User Permissions", 
                "Effect": "Allow", 
                "Principal": 
                   { "AWS": "arn:aws:iam::111122223333:user/root" }, 
                "Action": [ "kms:*" ], 
                "Resource": "*" }, 
                { "Sid": "Enable IAM User Permissions", 
                "Effect": "Allow", 
                "Principal":                 
                   { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, 
                "Action": [
                    "kms:Encrypt*",
                    "kms:GenerateDataKey*",
                    "kms:Decrypt*",
                    "kms:DescribeKey*",
                    "kms:ReEncrypt*"
                ], 
                "Resource": "*" }                 
            ]            
        } '
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# AWS KMS API と AWS SDK for PHP バージョン 3 を使用した許可の使用
<a name="kms-example-grants"></a>

許可は、アクセス許可を付与するための別のメカニズムです。キーポリシーに代わるものです。権限を使用して、 AWS プリンシパルが AWS Key Management Service (AWS KMS) カスタマー管理の を使用できるようにする長期的なアクセスを許可できます[AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)。詳細については、*AWS Key Management Service デベロッパーガイド*の「[AWS KMSに付与する](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [CreateGrant](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#creategrant) を使用して KMS キーに対するグラントを作成する。
+ [ListGrants](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#listgrants) を使用して KMS キーの許可を表示する。
+ [RetireGrant](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#retiregrant) を使用して KMS キーの許可を無効にする。
+ [RevokeGrant](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#revokegrant) を使用して KMS キーの許可を取り消す。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

 AWS Key Management Service (AWS KMS) の使用の詳細については、「 [AWS KMS デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/)」を参照してください。

## 許可を作成する
<a name="create-a-grant"></a>

の許可を作成するには AWS KMS key、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$granteePrincipal = "arn:aws:iam::111122223333:user/Alice";
$operation = ['Encrypt', 'Decrypt']; // A list of operations that the grant allows.

try {
    $result = $KmsClient->createGrant([
        'GranteePrincipal' => $granteePrincipal,
        'KeyId' => $keyId,
        'Operations' => $operation
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 許可を表示する
<a name="view-a-grant"></a>

の許可に関する詳細情報を取得するには AWS KMS key、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$limit = 10;

try {
    $result = $KmsClient->listGrants([
        'KeyId' => $keyId,
        'Limit' => $limit,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 許可を無効にする
<a name="retire-a-grant"></a>

の許可を廃止するには AWS KMS key、[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) オペレーションを使用します。許可の使用が完了した後でクリーンアップを実行する場合に、許可を無効にします。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$grantToken = 'Place your grant token here';

try {
    $result = $KmsClient->retireGrant([
        'GrantToken' => $grantToken,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}

//Can also identify grant to retire by a combination of the grant ID
//and the Amazon Resource Name (ARN) of the customer master key (CMK)
$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$grantId = 'Unique identifier of the grant returned during CreateGrant operation';

try {
    $result = $KmsClient->retireGrant([
        'GrantId' => $grantToken,
        'KeyId' => $keyId,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 許可を取り消す
<a name="revoke-a-grant"></a>

への許可を取り消すには AWS KMS key、[RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) オペレーションを使用します。許可を取り消して、許可に依存しているオペレーションを明示的に拒否することができます。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$grantId = "grant1";

try {
    $result = $KmsClient->revokeGrant([
        'KeyId' => $keyId,
        'GrantId' => $grantId,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# AWS KMS API と AWS SDK for PHP バージョン 3 を使用したエイリアスの操作
<a name="kms-example-alias"></a>

AWS Key Management Service (AWS KMS) は、エイリアス[AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)と呼ばれる のオプションの表示名を提供します。

以下の例では、次の方法を示しています。
+ [CreateAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#createalias) を使用してエイリアスを作成する。
+ [ListAliases](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#listaliases) を使用してエイリアスを表示する。
+ [UpdateAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#updatealias) を使用してエイリアスを更新する。
+ [DeleteAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#deletealias) を使用してエイリアスを削除する。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

 AWS Key Management Service (AWS KMS) の使用の詳細については、「 [AWS KMS デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/)」を参照してください。

## エイリアスの作成
<a name="create-an-alias"></a>

KMS キーのエイリアスを作成するには、[CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) オペレーションを使用します。エイリアスは、アカウントと AWS リージョンで一意である必要があります。既にエイリアスがある KMS キー用にエイリアスを作成した場合、`CreateAlias` によって同じ KMS キーに対して別のエイリアスが作成されます。既存のエイリアスは置き換えられません。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$aliasName = "alias/projectKey1";

try {
    $result = $KmsClient->createAlias([
        'AliasName' => $aliasName,
        'TargetKeyId' => $keyId,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## エイリアスを表示する
<a name="view-an-alias"></a>

発信者の AWS アカウント および のすべてのエイリアスを一覧表示するには AWS リージョン、[ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$limit = 10;

try {
    $result = $KmsClient->listAliases([
        'Limit' => $limit,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## エイリアスを更新する
<a name="update-an-alias"></a>

既存のエイリアスを別の KMS キーに関連付けるには、[UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';
$aliasName = "alias/projectKey1";

try {
    $result = $KmsClient->updateAlias([
        'AliasName' => $aliasName,
        'TargetKeyId' => $keyId,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## エイリアスを削除する
<a name="delete-an-alias"></a>

エイリアスを削除するには、 [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html) オペレーションを使用します。エイリアスを削除しても、基になる KMS キーに影響はありません。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$KmsClient = new Aws\Kms\KmsClient([
    'profile' => 'default',
    'version' => '2014-11-01',
    'region' => 'us-east-2'
]);

$aliasName = "alias/projectKey1";

try {
    $result = $KmsClient->deleteAlias([
        'AliasName' => $aliasName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 を使用した Amazon Kinesis のコード例
<a name="kinesis-examples"></a>

Amazon Kinesis は、データをリアルタイムで収集、処理、分析する AWS サービスです。Amazon Kinesis Data Streams でデータストリームを設定するか、Amazon Data Firehose を使用して Amazon S3、OpenSearch Service、Amazon Redshift、Splunk にデータを送信します。

Kinesis の詳細については、[Amazon Kinesis のドキュメント](https://docs.aws.amazon.com/kinesis/index.html)を参照してください。

AWS SDK for PHP バージョン 3 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

**Topics**
+ [Kinesis Data Streams](kinesis-example-data-stream.md)
+ [Kinesis シャード](kinesis-example-shard.md)
+ [Kinesis Data Firehose 配信ストリーム](kinesis-firehose-example-delivery-stream.md)

# Kinesis Data Streams API と AWS SDK for PHP バージョン 3 を使用したデータストリームの作成
<a name="kinesis-example-data-stream"></a>

Amazon Kinesis Data Streams では、リアルタイムデータを送信できます。Kinesis Data Streams を使用して、データを追加するたびに設定された送信先にデータを配信するデータプロデューサーを作成します。

詳細については、「Amazon Kinesis デベロッパーガイド」の「[ストリームの作成と管理](https://docs.aws.amazon.com/kinesis/latest/dev/working-with-streams.html.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [CreateAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#createstream) を使用してデータストリームを作成する。
+ [DescribeStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#describestream) を使用して 1 つのデータストリームの詳細を取得する。
+ [ListStreams](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#liststreams) を使用して既存のデータストリームをリストする。
+ [PutRecord](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#putrecord) を使用して既存のデータストリームにデータを送信する。
+ [DeleteStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#deletestream) を使用してデータストリームを削除する。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

「Amazon Kinesis デベロッパーガイド」の使用に関する詳細については、「[Amazon Kinesis Data Streams デベロッパーガイド](https://docs.aws.amazon.com/kinesis/latest/dev/)」を参照してください。

## Kinesis Data Streams を使用したデータストリームの作成
<a name="create-a-data-stream-using-a-ak-data-stream"></a>

次のコード例を使用して、Kinesis によって処理される情報を送信できる Kinesis データストリームを確立します。「Amazon Kinesis デベロッパーガイド」で[データストリームの作成および更新](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html)の詳細について参照してください。

Kinesis データストリームを作成するには、[CreateStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_CreateStream.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$kinesisClient = new Aws\Kinesis\KinesisClient([
    'profile' => 'default',
    'version' => '2013-12-02',
    'region' => 'us-east-2'
]);

$shardCount = 2;
$name = "my_stream_name";

try {
    $result = $kinesisClient->createStream([
        'ShardCount' => $shardCount,
        'StreamName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## データストリームを取得する
<a name="retrieve-a-data-stream"></a>

次のコード例を使用して、既存のデータストリームの詳細を取得します。デフォルトでは、これにより、指定した Kinesis データストリームに接続されている最初の 10 個のシャードに関する情報が返されます。必ず、Kinesis データストリームにデータを書き込む前に応答から `StreamStatus` を確認してください。

指定した Kinesis データストリームに関する詳細情報を取得するには、[DescribeStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStream.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$kinesisClient = new Aws\Kinesis\KinesisClient([
    'profile' => 'default',
    'version' => '2013-12-02',
    'region' => 'us-east-2'
]);

$name = "my_stream_name";

try {
    $result = $kinesisClient->describeStream([
        'StreamName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Kinesis に接続された既存のデータストリームのリスト
<a name="list-existing-data-streams-that-are-connected-to-ak"></a>

選択した AWS リージョンの AWS アカウント から最初の 10 個のデータストリームをリストします。返された ``HasMoreStreams` を使用して、さらに多くのストリームがアカウントに関連付けられているかどうかを判断します。

Kinesis データストリームをリストするには、[ListStreams](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListStreams.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$kinesisClient = new Aws\Kinesis\KinesisClient([
    'profile' => 'default',
    'version' => '2013-12-02',
    'region' => 'us-east-2'
]);

try {
    $result = $kinesisClient->listStreams();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 既存のデータストリームにデータを送信する
<a name="send-data-to-an-existing-data-stream"></a>

データストリームを作成したら、次の例を使用してデータを送信します。データを送信する前に、`DescribeStream` を使用してデータ `StreamStatus` がアクティブであるかどうかを確認します。

1 つのデータレコードを Kinesis データストリームに書き込むには、[PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html) オペレーションを使用します。最大 500 個のレコードを Kinesis データストリームに書き込むには、[PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$kinesisClient = new Aws\Kinesis\KinesisClient([
    'profile' => 'default',
    'version' => '2013-12-02',
    'region' => 'us-east-1'
]);

$name = "my_stream_name";
$content = '{"ticker_symbol":"QXZ", "sector":"HEALTHCARE", "change":-0.05, "price":84.51}';
$groupID = "input to a hash function that maps the partition key (and associated data) to a specific shard";

try {
    $result = $kinesisClient->PutRecord([
        'Data' => $content,
        'StreamName' => $name,
        'PartitionKey' => $groupID
    ]);
    print("<p>ShardID = " . $result["ShardId"] . "</p>");
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## データストリームを削除する
<a name="delete-a-data-stream"></a>

この例では、データストリームを削除する方法を示しています。データストリームを削除すると、データストリームに送信されたデータもすべて削除されます。アクティブな Kinesis データストリームは、ストリームの削除が完了するまで DELETING 状態に切り替わります。DELETING 状態の間、ストリームはデータの処理を続けます。

Kinesis データストリームを削除するには、[DeleteStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DeleteStream.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$kinesisClient = new Aws\Kinesis\KinesisClient([
    'profile' => 'default',
    'version' => '2013-12-02',
    'region' => 'us-east-2'
]);

$name = "my_stream_name";

try {
    $result = $kinesisClient->deleteStream([
        'StreamName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# Kinesis Data Streams API と AWS SDK for PHP バージョン 3 を使用したデータシャードの管理
<a name="kinesis-example-shard"></a>

Amazon Kinesis Data Streams では、エンドポイントにリアルタイムデータを送信できます。データフローのレートは、ストリーム内のシャードの数によって異なります。

1 つのシャードに 1 秒あたり 1,000 個のレコードを書き込むことができます。各シャードには、1 秒あたり 1 MiB のアップロード制限もあります。使用量は、シャード単位で計算および請求されるため、これらの例を使用してストリームのデータ容量とコストを管理します。

以下の例では、次の方法を示しています。
+ [ListShards](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#listshards) を使用してストリーム内のシャードをリストする。
+ [UpdateShardCount](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#updateshardcount) を使用してストリーム内のシャードの数を追加または削減する。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon Kinesis Data Streams の使用の詳細については、「[Amazon Kinesis Data Streams デベロッパーガイド](https://docs.aws.amazon.com/streams/latest/dev/)」を参照してください。

## データストリームシャードをリストする
<a name="list-data-stream-shards"></a>

特定のストリーム内にある最大 100 個のシャードの詳細をリストします。

Kinesis データストリームにあるシャードをリストするには、[ListShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListShards.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$kinesisClient = new Aws\Kinesis\KinesisClient([
    'profile' => 'default',
    'version' => '2013-12-02',
    'region' => 'us-east-2'
]);

$name = "my_stream_name";

try {
    $result = $kinesisClient->ListShards([
        'StreamName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## データストリームシャードをさらに追加する
<a name="add-more-data-stream-shards"></a>

データストリームシャードをさらに追加する必要がある場合、現在のシャード数を増やすことができます。増やす場合、シャード数を 2 倍にすることをお勧めします。これにより、現在利用可能な各シャードのコピーが作成され、容量が増加します。シャードの数を 2 倍にできるのは、24 時間以内に 2 回のみです。

先ほど説明したように Kinesis Data Streams の使用量の請求はシャードごとに計算されるため、需要が減ったらシャード数を半分に減らすことをお勧めします。シャードを削除するとき、シャードの量のみ現在のシャード数の半分に減らすことができます。

Kinesis データストリームのシャード数を更新するには、[UpdateShardCount](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_UpdateShardCount.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$kinesisClient = new Aws\Kinesis\KinesisClient([
    'profile' => 'default',
    'version' => '2013-12-02',
    'region' => 'us-east-2'
]);

$name = "my_stream_name";
$totalshards = 4;

try {
    $result = $kinesisClient->UpdateShardCount([
        'ScalingType' => 'UNIFORM_SCALING',
        'StreamName' => $name,
        'TargetShardCount' => $totalshards
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# Firehose API と AWS SDK for PHP バージョン 3 を使用した配信ストリームの作成
<a name="kinesis-firehose-example-delivery-stream"></a>

Amazon Data Firehose を使用すると、Amazon Kinesis Data Streams、Amazon S3、Amazon OpenSearch Service (OpenSearch Service)、Amazon Redshift などの他の AWS サービスや、Splunk にリアルタイムデータを送信できます。配信ストリームを持つデータプロデューサーを作成し、データを追加するたびに、設定された送信先にデータを配信します。

以下の例では、次の方法を示しています。
+ [CreateDeliveryStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#createdeliverystream) を使用して配信ストリームを作成する。
+ [DescribeDeliveryStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#describedeliverystream) を使用して 1 つの配信ストリームの詳細を取得する
+ [ListDeliveryStreams](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#listdeliverystreams) を使用して配信ストリームをリストする。
+ [PutRecord](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#putrecord) を使用して配信ストリームにデータを送信する。
+ [DeleteDeliveryStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#deletedeliverystream) を使用して配信ストリームを削除する。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon Data Firehose の使用の詳細については、「[Amazon Kinesis Data Firehose デベロッパーガイド](https://docs.aws.amazon.com/streams/latest/dev/)」を参照してください。

## Kinesis データストリームを使用した配信ストリームの作成
<a name="create-a-delivery-stream-using-a-ak-data-stream"></a>

既存の Kinesis データストリームにデータを配置する配信ストリームを確立するには、[CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html) オペレーションを使用します。

これにより、デベロッパーは既存の 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 バケットを使用した配信ストリームの作成
<a name="create-a-delivery-stream-using-an-s3-bucket"></a>

既存の Amazon S3 バケットにデータを配置する配信ストリームを確立するには、[CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html) オペレーションを使用します。

「[Destination Parameters](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html)」で説明されているように、送信先パラメータを指定します。次に、「[Amazon S3 の送信先へのアクセス権を Kinesis Data Firehose に付与する](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3.html)」で説明したように、Firehose の Amazon 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 Service を使用して配信ストリームをテストする
<a name="create-a-delivery-stream-using-es"></a>

OpenSearch Service クラスターにデータを配置する Firehose 配信ストリームを確立するには、[CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html) オペレーションを使用します。

「[Destination Parameters](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html)」で説明されているように、送信先パラメータを指定します。「Amazon Redshift の送信先へのアクセス権を Kinesis Data Firehose に付与する」で説明したように、Firehose の OpenSearch Service クラスターへのアクセス権を付与していることを確認します。

 **インポート**。

```
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";
}
```

## 配信ストリームを取得する
<a name="retrieve-a-delivery-stream"></a>

既存の Firehose 配信ストリームに関する詳細情報を取得するには、[DescribeDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DescribeDeliveryStream.html) オペレーションを使用します。

 **インポート**。

```
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 に接続された既存の配信ストリームのリスト
<a name="list-existing-delivery-streams-connected-to-aks"></a>

Kinesis Data Streams にデータを送信している既存のすべての Firehose 配信ストリームをリストするには、[ListDeliveryStreams](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ListDeliveryStreams.html) オペレーションを使用します。

 **インポート**。

```
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";
}
```

## 他の AWS サービスにデータを送信している既存の配信ストリームをリストする
<a name="list-existing-delivery-streams-sending-data-to-other-aws-services"></a>

Amazon S3、OpenSearch Service、または Amazon Redshift、あるいは Splunk にデータを送信している既存のすべての Firehose 配信ストリームをリストするには、[ListDeliveryStreams](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ListDeliveryStreams.html) オペレーションを使用します。

 **インポート**。

```
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 配信ストリームへのデータの送信
<a name="send-data-to-an-existing-akf-delivery-stream"></a>

Firehose 配信ストリームを介して指定した送信先にデータを送信するには、Kinesis Data Firehose 配信ストリームを作成した後に [PutRecord](https://docs.aws.amazon.com/firehose/latest/APIReference/API_API_PutRecord.html) オペレーションを使用します。

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 配信ストリームの削除
<a name="delete-a-akf-delivery-stream"></a>

Firehose 配信ストリームを削除するには、[DeleteDeliveryStreams](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DeleteDeliveryStreams.html) オペレーションを使用します。これにより、送信ストリームに送信したデータがすべて削除されます。

 **インポート**。

```
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";
}
```

# AWS Elemental MediaConvert AWS SDK for PHP バージョン 3 を使用した の例
<a name="emc-examples"></a>

AWS Elemental MediaConvert は、ブロードキャストグレード機能を備えたファイルベースのビデオトランスコーディングサービスです。このサービスでは、インターネット全体に配信するブロードキャストおよびビデオオンデマンド (VOD) 用のアセットを作成できます。詳細については、「[AWS Elemental MediaConvert ユーザーガイド](https://docs.aws.amazon.com/mediaconvert/latest/ug/)」を参照してください。

の PHP API AWS Elemental MediaConvert は、 *`AWS.MediaConvert`*クライアントクラスを通じて公開されます。詳細については、API リファレンスの[https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html)を参照してください。

## でのトランスコードジョブの作成と管理 AWS Elemental MediaConvert
<a name="emc-examples-jobs"></a>

この例では、 AWS SDK for PHP バージョン 3 を使用して を呼び出し AWS Elemental MediaConvert 、トランスコーディングジョブを作成します。開始する前に、入力ストレージとしてプロビジョニングした Amazon S3 バケットに対して、入力動画をアップロードする必要があります。サポートされている入力動画のコーデックとコンテナの一覧については、「[AWS Elemental MediaConvert ユーザーガイド](https://docs.aws.amazon.com/mediaconvert/latest/ug/)」の「[サポートされる入力コーデックおよびコンテナ](https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers-input.html)」を参照してください。

以下の例では、次の方法を示しています。
+ でトランスコードジョブを作成します AWS Elemental MediaConvert。[CreateJob](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html#createjob)。
+  AWS Elemental MediaConvert キューからトランスコードジョブをキャンセルします。[CancelJob](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html#canceljob) 
+ 完了したコード変換ジョブの JSON を取得します。[GetJob](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html#getjob) 
+ 最近作成されたジョブの最大 20 個の JSON 配列を取得します。[ListJobs](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html#listjobs) 

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

### 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

MediaConvert クライアントにアクセスするには、入力ファイルと出力ファイルが保存されている Amazon S3 バケット AWS Elemental MediaConvert へのアクセスを許可する IAM ロールを作成します。詳細については、「[AWS Elemental MediaConvert ユーザーガイド](https://docs.aws.amazon.com/mediaconvert/latest/ug/)」の「[IAM アクセス許可の設定](https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html)」を参照してください。

### クライアントの作成
<a name="create-a-client"></a>

コードのリージョンで MediaConvert クライアント AWS SDK for PHP を作成して、 を設定します。次の例では、リージョンを us-west-2 に設定しています。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\MediaConvert\MediaConvertClient;
```

 **サンプルコード** 

```
$mediaConvertClient = new MediaConvertClient([
    'version' => '2017-08-29',
    'region' => 'us-east-2',
    'profile' => 'default'
]);
```

### シンプルなコード変換ジョブの定義
<a name="defining-a-simple-transcoding-job"></a>

コード変換ジョブのパラメータを定義する JSON を作成します。

これらは詳細パラメータです。[AWS Elemental MediaConvert コンソール](https://console.aws.amazon.com/mediaconvert/home)を使用して JSON ジョブのパラメータを生成できます。そのためには、コンソールでジョブ設定を選択し、**[ジョブ]** セクションの下部にある **[ジョブの JSON を表示]** を選択します。次の例は、シンプルなジョブの JSON を示しています。

 **サンプルコード** 

```
$jobSetting = [
    "OutputGroups" => [
        [
            "Name" => "File Group",
            "OutputGroupSettings" => [
                "Type" => "FILE_GROUP_SETTINGS",
                "FileGroupSettings" => [
                    "Destination" => "s3://OUTPUT_BUCKET_NAME/"
                ]
            ],
            "Outputs" => [
                [
                    "VideoDescription" => [
                        "ScalingBehavior" => "DEFAULT",
                        "TimecodeInsertion" => "DISABLED",
                        "AntiAlias" => "ENABLED",
                        "Sharpness" => 50,
                        "CodecSettings" => [
                            "Codec" => "H_264",
                            "H264Settings" => [
                                "InterlaceMode" => "PROGRESSIVE",
                                "NumberReferenceFrames" => 3,
                                "Syntax" => "DEFAULT",
                                "Softness" => 0,
                                "GopClosedCadence" => 1,
                                "GopSize" => 90,
                                "Slices" => 1,
                                "GopBReference" => "DISABLED",
                                "SlowPal" => "DISABLED",
                                "SpatialAdaptiveQuantization" => "ENABLED",
                                "TemporalAdaptiveQuantization" => "ENABLED",
                                "FlickerAdaptiveQuantization" => "DISABLED",
                                "EntropyEncoding" => "CABAC",
                                "Bitrate" => 5000000,
                                "FramerateControl" => "SPECIFIED",
                                "RateControlMode" => "CBR",
                                "CodecProfile" => "MAIN",
                                "Telecine" => "NONE",
                                "MinIInterval" => 0,
                                "AdaptiveQuantization" => "HIGH",
                                "CodecLevel" => "AUTO",
                                "FieldEncoding" => "PAFF",
                                "SceneChangeDetect" => "ENABLED",
                                "QualityTuningLevel" => "SINGLE_PASS",
                                "FramerateConversionAlgorithm" => "DUPLICATE_DROP",
                                "UnregisteredSeiTimecode" => "DISABLED",
                                "GopSizeUnits" => "FRAMES",
                                "ParControl" => "SPECIFIED",
                                "NumberBFramesBetweenReferenceFrames" => 2,
                                "RepeatPps" => "DISABLED",
                                "FramerateNumerator" => 30,
                                "FramerateDenominator" => 1,
                                "ParNumerator" => 1,
                                "ParDenominator" => 1
                            ]
                        ],
                        "AfdSignaling" => "NONE",
                        "DropFrameTimecode" => "ENABLED",
                        "RespondToAfd" => "NONE",
                        "ColorMetadata" => "INSERT"
                    ],
                    "AudioDescriptions" => [
                        [
                            "AudioTypeControl" => "FOLLOW_INPUT",
                            "CodecSettings" => [
                                "Codec" => "AAC",
                                "AacSettings" => [
                                    "AudioDescriptionBroadcasterMix" => "NORMAL",
                                    "RateControlMode" => "CBR",
                                    "CodecProfile" => "LC",
                                    "CodingMode" => "CODING_MODE_2_0",
                                    "RawFormat" => "NONE",
                                    "SampleRate" => 48000,
                                    "Specification" => "MPEG4",
                                    "Bitrate" => 64000
                                ]
                            ],
                            "LanguageCodeControl" => "FOLLOW_INPUT",
                            "AudioSourceName" => "Audio Selector 1"
                        ]
                    ],
                    "ContainerSettings" => [
                        "Container" => "MP4",
                        "Mp4Settings" => [
                            "CslgAtom" => "INCLUDE",
                            "FreeSpaceBox" => "EXCLUDE",
                            "MoovPlacement" => "PROGRESSIVE_DOWNLOAD"
                        ]
                    ],
                    "NameModifier" => "_1"
                ]
            ]
        ]
    ],
    "AdAvailOffset" => 0,
    "Inputs" => [
        [
            "AudioSelectors" => [
                "Audio Selector 1" => [
                    "Offset" => 0,
                    "DefaultSelection" => "NOT_DEFAULT",
                    "ProgramSelection" => 1,
                    "SelectorType" => "TRACK",
                    "Tracks" => [
                        1
                    ]
                ]
            ],
            "VideoSelector" => [
                "ColorSpace" => "FOLLOW"
            ],
            "FilterEnable" => "AUTO",
            "PsiControl" => "USE_PSI",
            "FilterStrength" => 0,
            "DeblockFilter" => "DISABLED",
            "DenoiseFilter" => "DISABLED",
            "TimecodeSource" => "EMBEDDED",
            "FileInput" => "s3://INPUT_BUCKET_AND_FILE_NAME"
        ]
    ],
    "TimecodeConfig" => [
        "Source" => "EMBEDDED"
    ]
];
```

### ジョブの作成
<a name="create-a-job"></a>

ジョブパラメータの JSON を作成した後で、`AWS.MediaConvert service object` を呼び出して createJob メソッドを呼び出し、パラメータを渡します。作成されたジョブの ID がレスポンスのデータで返されます。

 **サンプルコード** 

```
try {
    $result = $mediaConvertClient->createJob([
        "Role" => "IAM_ROLE_ARN",
        "Settings" => $jobSetting, //JobSettings structure
        "Queue" => "JOB_QUEUE_ARN",
        "UserMetadata" => [
            "Customer" => "Amazon"
        ],
    ]);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

### ジョブの取得
<a name="retrieve-a-job"></a>

createjob を呼び出して返された JobID を使用して、最近のジョブの詳細な説明を JSON 形式で取得できます。

 **サンプルコード** 

```
$mediaConvertClient = new MediaConvertClient([
    'version' => '2017-08-29',
    'region' => 'us-east-2',
    'profile' => 'default'
]);

try {
    $result = $mediaConvertClient->getJob([
        'Id' => 'JOB_ID',
    ]);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

### ジョブのキャンセル
<a name="cancel-a-job"></a>

createjob を呼び出して返された JobID を使用して、キュー内にあるジョブをキャンセルできます。コード変換を既に開始しているジョブをキャンセルすることはできません。

 **サンプルコード** 

```
$mediaConvertClient = new MediaConvertClient([
    'version' => '2017-08-29',
    'region' => 'us-east-2',
    'profile' => 'default'
]);

try {
    $result = $mediaConvertClient->cancelJob([
        'Id' => 'JOB_ID', // REQUIRED The Job ID of the job to be cancelled.
    ]);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

### 最新のコード変換ジョブの一覧表示
<a name="listing-recent-transcoding-jobs"></a>

パラメータの JSON を作成します。これには、リストを昇順または降順のいずれでソートするかを指定する値、チェックするジョブキューの ARN、および追加するジョブのステータスが含まれます。最大 20 個のジョブが返されます。次の 20 個の最新ジョブを取得するには、結果で返される nextToken 文字列を使用します。

 **サンプルコード** 

```
$mediaConvertClient = new MediaConvertClient([
    'version' => '2017-08-29',
    'region' => 'us-east-2',
    'profile' => 'default'
]);

try {
    $result = $mediaConvertClient->listJobs([
        'MaxResults' => 20,
        'Order' => 'ASCENDING',
        'Queue' => 'QUEUE_ARN',
        'Status' => 'SUBMITTED',
        // 'NextToken' => '<string>', //OPTIONAL To retrieve the twenty next most recent jobs
    ]);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 を使用した Amazon S3 の例
<a name="s3-examples"></a>

Amazon Simple Storage Service (Amazon S3) は、拡張性の高いクラウドストレージを提供するウェブサービスです。Amazon S3 は簡単に使用できるオブジェクトストレージです。シンプルなウェブサービスインターフェイスが用意されており、ウェブ上のどこからでも容量に関係なくデータを保存、取得できます。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

**Topics**
+ [認証情報](#examplecredentials)
+ [Amazon S3 バケットの作成と使用](s3-examples-creating-buckets.md)
+ [Amazon S3 バケットへのアクセス許可を管理する](s3-examples-access-permissions.md)
+ [Amazon S3 バケットを設定する](s3-examples-configuring-a-bucket.md)
+ [Amazon S3 マルチパートアップロード](s3-multipart-upload.md)
+ [Amazon S3 の署名付き URL](s3-presigned-url.md)
+ [S3 の署名付き POST の作成](s3-presigned-post.md)
+ [静的ウェブホストとして Amazon S3 バケットを使用する](s3-examples-static-web-host.md)
+ [Amazon S3 バケットのポリシーで作業する](s3-examples-bucket-policies.md)
+ [S3 アクセスポイントの ARN の使用](s3-examples-access-point-arn.md)
+ [マルチリージョンアクセスポイントの使用](s3-multi-region-access-points.md)

# AWS SDK for PHP バージョン 3 での Amazon S3 バケットの作成と使用
<a name="s3-examples-creating-buckets"></a>

以下の例では、次の方法を示しています。
+ [ListBuckets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#listbuckets) を使用した、リクエストの認証送信者が所有するバケットリストの取得。
+ [CreateBucket](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createbucket) を使用した、新しいバケットの作成。
+ [PutObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject) を使用した、バケットへのオブジェクトの追加。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\S3\S3Client;
```

## バケットの一覧表示
<a name="list-buckets"></a>

次のコードのように、PHP ファイルを作成します。まず AWS リージョンとバージョンを指定する AWS.S3 クライアントサービスを作成します。次に `listBuckets` メソッドを呼び出します。これはリクエストの送信者が所有しているすべての Amazon S3 バケットをバケット配列として返します。

 **サンプルコード** 

```
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

//Listing all S3 Bucket
$buckets = $s3Client->listBuckets();
foreach ($buckets['Buckets'] as $bucket) {
    echo $bucket['Name'] . "\n";
}
```

## バケットを作成する
<a name="create-a-bucket"></a>

次のコードのように、PHP ファイルを作成します。まず AWS リージョンとバージョンを指定する AWS.S3 クライアントサービスを作成します。次に、`createBucket` メソッドを、パラメーターの配列を使用して呼び出します。唯一の必須のフィールドはキー 'Bucket' で、作成するバケット名の文字列値を指定します。ただし、AWS リージョンで 'CreateBucketConfiguration' フィールドを指定できます。成功した場合、このメソッドはバケットの「Location」を返します。

 **サンプルコード** 

```
function createBucket($s3Client, $bucketName)
{
    try {
        $result = $s3Client->createBucket([
            'Bucket' => $bucketName,
        ]);
        return 'The bucket\'s location is: ' .
            $result['Location'] . '. ' .
            'The bucket\'s effective URI is: ' .
            $result['@metadata']['effectiveUri'];
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function createTheBucket()
{
    $s3Client = new S3Client([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2006-03-01'
    ]);

    echo createBucket($s3Client, 'amzn-s3-demo-bucket');
}

// Uncomment the following line to run this code in an AWS account.
// createTheBucket();
```

## バケットにオブジェクトを配置する
<a name="put-an-object-in-a-bucket"></a>

新しいバケットにファイルを追加するには、次のコードを使用して PHP ファイルを作成します。

コマンドラインでこのファイルを実行し、ファイルをアップロードするバケットの名前を文字列、続いてアップロードするファイルの完全なファイルパスを渡します。

 **サンプルコード** 

```
$USAGE = "\n" .
    "To run this example, supply the name of an S3 bucket and a file to\n" .
    "upload to it.\n" .
    "\n" .
    "Ex: php PutObject.php <bucketname> <filename>\n";

if (count($argv) <= 2) {
    echo $USAGE;
    exit();
}

$bucket = $argv[1];
$file_Path = $argv[2];
$key = basename($argv[2]);

try {
    //Create a S3Client
    $s3Client = new S3Client([
        'profile' => 'default',
        'region' => 'us-west-2',
        'version' => '2006-03-01'
    ]);
    $result = $s3Client->putObject([
        'Bucket' => $bucket,
        'Key' => $key,
        'SourceFile' => $file_Path,
    ]);
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}
```

# AWS SDK for PHP バージョン 3 による Amazon S3 バケットへのアクセス許可の管理
<a name="s3-examples-access-permissions"></a>

アクセスコントロールリスト (ACL) はリソースベースのアクセスポリシーオプションの 1 つであり、バケットとオブジェクトへのアクセスを管理するために使用できます。ACL を使用して、基本的な読み取り/書き込みアクセス許可を他の AWS アカウントに付与できます。詳細については、「[ACL によるアクセス管理](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [GetBucketAcl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketacl) を使用した、バケットに対するアクセスコントロールポリシーの取得。
+ ACL、[PutBucketAcl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketacl) を使用した、バケットのアクセス許可の設定。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## アクセスコントロールリストポリシーの取得と設定
<a name="get-and-set-an-access-control-list-policy"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\S3\S3Client;  
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
// Create a S3Client 
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

// Gets the access control policy for a bucket
$bucket = 'amzn-s3-demo-bucket';
try {
    $resp = $s3Client->getBucketAcl([
        'Bucket' => $bucket
    ]);
    echo "Succeed in retrieving bucket ACL as follows: \n";
    var_dump($resp);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}

// Sets the permissions on a bucket using access control lists (ACL).
$params = [
    'ACL' => 'public-read',
    'AccessControlPolicy' => [
        // Information can be retrieved from `getBucketAcl` response
        'Grants' => [
            [
                'Grantee' => [
                    'DisplayName' => '<string>',
                    'EmailAddress' => '<string>',
                    'ID' => '<string>',
                    'Type' => 'CanonicalUser',
                    'URI' => '<string>',
                ],
                'Permission' => 'FULL_CONTROL',
            ],
            // ...
        ],
        'Owner' => [
            'DisplayName' => '<string>',
            'ID' => '<string>',
        ],
    ],
    'Bucket' => $bucket,
];

try {
    $resp = $s3Client->putBucketAcl($params);
    echo "Succeed in setting bucket ACL.\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 による Amazon S3 バケットの設定
<a name="s3-examples-configuring-a-bucket"></a>

Cross−Origin Resource Sharing (CORS) は、特定のドメインにロードされたクライアントウェブアプリケーションが異なるドメイン内のリソースと通信する方法を定義します。Amazon S3 の CORS のサポートによって、Amazon S3 でリッチなクライアント側ウェブアプリケーションを構築し、Amazon S3 リソースへのクロスオリジンアクセスを選択的に許可できます。

Amazon S3 バケットで CORS 設定を使用する方法の詳細については、「[Cross-Origin Resource Sharing (CORS)](https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [GetBucketCors](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketcors) を使用して、バケットの CORS 設定を取得する
+ [PutBucketCors](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketcors) を使用して、バケットの CORS 設定を設定する

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## CORS 設定を取得する
<a name="get-the-cors-configuration"></a>

次のコードのように、PHP ファイルを作成します。AWS.S3 クライアントサービスを作成してから、`getBucketCors` メソッドを呼び出して、CORS 設定を取得するバケットを指定します。

必要なパラメーターは、選択したバケットの名前のみです。そのバケットに CORS 設定が存在する場合は、その設定が Amazon S3 によって [CORSRules オブジェクト](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#shape-corsrule)として返されます。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

try {
    $result = $client->getBucketCors([
        'Bucket' => $bucketName, // REQUIRED
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## CORS 設定を設定する
<a name="set-the-cors-configuration"></a>

次のコードのように、PHP ファイルを作成します。AWS.S3 クライアントサービスを作成してから、`putBucketCors` メソッドを呼び出して、CORS 設定を設定するバケットを指定し、CORSConfiguration を [CORSRules JSON オブジェクト](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#shape-corsrule)として指定します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

try {
    $result = $client->putBucketCors([
        'Bucket' => $bucketName, // REQUIRED
        'CORSConfiguration' => [ // REQUIRED
            'CORSRules' => [ // REQUIRED
                [
                    'AllowedHeaders' => ['Authorization'],
                    'AllowedMethods' => ['POST', 'GET', 'PUT'], // REQUIRED
                    'AllowedOrigins' => ['*'], // REQUIRED
                    'ExposeHeaders' => [],
                    'MaxAgeSeconds' => 3000
                ],
            ],
        ]
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 での Amazon S3 マルチパートアップロードの使用
<a name="s3-multipart-upload"></a>

1 回の `PutObject` 操作では、合計サイズが 5 GB 以内のオブジェクトをアップロードできます。ただし、マルチパートアップロード手法 (たとえば、`CreateMultipartUpload`、`UploadPart`、`CompleteMultipartUpload`、`AbortMultipartUpload`) を使用すると、合計サイズが 5 MB～5 TB のオブジェクトをアップロードできます。

以下の例では、次の方法を示しています。
+ [ObjectUploader](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.ObjectUploader.html) を使用して、Amazon S3 にオブジェクトをアップロードする。
+ [MultipartUploader](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.MultipartUploader.html) を使用して、Amazon S3 オブジェクトのマルチパートアップロードを作成する。
+ [ObjectCopier](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.ObjectCopier.html) を使用して、Amazon S3 のある場所から別の場所にオブジェクトをコピーする。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

## オブジェクトアップローダー
<a name="object-uploader"></a>

`PutObject` または `MultipartUploader` がタスクに最適かどうかが不明な場合は、`ObjectUploader` を使用します。`ObjectUploader` は、ペイロードサイズに基づいて `PutObject` または `MultipartUploader` を使用して大きなファイルを Amazon S3 にアップロードします。

```
require 'vendor/autoload.php';

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\ObjectUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client.
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-east-2',
    'version' => '2006-03-01'
]);

$bucket = 'your-bucket';
$key = 'my-file.zip';

// Use a stream instead of a file path.
$source = fopen('/path/to/large/file.zip', 'rb');

$uploader = new ObjectUploader(
    $s3Client,
    $bucket,
    $key,
    $source
);

do {
    try {
        $result = $uploader->upload();
        if ($result["@metadata"]["statusCode"] == '200') {
            print('<p>File successfully uploaded to ' . $result["ObjectURL"] . '.</p>');
        }
        print($result);
        // If the SDK chooses a multipart upload, try again if there is an exception.
        // Unlike PutObject calls, multipart upload calls are not automatically retried.
    } catch (MultipartUploadException $e) {
        rewind($source);
        $uploader = new MultipartUploader($s3Client, $source, [
            'state' => $e->getState(),
        ]);
    }
} while (!isset($result));

fclose($source);
```

### 設定
<a name="object-uploader-configuration"></a>

`ObjectUploader` オブジェクトのコンストラクタでは次の引数を指定できます。

**`$client`**  
転送の実行に使用する `Aws\ClientInterface` オブジェクト。これは `Aws\S3\S3Client` のインスタンスである必要があります。

**`$bucket`**  
(`string`、*必須*) オブジェクトのアップロード先のバケットの名前。

**`$key`**  
(`string`、*必須*) アップロードするオブジェクトで使用するキー。

**`$body`**  
(`mixed`、*必須*) アップロードするオブジェクトデータ。`StreamInterface`、PHP ストリームリソース、またはアップロードするデータ文字列のいずれでもかまいません。

**`$acl`**  
(`string`) をアップロードするオブジェクトに設定するアクセスコントロールリスト (ACL)。デフォルトでは、オブジェクトはプライベートです。

**`$options`**  
マルチパートアップロードの設定オプションの連想配列。有効な設定オプションは次のとおりです。    
**`add_content_md5`**  
(`bool`) true に設定すると、アップロードの MD5 チェックサムが自動的に計算されます。  
**`mup_threshold`**  
(`int`、*デフォルト*:`int(16777216)`) ファイルサイズのバイト数。ファイルサイズがこの制限を超えると、マルチパートアップロードが使用されます。  
**`before_complete`**  
(`callable`) `CompleteMultipartUpload` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。`CommandInterface` オブジェクトに追加できるパラメータについては、[CompleteMultipartUpload API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#completemultipartupload)を参照してください。  
**`before_initiate`**  
(`callable`) `CreateMultipartUpload` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。ファイルサイズが `mup_threshold` 値を超えた場合、SDK はこのコールバックを呼び出します。`CommandInterface` オブジェクトに追加できるパラメータについては、[CreateMultipartUpload API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload)を参照してください。  
**`before_upload`**  
(`callable`) すべての `UploadPart` または `PutObject` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。ファイルサイズが `mup_threshold` 値以下の場合、SDK はこのコールバックを呼び出します。`PutObject` リクエストに適用できるパラメータについては、[PutObject API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject)を参照してください。`UploadPart` リクエストに適用されるパラメータについては、[UploadPart API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#uploadpart)を参照してください。SDK は、 `CommandInterface` オブジェクトで表されるオペレーションに適用されないパラメータを無視します。  
**`concurrency`**  
(`int`、*デフォルト*: `int(3)`) マルチパートアップロード中に許容される同時 `UploadPart` オペレーションの最大数。  
**`part_size`**  
(`int`、*デフォルト*: `int(5242880)`) マルチパートアップロードの実行時に使用するパートサイズ (バイト単位)。値は、5 MB 以上かつ 5 GB 以内である必要があります。  
**`state`**  
(`Aws\Multipart\UploadState`) マルチパートアップロードの状態を表すオブジェクトであり、前回のアップロードを再開するために使用されます。このオプションを指定している場合、`$bucket` および `$key` 引数と `part_size` オプションは無視されます。  
**`params`**  
各サブコマンドの設定オプションを提供する連想配列。例えば、次のようになります。  

```
new ObjectUploader($bucket, $key, $body, $acl, ['params' => ['CacheControl' => <some_value>])
```

## MultipartUploader
<a name="multipartuploader"></a>

マルチパートアップロードは、大容量オブジェクトのアップロードを効率よく行えるように設計されています。マルチパートアップロードでは、オブジェクトを分割して、別々に任意の順序で並行してアップロードできます。

Amazon S3 のユーザーには、100 MB を超えるオブジェクトに対してマルチパートアップロードを使用することをお勧めします。

## MultipartUploader オブジェクト
<a name="multipartuploader-object"></a>

SDK には、マルチパートアップロードのプロセスを簡素化する特別な `MultipartUploader` オブジェクトがあります。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

// Use multipart upload
$source = '/path/to/large/file.zip';
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

try {
    $result = $uploader->upload();
    echo "Upload complete: {$result['ObjectURL']}\n";
} catch (MultipartUploadException $e) {
    echo $e->getMessage() . "\n";
}
```

このアップローダーでは、指定されたソースと設定に基づいてパートデータのジェネレーターが作成され、すべてのパートのアップロードが試行されます。一部のパートアップロードが失敗すると、アップローダーによってソースデータ全体が読み取られるまで、失敗したパートのアップロードが続行されます。その後、アップローダーは失敗したパートのアップロードを再試行するか、アップロードに失敗したパートに関する情報を含む例外をスローします。

## マルチパートアップロードのカスタマイズ
<a name="customizing-a-multipart-upload"></a>

マルチパートアップローダーによって実行される `CreateMultipartUpload`、`UploadPart`、`CompleteMultipartUpload` オペレーションに対して、コンストラクタに渡すコールバックを介してカスタムオプションを設定できます。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

// Customizing a multipart upload
$source = '/path/to/large/file.zip';
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
    'before_initiate' => function (Command $command) {
        // $command is a CreateMultipartUpload operation
        $command['CacheControl'] = 'max-age=3600';
    },
    'before_upload' => function (Command $command) {
        // $command is an UploadPart operation
        $command['RequestPayer'] = 'requester';
    },
    'before_complete' => function (Command $command) {
        // $command is a CompleteMultipartUpload operation
        $command['RequestPayer'] = 'requester';
    },
]);
```

### パートのアップロード間の手動のガベージコレクション
<a name="manual-garbage-collection-between-part-uploads"></a>

大きなアップロードでメモリ制限に達している場合、メモリ制限に達したときに [PHP ガベージコレクター](https://www.php.net/manual/en/features.gc.php)で収集されていない SDK によって生成された巡回参照が原因である可能性があります。オペレーション間で収集アルゴリズムを手動で呼び出すと、制限に達する前にサイクルを収集できます。次の例では、各パートをアップロードする前にコールバックを使用して、収集アルゴリズムを呼び出します。ガベージコレクターを呼び出してもパフォーマンスに影響することはなく、最適な使用はお客様のユースケースと環境によって異なることに注意してください。

```
$uploader = new MultipartUploader($client, $source, [
   'bucket' => 'your-bucket',
   'key' => 'your-key',
   'before_upload' => function(\Aws\Command $command) {
      gc_collect_cycles();
   }
]);
```

## エラーからの復旧
<a name="recovering-from-errors"></a>

マルチパートアップロードのプロセスでエラーが発生すると `MultipartUploadException` がスローされます。この例外では、マルチパートアップロードの進行状況に関する情報が含まれている `UploadState` オブジェクトへのアクセスが提供されます。`UploadState` を使用して、完了できなかったアップロードを再開できます。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

$source = '/path/to/large/file.zip';
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

//Recover from errors
do {
    try {
        $result = $uploader->upload();
    } catch (MultipartUploadException $e) {
        $uploader = new MultipartUploader($s3Client, $source, [
            'state' => $e->getState(),
        ]);
    }
} while (!isset($result));

//Abort a multipart upload if failed
try {
    $result = $uploader->upload();
} catch (MultipartUploadException $e) {
    // State contains the "Bucket", "Key", and "UploadId"
    $params = $e->getState()->getId();
    $result = $s3Client->abortMultipartUpload($params);
}
```

`UploadState` によるアップロードの再開では、まだアップロードされていないパートのアップロードが試行されます。この状態オブジェクトでは、パートが連続していない場合であっても、欠落しているパートが追跡されます。アップローダーは、指定されたソースファイルで、アップロードする必要があるパートに属するバイト範囲まで読み取りまたはシークします。

 `UploadState` オブジェクトはシリアル化可能であるため、別のプロセスでアップロードを再開することもできます。また、例外を処理していない場合でも、`UploadState` を呼び出すことによって `$uploader->getState()` オブジェクトを取得できます。

**重要**  
`MultipartUploader` にソースとして渡されるストリームは、アップロード前に自動的には巻き戻しされません。そのため、前述の例のようなループでファイルパスではなくストリームを使用している場合は、`catch` ブロック内で `$source` 変数をリセットします。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

//Using stream instead of file path
$source = fopen('/path/to/large/file.zip', 'rb');
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

do {
    try {
        $result = $uploader->upload();
    } catch (MultipartUploadException $e) {
        rewind($source);
        $uploader = new MultipartUploader($s3Client, $source, [
            'state' => $e->getState(),
        ]);
    }
} while (!isset($result));
fclose($source);
```

### マルチパートアップロードの中止
<a name="aborting-a-multipart-upload"></a>

マルチパートアップロードは、`UploadState` オブジェクトに含まれた `UploadId` を取得し、`abortMultipartUpload` に渡すことで中止できます。

```
try {
    $result = $uploader->upload();
} catch (MultipartUploadException $e) {
    // State contains the "Bucket", "Key", and "UploadId"
    $params = $e->getState()->getId();
    $result = $s3Client->abortMultipartUpload($params);
}
```

## 非同期マルチパートアップロード
<a name="asynchronous-multipart-uploads"></a>

`upload()` で `MultipartUploader` を呼び出すとリクエストがブロックされます。非同期コンテキストを使用している場合は、マルチパートアップロードの [promise](guide_promises.md) を取得できます。

```
require 'vendor/autoload.php';

use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

$source = '/path/to/large/file.zip';
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

$promise = $uploader->promise();
```

### 設定
<a name="asynchronous-multipart-uploads-configuration"></a>

`MultipartUploader` オブジェクトのコンストラクタでは次の引数を指定できます。

** `$client` **  
転送の実行に使用する `Aws\ClientInterface` オブジェクト。これは `Aws\S3\S3Client` のインスタンスである必要があります。

** `$source` **  
アップロードするソースデータ。これは、パスや URL (例: `/path/to/file.jpg`)、リソースハンドル (例: `fopen('/path/to/file.jpg', 'r)`)、[PSR-7 ストリーム](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Psr.Http.Message.StreamInterface.html)のインスタンスのいずれかです。

** `$config` **  
マルチパートアップロードの設定オプションの連想配列。  
有効な設定オプションは次のとおりです。    
** `acl` **  
(`string`) をアップロードするオブジェクトに設定するアクセスコントロールリスト (ACL)。デフォルトでは、オブジェクトはプライベートです。  
** `before_complete` **  
(`callable`) `CompleteMultipartUpload` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。  
** `before_initiate` **  
(`callable`) `CreateMultipartUpload` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。  
** `before_upload` **  
(`callable`) すべての `UploadPart` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。  
** `bucket` **  
(`string`、*必須*) オブジェクトのアップロード先のバケットの名前。  
** `concurrency` **  
(`int`、*デフォルト*: `int(5)`) マルチパートアップロード中に許容される同時 `UploadPart` オペレーションの最大数。  
** `key` **  
(`string`、*必須*) アップロードするオブジェクトで使用するキー。  
** `part_size` **  
(`int`、*デフォルト*: `int(5242880)`) マルチパートアップロードの実行時に使用するパートサイズ (バイト単位)。5 MB 以上かつ 5 GB 以内である必要があります。  
** `state` **  
(`Aws\Multipart\UploadState`) マルチパートアップロードの状態を表すオブジェクトであり、前回のアップロードを再開するために使用されます。このオプションを指定している場合、`bucket`、`key`、`part_size` オプションは無視されます。  
**`add_content_md5`**  
(`boolean`) true に設定すると、アップロードの MD5 チェックサムが自動的に計算されます。  
**`params`**  
各サブコマンドの設定オプションを提供する連想配列。例えば、次のようになります。  

```
new MultipartUploader($client, $source, ['params' => ['CacheControl' => <some_value>]])
```

## マルチパートコピー
<a name="multipart-copies"></a>

には、 と同様の方法で使用される`MultipartCopy`オブジェクト AWS SDK for PHP も含まれていますが`MultipartUploader`、Amazon S3 内で 5 GB ～ 5 TB のサイズのオブジェクトをコピーするように設計されています。

```
require 'vendor/autoload.php';

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartCopy;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

//Copy objects within S3
$copier = new MultipartCopy($s3Client, '/bucket/key?versionId=foo', [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

try {
    $result = $copier->copy();
    echo "Copy complete: {$result['ObjectURL']}\n";
} catch (MultipartUploadException $e) {
    echo $e->getMessage() . "\n";
}
```

# AWS SDK for PHP バージョン 3 を使用した Amazon S3 の署名付き URL
<a name="s3-presigned-url"></a>

Authorization HTTP ヘッダーを使用する代わりに、必要な情報をクエリ文字列パラメーターとして渡すことで、特定の種類のリクエストを認証できます。これは、サードパーティーのブラウザで、リクエストのプロキシを行わずにプライベートの Amazon S3 データに直接アクセスさせる場合に便利です。これを行うには、「署名付き」のリクエストを作成し、他のユーザーが使用できる URL としてエンコードします。さらに、署名付きのリクエストは、有効期限を指定することで制限できます。

## HTTP GET リクエストの署名付き URL の作成
<a name="s3-presigned-url-get"></a>

次のコード例は、SDK for PHP を使用して HTTP GET リクエストの署名付き URL を作成する方法を示しています。

```
<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$s3Client = new S3Client([
    'region' => 'us-west-2',
]);

// Supply a CommandInterface object and an expires parameter to the `createPresignedRequest` method.
$request = $s3Client->createPresignedRequest(
    $s3Client->getCommand('GetObject', [
        'Bucket' => 'amzn-s3-demo-bucket',
        'Key' => 'demo-key',
    ]),
    '+1 hour'
);

// From the resulting RequestInterface object, you can get the URL.
$presignedUrl = (string) $request->getUri();

echo $presignedUrl;
```

[`createPresignedRequest` メソッドの API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html#method_createPresignedRequest)に詳細が記載されています。

他のユーザーは `$presignedUrl` 値を使用して、次の 1 時間以内にオブジェクトを取得できます。たとえば、ブラウザを使用して HTTP GET リクエストが実行されると、S3 サービスには、呼び出しが署名付き URL を作成したユーザーからのものであることが表示されます。

## HTTP PUT リクエストの署名付き URL の作成
<a name="s3-presigned-url-put"></a>

次のコード例は、SDK for PHP を使用して HTTP PUT リクエストの署名付き URL を作成する方法を示しています。

```
<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$s3Client = new S3Client([
    'region' => 'us-west-2',
]);

$request = $s3Client->createPresignedRequest(
    $s3Client->getCommand('PutObject', [
        'Bucket' => 'amzn-s3-demo-bucket',
        'Key' => 'demo-key',
    ]),
    '+1 hour'
);

// From the resulting RequestInterface object, you can get the URL.
$presignedUrl = (string) $request->getUri();
```

他のユーザーが HTTP PUT リクエストで署名付き URL を使用してファイルをアップロードできるようになりました。

```
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;

// ...

function uploadWithPresignedUrl($presignedUrl, $filePath, $s3Client): ?Response
{
    // Get the HTTP handler from the S3 client.
    $handler = $s3Client->getHandlerList()->resolve();
    
    // Create a stream from the file.
    $fileStream = new Stream(fopen($filePath, 'r'));
    
    // Create the request.
    $request = new Request(
        'PUT',
        $presignedUrl,
        [
            'Content-Type' => mime_content_type($filePath),
            'Content-Length' => filesize($filePath)
        ],
        $fileStream
    );
    
    // Send the request using the handler.
    try {
        $promise = $handler($request, []);
        $response = $promise->wait();
        return $response;
    } catch (Exception $e) {
        echo "Error uploading file: " . $e->getMessage() . "\n";
        return null;
    }
}
```

# AWS SDK for PHP バージョン 3 での Amazon S3 の署名付き POST
<a name="s3-presigned-post"></a>

署名付き URL と同様に、署名付き POST を使用すると、AWS 認証情報を付与しないでユーザーに書き込みアクセスを与えることができます。[AwsS3PostObjectV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.PostObjectV4.html) のインスタンスを使用して、署名付き POST フォームを作成できます。

以下の例では、次の方法を示しています。
+ [PostObjectV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.PostObjectV4.html) を使用して、S3 オブジェクトの POST アップロード形式のデータを取得します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

**注記**  
`PostObjectV4` は、AWS IAM アイデンティティセンターからの認証情報では機能しません。

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## PostObjectV4 の作成
<a name="create-postobjectv4"></a>

`PostObjectV4` のインスタンスを作成するには、次を提供する必要があります。
+ `Aws\S3\S3Client` のインスタンス 
+ バケット
+ フォーム入力フィールドの連想配列
+ ポリシー条件の配列 (「Amazon Simple Storage Service ユーザーガイド」の「[ポリシーの作成](https://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTForms.html)」を参照)。
+ ポリシーの有効期限文字列 (省略可能、デフォルトは 1 時間)。

 **インポート**。

```
require '../vendor/autoload.php';

use Aws\S3\PostObjectV4;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
require '../vendor/autoload.php';

use Aws\S3\PostObjectV4;
use Aws\S3\S3Client;

$client = new S3Client([
    'profile' => 'default',
    'region' => 'us-east-1',
]);
$bucket = 'amzn-s3-demo-bucket10';
$starts_with = 'user/eric/';
$client->listBuckets();

// Set defaults for form input fields.
$formInputs = ['acl' => 'public-read'];

// Construct an array of conditions for policy.
$options = [
    ['acl' => 'public-read'],
    ['bucket' => $bucket],
    ['starts-with', '$key', $starts_with],
];

// Set an expiration time (optional).
$expires = '+2 hours';

$postObject = new PostObjectV4(
    $client,
    $bucket,
    $formInputs,
    $options,
    $expires
);

// Get attributes for the HTML form, for example, action, method, enctype.
$formAttributes = $postObject->getFormAttributes();

// Get attributes for the HTML form values.
$formInputs = $postObject->getFormInputs();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>PHP</title>
</head>
<body>
<form action="<?php echo $formAttributes['action'] ?>" method="<?php echo $formAttributes['method'] ?>"
      enctype="<?php echo $formAttributes['enctype'] ?>">
    <label id="key">
        <input hidden type="text" name="key" value="<?php echo $starts_with ?><?php echo $formInputs['key'] ?>"/>
    </label>
    <h3>$formInputs:</h3>
    acl: <label id="acl">
        <input readonly type="text" name="acl" value="<?php echo $formInputs['acl'] ?>"/>
    </label><br/>
    X-Amz-Credential: <label id="credential">
        <input readonly type="text" name="X-Amz-Credential" value="<?php echo $formInputs['X-Amz-Credential'] ?>"/>
    </label><br/>
    X-Amz-Algorithm: <label id="algorithm">
        <input readonly type="text" name="X-Amz-Algorithm" value="<?php echo $formInputs['X-Amz-Algorithm'] ?>"/>
    </label><br/>
    X-Amz-Date: <label id="date">
        <input readonly type="text" name="X-Amz-Date" value="<?php echo $formInputs['X-Amz-Date'] ?>"/>
    </label><br/><br/><br/>
    Policy: <label id="policy">
        <input readonly type="text" name="Policy" value="<?php echo $formInputs['Policy'] ?>"/>
    </label><br/>
    X-Amz-Signature: <label id="signature">
        <input readonly type="text" name="X-Amz-Signature" value="<?php echo $formInputs['X-Amz-Signature'] ?>"/>
    </label><br/><br/>
    <h3>Choose file:</h3>
    <input type="file" name="file"/> <br/><br/>
    <h3>Upload file:</h3>
    <input type="submit" name="submit" value="Upload to Amazon S3"/>
</form>
</body>
</html>
```

# AWS SDK for PHP バージョン 3 での静的ウェブホストとしての Amazon S3 バケットの使用
<a name="s3-examples-static-web-host"></a>

静的ウェブサイトを Amazon S3 上でホスティングすることができます。詳細については、「[Amazon S3 での静的ウェブサイトのホスティング](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [GetBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketwebsite) を使用した、バケットのウェブサイト設定の取得。
+ [PutBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketwebsite) を使用した、バケットのウェブサイト設定のセットアップ。
+ [DeleteBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#deletebucketwebsite) を使用した、バケットのウェブサイト設定の削除。

AWS SDK for PHP バージョン 3 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="credentials-s3-examples-static-web-host"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します。AWS SDK for PHP バージョン 3 の認証情報を参照してください。

## バケットのウェブサイト設定の取得、設定および削除
<a name="get-set-and-delete-the-website-configuration-for-a-bucket"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

// Retrieving the Bucket Website Configuration
$bucket = 'amzn-s3-demo-bucket';
try {
    $resp = $s3Client->getBucketWebsite([
        'Bucket' => $bucket
    ]);
    echo "Succeed in retrieving website configuration for bucket: " . $bucket . "\n";
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}

// Setting a Bucket Website Configuration
$params = [
    'Bucket' => $bucket,
    'WebsiteConfiguration' => [
        'ErrorDocument' => [
            'Key' => 'foo',
        ],
        'IndexDocument' => [
            'Suffix' => 'bar',
        ],
    ]
];

try {
    $resp = $s3Client->putBucketWebsite($params);
    echo "Succeed in setting bucket website configuration.\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}

// Deleting a Bucket Website Configuration
try {
    $resp = $s3Client->deleteBucketWebsite([
        'Bucket' => $bucket
    ]);
    echo "Succeed in deleting policy for bucket: " . $bucket . "\n";
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 での Amazon S3 バケットポリシーの使用
<a name="s3-examples-bucket-policies"></a>

バケットポリシーを使用して、Amazon S3 リソースに対するアクセス許可を付与できます。詳細については、「[バケットポリシーとユーザーポリシーの使用](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [GetBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketpolicy) を使用した、指定バケットのポリシーの取得。
+ [PutBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketpolicy) を使用した、バケットでのポリシーの置き換え。
+ [DeleteBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#deletebucketpolicy) を使用したバケットからのポリシーの削除。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## バケットのポリシーの取得、削除、および置き換え
<a name="get-delete-and-replace-a-policy-on-a-bucket"></a>

 **インポート**。

```
require "vendor/autoload.php";

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

$bucket = 'amzn-s3-demo-bucket';

// Get the policy of a specific bucket
try {
    $resp = $s3Client->getBucketPolicy([
        'Bucket' => $bucket
    ]);
    echo "Succeed in receiving bucket policy:\n";
    echo $resp->get('Policy');
    echo "\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}

// Deletes the policy from the bucket
try {
    $resp = $s3Client->deleteBucketPolicy([
        'Bucket' => $bucket
    ]);
    echo "Succeed in deleting policy of bucket: " . $bucket . "\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}

// Replaces a policy on the bucket
try {
    $resp = $s3Client->putBucketPolicy([
        'Bucket' => $bucket,
        'Policy' => 'foo policy',
    ]);
    echo "Succeed in put a policy on bucket: " . $bucket . "\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 での S3 アクセスポイント ARN の使用
<a name="s3-examples-access-point-arn"></a>

S3 では、S3 バケットと対話する新しい方法であるアクセスポイントが導入されました。アクセスポイントには、バケットに直接ではなく、一意のポリシーと設定を適用できます。AWS SDK for PHP では、バケット名を明示的に指定するのではなく、バケットフィールドでアクセスポイントの ARN を API オペレーションに使用できます。S3 アクセスポイントと ARN の仕組みの詳細については、[こちら](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html)を参照してください 以下の例では、次の方法を示しています。
+ [GetObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject) をアクセスポイントの ARN とともに使用して、バケットからオブジェクトを取得します。
+ バケットにオブジェクトを追加するには、アクセスポイントの ARN とともに [PutObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject) を使用します。
+ クライアントリージョンの代わりに ARN リージョンを使用するように S3 クライアントを設定します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\S3\S3Client;
```

## Get Object
<a name="get-object"></a>

まず AWS リージョンとバージョンを指定する AWS.S3 クライアントサービスを作成します。次に、キーと `getObject` フィールドの S3 アクセスポイントの ARN を指定して `Bucket` メソッドを呼び出します。これにより、そのアクセスポイントに関連付けられたバケットからオブジェクトが取得されます。

 **サンプルコード** 

```
$s3 = new S3Client([
    'version'     => 'latest',
    'region'      => 'us-west-2',
]);
$result = $s3->getObject([
    'Bucket' => 'arn:aws:s3:us-west-2:123456789012:accesspoint:endpoint-name',
    'Key' => 'MyKey'
]);
```

## バケットにオブジェクトを配置する
<a name="put-an-object-in-a-bucket"></a>

まず AWS リージョンとバージョンを指定する AWS.S3 クライアントサービスを作成します。次に、必要なキー、本文やソースファイル、および `putObject` フィールドに S3 アクセスポイントの ARN を指定して `Bucket` メソッドを呼び出します。これにより、そのアクセスポイントに関連付けられたバケットにオブジェクトが格納されます。

 **サンプルコード** 

```
$s3 = new S3Client([
    'version'     => 'latest',
    'region'      => 'us-west-2',
]);
$result = $s3->putObject([
    'Bucket' => 'arn:aws:s3:us-west-2:123456789012:accesspoint:endpoint-name',
    'Key' => 'MyKey',
    'Body' => 'MyBody'
]);
```

## クライアントリージョンの代わりに ARN リージョンを使用するように S3 クライアントを設定する
<a name="configure-the-s3-client-to-use-the-arn-region-instead-of-the-client-region"></a>

S3 クライアントオペレーションで S3 アクセスポイント の ARN を使用する場合、デフォルトでは、クライアントは ARN リージョンがクライアントリージョンと一致していることを確認し、一致していない場合は例外をスローします。この動作は、`use_arn_region` 設定オプションを `true` に設定することで、クライアントリージョン上で ARN リージョンを受け入れるように変更できます。デフォルトでは、オプションは `false` に設定されています。

 **サンプルコード** 

```
$s3 = new S3Client([
    'version'        => 'latest',
    'region'         => 'us-west-2',
    'use_arn_region' => true
]);
```

クライアントは、環境変数と Config ファイルオプションも次の優先順位でチェックします。

1. 上記の例のような、`use_arn_region` クライアントオプション。

1. 環境変数 `AWS_S3_USE_ARN_REGION` 

```
export AWS_S3_USE_ARN_REGION=true
```

1. `s3_use_arn_region` 共有設定ファイルの config 変数 AWS (デフォルトでは `~/.aws/config` にあります)。

```
[default]
s3_use_arn_region = true
```

# AWS SDK for PHP バージョン 3 で Amazon S3 マルチリージョンアクセスポイントを使用する
<a name="s3-multi-region-access-points"></a>

[Amazon Simple Storage Service (S3) マルチリージョンアクセスポイント](https://docs.aws.amazon.com//AmazonS3/latest/userguide/MultiRegionAccessPoints.html)は、 AWS リージョン間で Amazon S3 リクエストトラフィックをルーティングするためのグローバルエンドポイントを提供します。

マルチリージョンアクセスポイントは[、 SDK for PHP、別の SDK、S3 コンソール、または CLI を使用して](https://docs.aws.amazon.com//aws-sdk-php/v3/api/api-s3control-2018-08-20.html#createmultiregionaccesspoint)作成できます。 AWS [S3 AWS](https://docs.aws.amazon.com//AmazonS3/latest/userguide/multi-region-access-point-create-examples.html)

**重要**  
SDK for PHP でマルチリージョンアクセスポイントを使用するには、PHP 環境に [AWS Common Runtime (AWS CRT) 拡張機能](guide_crt.md)がインストールされている必要があります。

マルチリージョンアクセスポイントを作成すると、Amazon S3 は次の形式の Amazon リソースネーム (ARN) を生成します。

`arn:aws:s3::account-id:accesspoint/MultiRegionAccessPoint_alias`

`[getObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject)` および `[putObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject)` メソッドのバケット名の代わりに、生成された ARN を使用できます。

```
<?php
require './vendor/autoload.php';

use Aws\S3\S3Client;

// Assign the Multi-Region Access Point to a variable and use it place of a bucket name.
$mrap = 'arn:aws:s3::123456789012:accesspoint/mfzwi23gnjvgw.mrap';
$key = 'my-key';

$s3Client = new S3Client([
    'region' => 'us-east-1'
]);

$s3Client->putObject([
    'Bucket' => $mrap,
    'Key' => $key,
    'Body' => 'Hello World!'
]);

$result = $s3Client->getObject([
    'Bucket' => $mrap,
    'Key' => $key
]);

echo $result['Body'] . "\n";

// Clean up.
$result = $s3Client->deleteObject([
    'Bucket' => $mrap,
    'Key' => $key
]);

$s3Client->waitUntil('ObjectNotExists', ['Bucket' => $mrap, 'Key' => $key]);

echo "Object deleted\n";
```

# Secrets Manager API および AWS SDK for PHP バージョン 3 を使用したシークレットの管理
<a name="secretsmanager-examples-manage-secret"></a>

AWS Secrets Manager は、パスワード、API キー、データベース認証情報などの共有されたシークレットを保存し、管理します。Secrets Manager サービスにより、開発者はデプロイされたコードのハードコードされた認証情報を、Secrets Manager への埋め込みの呼び出しで置き換えることができます。

Secrets Manager では、Amazon Relational Database Service (Amazon RDS) データベースの認証情報のスケジュールされた自動ローテーションがネイティブにサポートされ、アプリケーションのセキュリティが向上します。また、Secrets Manager は、AWS Lambda を使って他のデータベースやサードパーティーのサービスのシークレットをシームレスにローテーションさせ、サービス固有の詳細を実装することができます。

以下の例では、次の方法を示しています。
+ [CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret) を使用してシークレットを作成します。
+ [GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue) を使用してシークレットを取得します。
+ [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets) を使用して、Secrets Manager によって保存されたすべてのシークレットをリストします。
+ [DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret) を使用して、指定されたシークレットの詳細を取得します。
+ [PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue) を使用して、指定されたシークレットを更新します。
+ [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret) を使用してシークレットの更新を設定します。
+ [DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret) を使用して、シークレットを削除対象としてマークします。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## Secrets Manager でのシークレットの作成
<a name="create-a-secret-in-asm"></a>

Secrets Manager でシークレットを作成するには、[CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret) オペレーションを使用します。

この例では、ユーザー名とパスワードは JSON 文字列として保存されます。

 **インポート**。

```
require 'vendor/autoload.php';
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);
$secretName = 'MySecretName';
$secret = json_encode([
    "username" => getenv("SMDEMO_USERNAME"),
    "password" => getenv("SMDEMO_PASSWORD"),
]);
$description = '<<Description>>';
try {
    $result = $client->createSecret([
        'Description' => $description,
        'Name' => $secretName,
        'SecretString' => $secret,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Secrets Manager からのシークレットの取得
<a name="retrieve-a-secret-from-asm"></a>

Secrets Manager に保存されているシークレットの値を取得するには、[GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue) オペレーションを使用します。

次の例では、`secret` シークレットは保存された値を含む文字列です。`username` の値が `<<USERNAME>>` で、`password` の値が `<<PASSWORD>>` の場合、`secret` 出力は 次のようになります。

```
{"username":"<<USERNAME>>","password":"<<PASSWORD>>"}
```

`json_decode($secret, true)` を使用して配列の値にアクセスします。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-east-1',
]);

$secretName = 'MySecretName';

try {
    $result = $client->getSecretValue([
        'SecretId' => $secretName,
    ]);
} catch (AwsException $e) {
    $error = $e->getAwsErrorCode();
    if ($error == 'DecryptionFailureException') {
        // Secrets Manager can't decrypt the protected secret text using the provided AWS KMS key.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'InternalServiceErrorException') {
        // An error occurred on the server side.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'InvalidParameterException') {
        // You provided an invalid value for a parameter.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'InvalidRequestException') {
        // You provided a parameter value that is not valid for the current state of the resource.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'ResourceNotFoundException') {
        // We can't find the resource that you asked for.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
}
// Decrypts secret using the associated KMS CMK.
// Depending on whether the secret is a string or binary, one of these fields will be populated.
if (isset($result['SecretString'])) {
    $secret = $result['SecretString'];
} else {
    $secret = base64_decode($result['SecretBinary']);
}
print $secret;
$secretArray = json_decode($secret, true);
$username = $secretArray['username'];
$password = $secretArray['password'];

// Your code goes here;
```

## Secrets Manager に保存されているシークレットのリスト
<a name="list-secrets-stored-in-asm"></a>

Secrets Manager によって保存されたすべてのシークレットのリストを取得するには、[ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

try {
    $result = $client->listSecrets([
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## シークレットに関する詳細情報の取得
<a name="retrieve-details-about-a-secret"></a>

保存されたシークレットには、更新ルールに関するメタデータ、最終アクセス時間または変更時間、ユーザーが作成したタグ、および Amazon リソースネーム (ARN) が含まれています。Secrets Manager に保存されている、指定されたシークレットの詳細を取得するには、[DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';

try {
    $result = $client->describeSecret([
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## シークレット値を更新する
<a name="update-the-secret-value"></a>

新しく暗号化されたシークレットの値を Secrets Manager に保存するには、[PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue) オペレーションを使用します。

これにより、シークレットの新しいバージョンが作成されます。シークレットのバージョンが既に存在する場合、`VersionStages` パラメータと `AWSCURRENT` の値を追加し、この値を取得するときに新しい値が使用されるようにします。

 **インポート**。

```
require 'vendor/autoload.php';
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);
$secretName = 'MySecretName';
$secret = json_encode([
    "username" => getenv("SMDEMO_USERNAME"),
    "password" => getenv("SMDEMO_PASSWORD"),
]);
try {
    $result = $client->putSecretValue([
        'SecretId' => $secretName,
        'SecretString' => $secret,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Secrets Manager の既存のシークレット値のローテーション
<a name="rotate-the-value-to-an-existing-secret-in-asm"></a>

Secrets Manager に保存されている既存のシークレットの値をローテーションするには、Lambda ローテーション関数と [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret) オペレーションを使用します。

開始する前に、シークレットをローテーションする Lambda 関数を作成します。現在、[AWS コードサンプルカタログ](https://docs.aws.amazon.com/code-samples/latest/catalog/code-catalog-lambda_functions-secretsmanager.html)には、Amazon RDS データベースの認証情報をローテーションするための複数の Lambda コード例が含まれています。

**注記**  
シークレットのローテーションの詳細については、「AWS Secrets Manager ユーザーガイド」の「[AWS Secrets Manager シークレットのローテーション](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)」を参照してください。

Lambda 関数を設定したら、新しいシークレットのローテーションを設定します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';
$lambda_ARN = 'arn:aws:lambda:us-west-2:123456789012:function:MyTestDatabaseRotationLambda';
$rules = ['AutomaticallyAfterDays' => 30];

try {
    $result = $client->rotateSecret([
        'RotationLambdaARN' => $lambda_ARN,
        'RotationRules' => $rules,
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

更新が設定されている場合、[RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret) オペレーションを使用して更新を実装できます。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';

try {
    $result = $client->rotateSecret([
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Secrets Manager からのシークレットの削除
<a name="delete-a-secret-from-asm"></a>

指定されたシークレットを Secrets Manager から削除するには、[DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret) オペレーションを使用します。シークレットが誤って削除されないようにするため、削除を元に戻すことが可能な復旧期間を指定できる DeletionDate スタンプが、自動的にシークレットに追加されます。復旧期間を指定しない場合のデフォルトの期間は、30 日です。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';

try {
    $result = $client->deleteSecret([
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 関連情報
<a name="related-information"></a>

AWS SDK for PHP の例では、AWS Secrets Manager API リファレンスの以下の REST オペレーションを使用しています。
+  [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) 
+  [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) 
+  [ListSecrets](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_ListSecrets.html) 
+  [DescribeSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DescribeSecret.html) 
+  [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html) 
+  [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 
+  [DeleteSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DeleteSecret.html) 

AWS Secrets Manager の使用の詳細については、[AWS Secrets Manager ユーザーガイド](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)を参照してください。

# AWS SDK for PHP バージョン 3 を使用した Amazon SES のコードサンプル
<a name="ses-examples"></a>

Amazon Simple Email Service (Amazon SES) は、ユーザー自身の E メールアドレスとドメインを使用して E メールを送受信するための、簡単で費用を削減できる方法を提供する E メールプラットフォームです。Amazon SES の詳細については、「[Amazon SES デベロッパーガイド](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)」を参照してください。

AWS には Amazon SES サービスの 2 つのバージョンがあり、これに対応して SDK for PHP には [SESClient](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Ses.SesClient.html) と [SESv2Client](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.SesV2.SesV2Client.html) という 2 つのバージョンのクライアントが用意されています。メソッドの呼び出し方法や結果は異なる場合がありますが、多くの場合、クライアントの機能は重複しています。この 2 つの API は独自の機能も備えているため、両方のクライアントを使用してすべての機能にアクセスできます。

このセクションの例ではすべてオリジナルの `SesClient` を使用しています。

AWS SDK for PHP バージョン 3 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

**Topics**
+ [E メールアドレスの検証](ses-verify.md)
+ [Eメールテンプレートを操作](ses-template.md)
+ [E メールフィルターの管理](ses-filters.md)
+ [E メールルールを使用する](ses-rules.md)
+ [送信アクティビティをモニタリングする](ses-send-email.md)
+ [送信者を承認する](ses-sender-policy.md)

# Amazon SES API および AWS SDK for PHP バージョン 3 を使用した E メールアイデンティティの検証
<a name="ses-verify"></a>

初めて Amazon Simple Email Service (Amazon SES) アカウントを使用し始めるとき、E メールの送信先となる同じ AWS リージョン内のすべての送信者と受取人を確認する必要があります。E メール送信の詳細については、「[Amazon SES を使用してメールを送信する](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-email.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [VerifyEmailIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#verifyemailidentity) を使用して E メールアドレスを確認する。
+ [VerifyDomainIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#verifydomainidentity) を使用して E メールドメインを確認する。
+ [ListIdentities](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listidentities) を使用して E メールアドレスをリストする。
+ [ListIdentities](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listidentities) を使用して E メールドメインをリストする。
+ [DeleteIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deleteidentity) を使用して E メールアドレスを削除する。
+ [DeleteIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deleteidentity) を使用して E メールドメインを削除する。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon SES の使用の詳細については、「[Amazon SES デベロッパーガイド](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)」を参照してください。

## E メールアドレスを検証する
<a name="verifying-email-addresses"></a>

Amazon SES は、確認済み E メールアドレスまたはドメインからのみ E メールを送信できます。E メールアドレスを確認することで、そのアドレスの所有者であることを示し、そのアドレスから E メールを送信することを Amazon SES に許可します。

以下のコード例を実行すると、指定したアドレスに Amazon SES により E メールが送信されます。お客様 (または E メールの受取人) が E メール内のリンクをクリックすると、アドレスが確認されます。

Amazon SES アカウントに E メールアドレスを追加するには、[VerifyEmailIdentity](https://docs.aws.amazon.com/ses/latest/APIReference/API_VerifyEmailIdentity.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$email = 'email_address';

try {
    $result = $SesClient->verifyEmailIdentity([
        'EmailAddress' => $email,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## E メールドメインを検証する
<a name="verify-an-email-domain"></a>

Amazon SES は、確認済み E メールアドレスまたはドメインからのみ E メールを送信できます。ドメインを確認することで、そのドメインの所有者であることを示します。ドメインを検証すると、そのドメインの任意のアドレスからの E メールの送信を Amazon SES に許可します。

以下のコード例を実行すると、Amazon SES により検証トークンが提供されます。ドメインの DNS 設定にトークンを追加する必要があります。詳細については、「Amazon Simple Email Service デベロッパーガイド」の「[Amazon SES でのドメインの検証](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-domain-procedure.html)」を参照してください。

Amazon SES アカウントに送信側ドメインを追加するには、[VerifyDomainIdentity](https://docs.aws.amazon.com/ses/latest/APIReference/API_VerifyDomainIdentity.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$domain = 'domain.name';

try {
    $result = $SesClient->verifyDomainIdentity([
        'Domain' => $domain,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## E メールアドレスをリストする
<a name="list-email-addresses"></a>

検証ステータスに関係なく、現在の AWS リージョンで送信された E メールアドレスのリストを取得するには、[ListIdentities](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListIdentities.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

try {
    $result = $SesClient->listIdentities([
        'IdentityType' => 'EmailAddress',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## E メールドメインをリストする
<a name="list-email-domains"></a>

検証ステータスに関係なく、現在の AWS リージョンで送信された E メールドメインのリストを取得するには、[ListIdentities](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListIdentities.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

try {
    $result = $SesClient->listIdentities([
        'IdentityType' => 'Domain',
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## E メールアドレスを削除する
<a name="delete-an-email-address"></a>

ID のリストから確認済み E メールアドレスを削除するには、[DeleteIdentity](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteIdentity.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$email = 'email_address';

try {
    $result = $SesClient->deleteIdentity([
        'Identity' => $email,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## E メールドメインを削除する
<a name="delete-an-email-domain"></a>

確認済み ID のリストから確認済み E メールドメインを削除するには、[DeleteIdentity](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteIdentity.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$domain = 'domain.name';

try {
    $result = $SesClient->deleteIdentity([
        'Identity' => $domain,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# Amazon SES API と AWS SDK for PHP バージョン 3 を使用したカスタムメールテンプレートの作成
<a name="ses-template"></a>

Amazon Simple Email Service (Amazon SES) では、テンプレートを使用して受取人ごとにパーソナライズされた E メールを送信できます。テンプレートには、件名、E メール本文のテキストパートと HTML パートが含まれています。件名および本文セクションには、受取人ごとにパーソナライズされたユニークな値を含めることもできます。

詳細については、「Amazon Simple Email Service デベロッパーガイド」の「[Amazon SES を使用してパーソナライズされた E メールを送信する](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [CreateTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createtemplate) を使用して E メールテンプレートを作成する。
+ [ListTemplates](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listtemplates) を使用してすべての E メールテンプレートをリストする。
+ [GetTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#gettemplate) を使用して E メールテンプレートを取得する。
+ [UpdateTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#updateTemplate) を使用して E メールテンプレートを更新する。
+ [DeleteTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletetemplate) を使用して E メールテンプレートを削除する。
+ [SendTemplatedEmail](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#sendtemplatedemail) を使用してテンプレート E メールを送信する。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon SES の使用の詳細については、「[Amazon SES デベロッパーガイド](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)」を参照してください。

## E メールテンプレートを作成する
<a name="create-an-email-template"></a>

パーソナライズされた E メールメッセージを送信するためのテンプレートを作成するには、[CreateTemplate](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateTemplate.html) オペレーションを使用します。このテンプレートは、テンプレートが追加された AWS リージョンでのメッセージの送信が承認されたどのアカウントでも使用できます。

**注記**  
Amazon SES は HTML を検証しないため、E メールを送信する前に必ず *HtmlPart* が有効であることを確認してください。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$name = 'Template_Name';
$html_body = '<h1>AWS Amazon Simple Email Service Test Email</h1>' .
    '<p>This email was sent with <a href="https://aws.amazon.com/ses/">' .
    'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">' .
    'AWS SDK for PHP</a>.</p>';
$subject = 'Amazon SES test (AWS SDK for PHP)';
$plaintext_body = 'This email was send with Amazon SES using the AWS SDK for PHP.';

try {
    $result = $SesClient->createTemplate([
        'Template' => [
            'HtmlPart' => $html_body,
            'SubjectPart' => $subject,
            'TemplateName' => $name,
            'TextPart' => $plaintext_body,
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## E メールテンプレートを取得する
<a name="get-an-email-template"></a>

件名、HTML 本文、プレーンテキストを含む既存の E メールテンプレートのコンテンツを表示するには、[GetTemplate](https://docs.aws.amazon.com/ses/latest/APIReference/API_GetTemplate.html) オペレーションを使用します。TemplateName のみ必須です。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$name = 'Template_Name';

try {
    $result = $SesClient->getTemplate([
        'TemplateName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## すべての E メールテンプレートをリストする
<a name="list-all-email-templates"></a>

現在の AWS リージョンにあるお客様の AWS アカウント に関連付けられているすべての E メールテンプレートのリストを取得するには、[ListTemplates](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListTemplates.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

try {
    $result = $SesClient->listTemplates([
        'MaxItems' => 10,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## E メールテンプレートを更新する
<a name="update-an-email-template"></a>

件名、HTML 本文、プレーンテキストを含む特定の E メールテンプレートのコンテンツを変更するには、[UpdateTemplate](https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdadteTemplate.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$name = 'Template_Name';
$html_body = '<h1>AWS Amazon Simple Email Service Test Email</h1>' .
    '<p>This email was sent with <a href="https://aws.amazon.com/ses/">' .
    'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">' .
    'AWS SDK for PHP</a>.</p>';
$subject = 'Amazon SES test (AWS SDK for PHP)';
$plaintext_body = 'This email was send with Amazon SES using the AWS SDK for PHP.';

try {
    $result = $SesClient->updateTemplate([
        'Template' => [
            'HtmlPart' => $html_body,
            'SubjectPart' => $subject,
            'TemplateName' => $name,
            'TextPart' => $plaintext_body,
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## E メールテンプレートを削除する
<a name="delete-an-email-template"></a>

特定の E メールテンプレートを削除するには、[DeleteTemplate](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteTemplate.html) オペレーションを使用します。必要なのは TemplateName だけです。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$name = 'Template_Name';

try {
    $result = $SesClient->deleteTemplate([
        'TemplateName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## テンプレートを使用して E メールを送信する
<a name="send-an-email-with-a-template"></a>

テンプレートを使用して E メールを受取人に送信するには、[SendTemplatedEmail](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendTemplatedEmail.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$template_name = 'Template_Name';
$sender_email = 'email_address';
$recipient_emails = ['email_address'];

try {
    $result = $SesClient->sendTemplatedEmail([
        'Destination' => [
            'ToAddresses' => $recipient_emails,
        ],
        'ReplyToAddresses' => [$sender_email],
        'Source' => $sender_email,

        'Template' => $template_name,
        'TemplateData' => '{ }'
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# Amazon SES API および AWS SDK for PHP バージョン 3 を使用した E メールフィルターの管理
<a name="ses-filters"></a>

E メールの送信に加えて、Amazon Simple Email Service (Amazon SES) を使用して E メールを受信することもできます。IP アドレスフィルタを使用すると、オプションで、特定の IP アドレスまたは IP アドレス範囲から送信されるメールを受け入れるか拒否するかを指定できます。詳細については、「[Amazon SES による E メール受信の IP アドレスフィルターの管理](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-managing-ip-filters.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [CreateReceiptFilter](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createreceiptfilter) を使用して E メールフィルターを作成する。
+ [ListReceiptFilters](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listreceiptfilters) を使用してすべての E メールフィルターをリストする。
+ [DeleteReceiptFilter](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletereceiptfilter) を使用して E メールフィルターを削除する。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon SES の使用の詳細については、「[Amazon SES デベロッパーガイド](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)」を参照してください。

## E メールフィルターを作成する
<a name="create-an-email-filter"></a>

特定の IP アドレスからの E メールを許可または拒否するには、[CreateReceiptFilter](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptFilter.html) オペレーションを使用します。このフィルターを識別するための IP アドレスまたはアドレスの範囲と、一意の名前入力します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$filter_name = 'FilterName';
$ip_address_range = '10.0.0.1/24';

try {
    $result = $SesClient->createReceiptFilter([
        'Filter' => [
            'IpFilter' => [
                'Cidr' => $ip_address_range,
                'Policy' => 'Block|Allow',
            ],
            'Name' => $filter_name,
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## すべての E メールフィルターをリストする
<a name="list-all-email-filters"></a>

現在の AWS リージョンにある AWS アカウント に関連付けられた IP アドレスフィルターをリストするには、[ListReceiptFilters](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListReceiptFilters.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

try {
    $result = $SesClient->listReceiptFilters();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## E メールフィルターを削除する
<a name="delete-an-email-filter"></a>

特定の IP アドレスの既存のフィルターを削除するには、[DeleteReceiptFilter](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteReceiptFilter.html) オペレーションを使用します。削除する受信フィルターを識別するための一意のフィルター名を入力します。

フィルタリングされるアドレス範囲を変更する必要がある場合、受信フィルターを削除して新たに作成することができます。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$filter_name = 'FilterName';

try {
    $result = $SesClient->deleteReceiptFilter([
        'FilterName' => $filter_name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# Amazon SES API および AWS SDK for PHP バージョン 3 を使用した E メールルールの作成と管理
<a name="ses-rules"></a>

E メールの送信に加えて、Amazon Simple Email Service (Amazon SES) を使用して E メールを受信することもできます。受信ルールを使用すると、所有する E メールアドレスやドメインで受信した E メールを Amazon SES で処理する方法を指定できます。ルールは、他の AWS サービス (Amazon S3、Amazon SNS、AWS Lambda が含まれますが、これらに限定されません) に E メールを送信できます。

詳細については、「[Amazon SES による E メール受信の受信ルールセットの管理](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-managing-receipt-rule-sets.html)」と「[Amazon SES E メール受信のための受信ルールの管理](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-managing-receipt-rules.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [CreateReceiptRuleSet](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createreceiptruleset) を使用して受信ルールセットを作成する。
+ [CreateReceiptRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createreceiptrule) を使用して受信ルールを作成する。
+ [DescribeReceiptRuleSet](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#describereceiptruleset) を使用して受信ルールセットを記述する。
+ [DescribeReceiptRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#describereceiptrule) を使用して受信ルールを記述する。
+ [ListReceiptRuleSets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listreceiptrulesets) を使用してすべての受信ルールセットをリストする。
+ [UpdateReceiptRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#updatereceiptrule) を使用して受信ルールを更新する。
+ [DeleteReceiptRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletereceiptrule) を使用して受信ルールを削除する。
+ [DeleteReceiptRuleSet](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletereceiptruleset) を使用して受信ルールセットを削除する。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon SES の使用の詳細については、「[Amazon SES デベロッパーガイド](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)」を参照してください。

## 受信ルールセットを作成する
<a name="create-a-receipt-rule-set"></a>

受信ルールセットには、受信ルールのコレクションが含まれています。受信ルールを作成するには、アカウントに少なくとも 1 つの受信ルールセットが関連付けられている必要があります。受信ルールセットを作成するには、一意の RuleSetName を指定し、[CreateReceiptRuleSet](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptRuleSet.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$name = 'Rule_Set_Name';

try {
    $result = $SesClient->createReceiptRuleSet([
        'RuleSetName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 受信ルールの作成
<a name="create-a-receipt-rule"></a>

受信ルールを既存の受信ルールセットに追加することで、受信 E メールを制御します。この例は、受信メッセージを Amazon S3 バケットに送信する受信ルールを作成する方法を示していますが、Amazon SNS と AWS Lambda にメッセージを送信することもできます。受信ルールを作成するには、ルールと RuleSetName を [CreateReceiptRule](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptRule.html) オペレーションに指定します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$rule_name = 'Rule_Name';
$rule_set_name = 'Rule_Set_Name';
$s3_bucket = 'Bucket_Name';

try {
    $result = $SesClient->createReceiptRule([
        'Rule' => [
            'Actions' => [
                [
                    'S3Action' => [
                        'BucketName' => $s3_bucket,
                    ],
                ],
            ],
            'Name' => $rule_name,
            'ScanEnabled' => true,
            'TlsPolicy' => 'Optional',
            'Recipients' => ['<string>']
        ],
        'RuleSetName' =>  $rule_set_name,

     ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 受信ルールセットを記述する
<a name="describe-a-receipt-rule-set"></a>

1 秒に 1 回、指定された受信ルールセットの詳細を返します。[DescribeReceiptRuleSet](https://docs.aws.amazon.com/ses/latest/APIReference/API_DescribeReceiptRuleSet.html) オペレーションを使用するには、RuleSetName を指定します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$name = 'Rule_Set_Name';

try {
    $result = $SesClient->describeReceiptRuleSet([
        'RuleSetName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 受信ルールを記述する
<a name="describe-a-receipt-rule"></a>

指定された受信ルールの詳細を返します。[DescribeReceiptRule](https://docs.aws.amazon.com/ses/latest/APIReference/API_DescribeReceiptRule.html) オペレーションを使用するには、RuleName と RuleSetName を指定します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$rule_name = 'Rule_Name';
$rule_set_name = 'Rule_Set_Name';

try {
    $result = $SesClient->describeReceiptRule([
        'RuleName' => $rule_name,
        'RuleSetName' => $rule_set_name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## すべての受信ルールセットをリストする
<a name="list-all-receipt-rule-sets"></a>

現在の AWS リージョンの AWS アカウント に存在する受信ルールセットをリストするには、[ListReceiptRuleSets](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListReceiptRuleSets.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

try {
    $result = $SesClient->listReceiptRuleSets();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 受信ルールを更新する
<a name="update-a-receipt-rule"></a>

この例は、受信メッセージを AWS Lambda 関数に送信する受信ルールを更新する方法を示していますが、Amazon SNS と Amazon S3 にメッセージを送信することもできます。[UpdateReceiptRule](https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdateReceiptRule.html) オペレーションを使用するには、新しい受信ルールと RuleSetName を指定します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$rule_name = 'Rule_Name';
$rule_set_name = 'Rule_Set_Name';
$lambda_arn = 'Amazon Resource Name (ARN) of the AWS Lambda function';
$sns_topic_arn = 'Amazon Resource Name (ARN) of the Amazon SNS topic';

try {
    $result = $SesClient->updateReceiptRule([
        'Rule' => [
            'Actions' => [
                'LambdaAction' => [
                    'FunctionArn' => $lambda_arn,
                    'TopicArn' => $sns_topic_arn,
                ],
            ],
            'Enabled' => true,
            'Name' => $rule_name,
            'ScanEnabled' => false,
            'TlsPolicy' => 'Require',
        ],
        'RuleSetName' => $rule_set_name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 受信ルールセットを削除する
<a name="delete-a-receipt-rule-set"></a>

現在無効になっていない指定された受信ルールセットを削除します。これにより、それに含まれるすべての受信ルールも削除されます。受信ルールセットを削除するには、RuleSetName を [DeleteReceiptRuleSet](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteReceiptRuleSet.html) オペレーションに設定します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$name = 'Rule_Set_Name';

try {
    $result = $SesClient->deleteReceiptRuleSet([
        'RuleSetName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 受信ルールを削除する
<a name="delete-a-receipt-rule"></a>

指定された受信ルールを削除するには、RuleName と RuleSetName を [DeleteReceiptRule](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteReceiptRule.html) オペレーションに設定します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
$SesClient = new Aws\Ses\SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-2'
]);

$rule_name = 'Rule_Name';
$rule_set_name = 'Rule_Set_Name';

try {
    $result = $SesClient->deleteReceiptRule([
        'RuleName' => $rule_name,
        'RuleSetName' => $rule_set_name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# Amazon SES API と AWS SDK for PHP バージョン 3 を使用した送信活動のモニタリング
<a name="ses-send-email"></a>

Amazon Simple Email Service (Amazon SES) は、送信アクティビティをモニタリングするための方法を提供しています。これらの方法を実装し、アカウントのバウンス率、苦情率、拒否率などの重要な指標を追跡することをお勧めします。バウンス率や苦情率が高すぎると、Amazon SES での E メール送信に支障が生じる場合があります。

以下の例では、次の方法を示しています。
+ [GetSendQuota](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#getsendquota) を使用して送信クォータを確認する。
+ [GetSendStatistics](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#getsendstatistics) を使用して送信アクティビティをモニタリングする。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon SES の使用の詳細については、「[Amazon SES デベロッパーガイド](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)」を参照してください。

## 送信クォータを確認する
<a name="check-your-sending-quota"></a>

24 時間以内に送信できるメッセージの量には一定の制限があります。送信可能な残りのメッセージ数を確認するには、[GetSendQuota](https://docs.aws.amazon.com/ses/latest/APIReference/API_GetSendQuota.html) オペレーションを使用します。詳細については、「[Amazon SES の送信制限の管理](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/manage-sending-limits.html)」を参照してください。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **サンプルコード** 

```
$SesClient = new SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-1'

]);

try {
    $result = $SesClient->getSendQuota();
    $send_limit = $result["Max24HourSend"];
    $sent = $result["SentLast24Hours"];
    $available = $send_limit - $sent;
    print("<p>You can send " . $available . " more messages in the next 24 hours.</p>");
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 送信アクティビティをモニタリングする
<a name="monitor-your-sending-activity"></a>

過去 2 週間以内に送信したメッセージのメトリクスを取得するには、[GetSendStatistics](https://docs.aws.amazon.com/ses/latest/APIReference/API_GetSendStatistics.html) オペレーションを使用します。この例では、配信試行数、バウンス数、苦情数、拒否されたメッセージ数が 15 分ごとに返されます。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **サンプルコード** 

```
$SesClient = new SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-1'
]);

try {
    $result = $SesClient->getSendStatistics();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# Amazon SES API および AWS SDK for PHP バージョン 3 を使用した送信者の認証
<a name="ses-sender-policy"></a>

お客様の代わりに別の AWS アカウント、AWS Identity and Access Management ユーザー、または AWS サービスが Amazon Simple Email Service (Amazon SES) を介して E メールを送信できるようにするには、送信認可ポリシーを作成します。これは、お客様が所有しているアイデンティティにアタッチする JSON ドキュメントです。

このポリシーには、そのアイデンティティでの送信を許可するユーザーとその条件が明示的にリストされます。お客様とポリシーでアクセス許可を明示的に付与したエンティティ以外のすべての送信者は、E メールの送信が許可されません。アイデンティティにはポリシーをアタッチしないことも、1 つまたは複数のポリシーをアタッチすることもできます。さらに、複数のステートメントを含む 1 つのポリシーを作成して、複数のポリシーの効果を持たせることもできます。

詳細については、「[Amazon SES での送信承認の使用](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [PutIdentityPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createidentitypolicy) を使用して承認済み送信者を作成する。
+ [GetIdentityPolicies](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#getidentitypolicies) を使用して承認済み送信者のポリシーを取得する。
+ [ListIdentityPolicies](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listidentitypolicies) を使用して承認済み送信者をリストする。
+ [DeleteIdentityPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deleteidentitypolicy) を使用して承認済み送信者のアクセス許可を取り消す。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

Amazon SES の使用の詳細については、「[Amazon SES デベロッパーガイド](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)」を参照してください。

## 承認済み送信者を作成する
<a name="create-an-authorized-sender"></a>

別の AWS アカウント がお客様の代わりに E メールを送信することを承認するには、アイデンティティポリシーを使用し、確認済みの E メールアドレスまたはドメインから E メールを送信する認可を追加または更新します。アイデンティティポリシーを作成するには、[PutIdentityPolicy](https://docs.aws.amazon.com/ses/latest/APIReference/API_PutIdentityPolicy.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **サンプルコード** 

```
$SesClient = new SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-1'
]);

$identity = "arn:aws:ses:us-east-1:123456789012:identity/example.com";
$other_aws_account = "0123456789";
$policy = <<<EOT
{
  "Id":"ExampleAuthorizationPolicy",
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Sid":"AuthorizeAccount",
      "Effect":"Allow",
      "Resource":"$identity",
      "Principal":{
        "AWS":[ "$other_aws_account" ]
      },
      "Action":[
        "SES:SendEmail",
        "SES:SendRawEmail"
      ]
    }
  ]
}
EOT;
$name = "policyName";

try {
    $result = $SesClient->putIdentityPolicy([
        'Identity' => $identity,
        'Policy' => $policy,
        'PolicyName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 承認済み送信者のポリシーを取得する
<a name="retrieve-polices-for-an-authorized-sender"></a>

特定の E メールアイデンティティまたはドメインアイデンティティに関連付けられている送信承認ポリシーを返します。指定された E メールアドレスまたはドメインの送信承認を取得するには、[GetIdentityPolicy](https://docs.aws.amazon.com/ses/latest/APIReference/API_GetIdentityPolicy.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **サンプルコード** 

```
$SesClient = new SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-1'
]);

$identity = "arn:aws:ses:us-east-1:123456789012:identity/example.com";
$policies = ["policyName"];

try {
    $result = $SesClient->getIdentityPolicies([
        'Identity' => $identity,
        'PolicyNames' => $policies,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 承認済み送信者をリストする
<a name="list-authorized-senders"></a>

現在の AWS リージョンの特定の E メールアイデンティティまたはドメインアイデンティティに関連付けられている送信認可ポリシーをリストするには、[ListIdentityPolicies](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListIdentityPolicies.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **サンプルコード** 

```
$SesClient = new SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-1'
]);

$identity = "arn:aws:ses:us-east-1:123456789012:identity/example.com";

try {
    $result = $SesClient->listIdentityPolicies([
        'Identity' => $identity,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## 承認済み送信者のアクセス許可を取り消す
<a name="revoke-permission-for-an-authorized-sender"></a>

別の AWS アカウント が E メールアイデンティティまたはドメインアイデンティティを持つ E メールを送信する送信認可を削除するには、[DeleteIdentityPolicy](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteIdentityPolicy.html) オペレーションを使用して関連付けられたアイデンティティポリシーを削除します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **サンプルコード** 

```
$SesClient = new SesClient([
    'profile' => 'default',
    'version' => '2010-12-01',
    'region' => 'us-east-1'
]);

$identity = "arn:aws:ses:us-east-1:123456789012:identity/example.com";
$name = "policyName";

try {
    $result = $SesClient->deleteIdentityPolicy([
        'Identity' => $identity,
        'PolicyName' => $name,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 を使用した Amazon SNS の例
<a name="sns-examples"></a>

Amazon Simple Notification Service (Amazon SNS) は、サブスクライブしているエンドポイントまたはクライアントへのメッセージの配信または送信を調整して管理するウェブサービスです。

Amazon SNS には、発行者 (生産者とも呼ばれます) とサブスクライバー (消費者とも呼ばれます) という 2 種類のクライアントが存在します。発行者は、論理アクセスポイントおよび通信チャネルであるトピックにメッセージを作成して送信することで、受信者と非同期的に通信します。サブスクライバー (ウェブサーバー、E メールアドレス、Amazon SQS キュー、 AWS Lambda 関数) は、トピックにサブスクライブするときに、サポートされているプロトコル (Amazon SQS、HTTP/HTTPS URLs、E メール AWS SMS、Lambda) のいずれかを介してメッセージまたは通知を消費または受信します。

 AWS SDK for PHP バージョン 3 のすべてのサンプルコードは[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

**Topics**
+ [トピックを管理する](sns-examples-managing-topics.md)
+ [サブスクリプションの管理](sns-examples-subscribing-unsubscribing-topics.md)
+ [Amazon SMS メッセージを送信する](sns-examples-sending-sms.md)

# AWS SDK for PHP バージョン 3 を使用した Amazon SNS でのトピックの管理
<a name="sns-examples-managing-topics"></a>

Amazon Simple Queue Service (Amazon SQS)、HTTP/HTTPS URL、E メール、AWS SMS または AWS Lambda に通知を送信するには、まずそのトピックのサブスクライバへのメッセージ配信を管理するトピックを管理する必要があります。

オブザーバー設計パターンの観点で言うと、トピックは件名と同様です。トピックが作成されたら、メッセージがトピックに発行されたときに自動的に通知を受け取るサブスクライバを追加します。

トピックへのサブスクライブの詳細については、「[AWS SDK for PHP バージョン 3 を使用した Amazon SNS でのサブスクリプションの管理](sns-examples-subscribing-unsubscribing-topics.md)」を参照してください。

以下の例では、次の方法を示しています。
+ [CreateTopic](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#createtopic) を使用して通知を発行するトピックを作成する。
+ [ListTopics](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#listtopic) を使用してリクエスタのトピックのリストを返す。
+ [DeleteTopic](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#deletetopic) を使用してトピックとそのすべてのサブスクリプションを削除する。
+ [GetTopicAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#gettopicattributes) を使用してトピックのすべてのプロパティを返す。
+ [SetTopicAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#settopicattributes) を使用して、トピックの所有者がトピックの属性を新しい値に設定できるようにする。

Amazon SNS の使用の詳細については、「[メッセージの配信ステータスの Amazon SNS トピック属性を使用する](https://docs.aws.amazon.com/sns/latest/dg/sns-topic-attributes.html)を」参照してください。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## トピックの作成
<a name="create-a-topic"></a>

トピックを作成するには、[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html) オペレーションを使用します。

AWS アカウント 内の各トピック名は一意にする必要があります。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$topicname = 'myTopic';

try {
    $result = $SnSclient->createTopic([
        'Name' => $topicname,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックをリストする
<a name="list-your-topics"></a>

現在の AWS リージョンにおける最大 100 件の既存のトピックをリストするには、[ListTopics](https://docs.aws.amazon.com/sns/latest/api/API_ListTopics.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->listTopics();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックの削除
<a name="delete-a-topic"></a>

既存のトピックとそのすべてのサブスクリプションを削除するには、[DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html) オペレーションを使用します。

サブスクライバにまだ配信されていないメッセージもすべて削除されます。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->deleteTopic([
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピック属性を取得する
<a name="get-topic-attributes"></a>

1 つの既存のトピックのプロパティを取得するには、[GetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetTopicAttributes.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->getTopicAttributes([
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピック属性を設定する
<a name="set-topic-attributes"></a>

1 つの既存のトピックのプロパティを更新するには、[SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html) オペレーションを使用します。

`Policy`、`DisplayName`、および `DeliveryPolicy` 属性のみ設定できます。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);
$attribute = 'Policy | DisplayName | DeliveryPolicy';
$value = 'First Topic';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->setTopicAttributes([
        'AttributeName' => $attribute,
        'AttributeValue' => $value,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 を使用した Amazon SNS でのサブスクリプションの管理
<a name="sns-examples-subscribing-unsubscribing-topics"></a>

Amazon Simple Notification Service (Amazon SNS) トピックを使用して、Amazon Simple Queue Service (Amazon SQS)、HTTP/HTTPS、E メールアドレス、 AWS Server Migration Service (AWS SMS)、または に通知を送信します AWS Lambda。

サブスクリプションは、サブスクライバへのメッセージの送信を管理するトピックにアタッチされます。トピックの作成の詳細については、[「 AWS SDK for PHP バージョン 3 を使用した Amazon SNS でのトピックの管理](sns-examples-managing-topics.md)」を参照してください。

以下の例では、次の方法を示しています。
+ [Subscribe](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#subscribe) を使用して既存のトピックにサブスクライブする。
+ [ConfirmSubscription](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#confirmsubscription) を使用してサブスクリプションを確認する。
+ [ListSubscriptionsByTopic](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#listsubscriptionsbytopic) を使用して既存のサブスクリプションをリストする。
+ [Unsubscribe](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#unsubscribe) を使用してサブスクリプションを削除する。
+ [Publish](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#publish) を使用してトピックのすべてのサブスクライバにメッセージを送信する。

Amazon SNS の使用の詳細については、「[Amazon SNS を使用したシステム間メッセージング](https://docs.aws.amazon.com/sns/latest/dg/sns-system-to-system-messaging.html)」を参照してください。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

## E メールアドレスを SNS トピックにサブスクライブする
<a name="subscribe-an-email-address-to-a-topic"></a>

E メールアドレスへのサブスクリプションを開始するには、[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) オペレーションを使用します。

subscribe メソッドを使用し、渡されるパラメータに使用する値に応じて Amazon SNS トピックに複数のさまざまなエンドポイントをサブスクライブできます。これは、このトピックの他の例に示されます。

この例では、エンドポイントは E メールアドレスです。確認トークンがこの E メールに送信されます。受け取ってから 3 日以内に、この確認トークンを使用してサブスクリプションを確認します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'email';
$endpoint = 'sample@example.com';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## アプリケーションエンドポイントをトピックにサブスクライブする
<a name="subscribe-an-application-endpoint-to-a-topic"></a>

ウェブアプリへのサブスクリプションを開始するには、[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) オペレーションを使用します。

subscribe メソッドを使用し、渡されるパラメータに使用する値に応じて Amazon SNS トピックに複数のさまざまなエンドポイントをサブスクライブできます。これは、このトピックの他の例に示されます。

この例では、エンドポイントは URL です。確認トークンがこのウェブアドレスに送信されます。受け取ってから 3 日以内に、この確認トークンを使用してサブスクリプションを確認します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'https';
$endpoint = 'https://';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## Lambda 関数をトピックにサブスクライブする
<a name="subscribe-a-lam-function-to-a-topic"></a>

Lambda 関数へのサブスクリプションを開始するには、[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) オペレーションを使用します。

subscribe メソッドを使用し、渡されるパラメータに使用する値に応じて Amazon SNS トピックに複数のさまざまなエンドポイントをサブスクライブできます。これは、このトピックの他の例に示されます。

この例では、エンドポイントは Lambda 関数です。確認トークンがこの Lambda 関数に送信されます。受け取ってから 3 日以内に、この確認トークンを使用してサブスクリプションを確認します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'lambda';
$endpoint = 'arn:aws:lambda:us-east-1:123456789023:function:messageStore';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックにテキスト SMS をサブスクライブする
<a name="subscribe-a-text-sms-to-a-topic"></a>

複数の電話番号に SMS メッセージを同時に送信するには、各番号をトピックにサブスクライブします。

電話番号へのサブスクリプションを開始するには、[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) オペレーションを使用します。

subscribe メソッドを使用し、渡されるパラメータに使用する値に応じて Amazon SNS トピックに複数のさまざまなエンドポイントをサブスクライブできます。これは、このトピックの他の例に示されます。

この例では、エンドポイントは E.164 形式 (国際的な音声通信の規格) の電話番号です。

確認トークンがこの電話番号に送信されます。受け取ってから 3 日以内に、この確認トークンを使用してサブスクリプションを確認します。

Amazon SNS を使用して SMS メッセージを送信するもう 1 つの方法については、「[AWS SDK for PHP バージョン 3 を使用した Amazon SNS での SMS メッセージの送信](sns-examples-sending-sms.md)」を参照してください。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'sms';
$endpoint = '+1XXX5550100';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックへのサブスクリプションを確認する
<a name="confirm-subscription-to-a-topic"></a>

実際にサブスクリプションを作成するには、エンドポイントの所有者が、前述のとおりサブスクリプションが最初に確立されたときに送信されるトークンを使用して、トピックからメッセージを受信する意思があることを確認する必要があります。確認トークンの有効期間は 3 日間です。3 日間後、新しいサブスクリプションを作成することでトークンを再送信することができます。

サブスクリプションを確認するには、[ConfirmSubscription](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$subscription_token = 'arn:aws:sns:us-east-1:111122223333:MyTopic:123456-abcd-12ab-1234-12ba3dc1234a';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->confirmSubscription([
        'Token' => $subscription_token,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックへのサブスクリプションをリストする
<a name="list-subscriptions-to-a-topic"></a>

特定の AWS リージョンで最大 100 個の既存のサブスクリプションを一覧表示するには、[ListSubscriptions](https://docs.aws.amazon.com/sns/latest/api/API_ListSubscriptions.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->listSubscriptions();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックからサブスクリプションを解除する
<a name="unsubscribe-from-a-topic"></a>

トピックにサブスクライブされたエンドポイントを削除するには、[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html) オペレーションを使用します。

サブスクリプションの削除に認証が必要な場合は、サブスクリプションの所有者またはトピックの所有者のみがサブスクリプションを解除でき、 AWS 署名が必要です。サブスクリプション解除呼び出しに認証が必要なく、リクエスタがサブスクリプション所有者でない場合は、最終的なキャンセル確認メッセージがエンドポイントに配信されます。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$subscription = 'arn:aws:sns:us-east-1:111122223333:MySubscription';

try {
    $result = $SnSclient->unsubscribe([
        'SubscriptionArn' => $subscription,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## Amazon SNS トピックへのメッセージの発行
<a name="publish-a-message-to-an-sns-topic"></a>

Amazon SNS トピックにサブスクライブされた各エンドポイントにメッセージを配信するには、[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) オペレーションを使用します。

Amazon SNS トピックのメッセージテキストと Amazon リソースネーム (ARN) など、メッセージを発行するためのパラメータを含むオブジェクトを作成します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->publish([
        'Message' => $message,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 による Amazon SNS での SMS メッセージの送信
<a name="sns-examples-sending-sms"></a>

Amazon Simple Notification Service (Amazon SNS) を使用して、SMS 対応デバイスにテキストメッセージ (SMS メッセージ) を送信できます。多くの電話番号にトピックを取り上げ、トピックへメッセージを送信することにより、電話番号へメッセージを直接送信または、一度に複数の電話番号にメッセージを送信できます。

Amazon SNS を使用して、配信の最適化の方法 (コストに対してか、確実な配信に対してか)、毎月の使用量の上限、メッセージ配信がログに記録される方法、SMS の毎日の使用状況レポートをサブスクライブするかどうかなど、SMS メッセージのプリファレンスを指定します。これらのプリファレンスが取得され、Amazon SNS の SMS 属性として設定されます。

SMS メッセージを送信するときは、E.164 形式を使用して電話番号を指定します。E.164 は、国際的な音声通信に使用される電話番号の構造の規格です。この形式に従う電話番号には最大 15 桁を設定でき、プラス記号 (\$1) および国コードのプレフィックスがついています。たとえば、E.164 形式の米国の電話番号は \$11001XXX5550100 として表示されます。

以下の例では、次の方法を示しています。
+ [GetSMSAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#getsmsattributes) を使用して、アカウントから SMS メッセージを送信するためのデフォルト設定を取得する。
+ [SetSMSAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#setsmsattributes) を使用して、アカウントから SMS メッセージを送信するためのデフォルト設定を更新する。
+ [CheckIfPhoneNumberISOptedOut](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#checkifphonenumberisoptedout) を使用して、指定された電話番号の所有者がアカウントからの SMS メッセージの受信をオプトアウトしているかどうかを調べる。
+ [CheckIfPhoneNumberISOptedOut](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#listphonenumbersoptedout) を使用して、所有者がアカウントからの SMS メッセージの受信をオプトアウトしている電話番号をリストする。
+ [Publish](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#publish) を使用して、電話番号に直接テキストメッセージ (SMS) を送信する。

Amazon SNS の使用の詳細については、「[受信者が携帯電話番号の場合のユーザー通知に Amazon SNS を使用する (SMS 送信)](https://docs.aws.amazon.com/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html)」を参照してください。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## SMS 属性の取得
<a name="get-sms-attributes"></a>

SMS メッセージのデフォルト設定を取得するには、[GetSMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetSMSAttributes.html) オペレーションを使用します。

この例では、`DefaultSMSType` 属性を取得します。この属性は、SMS メッセージが `Promotional` (コストが最も低くなるようにメッセージ配信が最適化されます) として送信されるのか、`Transactional` (信頼性が最も高くなるようにメッセージ配信が最適化されます) として送信されるのかを制御します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->getSMSAttributes([
        'attributes' => ['DefaultSMSType'],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## SMS 属性の設定
<a name="set-sms-attributes"></a>

SMS メッセージのデフォルト設定を更新するには、[SetSMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html) オペレーションを使用します。

この例では、`DefaultSMSType` 属性を `Transactional` に設定します。これにより、信頼性が最も高くなるようにメッセージ配信が最適化されます。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->SetSMSAttributes([
        'attributes' => [
            'DefaultSMSType' => 'Transactional',
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## 電話番号がオプトアウトしているかどうかを確認する
<a name="check-if-a-phone-number-has-opted-out"></a>

指定された電話番号の所有者がアカウントからの SMS メッセージの受信をオプトアウトしているかどうかを調べるには、[CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/sns/latest/api/API_CheckIfPhoneNumberIsOptedOut.html) オペレーションを使用します。

この例では、電話番号は E.164 形式 (国際的な音声通信の規格) です。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$phone = '+1XXX5550100';

try {
    $result = $SnSclient->checkIfPhoneNumberIsOptedOut([
        'phoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## オプトアウトした電話番号を一覧表示する
<a name="list-opted-out-phone-numbers"></a>

所有者がアカウントからの SMS メッセージの受信をオプトアウトしている電話番号のリストを取得するには、[ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/sns/latest/api/API_ListPhoneNumbersOptedOut.html) オペレーションを使用します。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->listPhoneNumbersOptedOut();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## テキストメッセージ (SMS メッセージ) に発行する
<a name="publish-to-a-text-message-sms-message"></a>

電話番号に直接テキストメッセージ (SMS メッセージ) を配信するには、[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) オペレーションを使用します。

この例では、電話番号は E.164 形式 (国際的な音声通信の規格) です。

SMS メッセージには最大 140 バイト含めることができます。1 回の SMS 発行アクションのサイズ制限は、1,600 バイトです。

SMS メッセージの送信の詳細については、「[SMS メッセージの送信](https://docs.aws.amazon.com/sns/latest/dg/sms_publish-to-phone.html)」を参照してください。

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';
$phone = '+1XXX5550100';

try {
    $result = $SnSclient->publish([
        'Message' => $message,
        'PhoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 を使用した Amazon SQS のコード例
<a name="sqs-examples"></a>

Amazon Simple Queue Service (SQS) は、高速で、信頼性が高く、スケーラブルな、フルマネージド型のメッセージキューイングサービスです。Amazon SQSを使用すると、クラウドアプリケーションのコンポーネントを分離できます。Amazon SQS には、高スループットおよび少なくとも 1 回処理の標準キュー、および FIFO (先入先出) 配信および正確に 1 回のみ処理の FIFO キューが含まれています。

AWS SDK for PHP バージョン 3 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

**Topics**
+ [ロングポーリングの有効化](sqs-examples-enable-long-polling.md)
+ [可視性タイムアウトの管理](sqs-examples-managing-visibility-timeout.md)
+ [メッセージの送受信](sqs-examples-send-receive-messages.md)
+ [デッドレターキューの使用](sqs-examples-dead-letter-queues.md)
+ [キューの使用](sqs-examples-using-queues.md)

# AWS SDK for PHP バージョン 3 を使用した Amazon SQS でのロングポーリングの有効化
<a name="sqs-examples-enable-long-polling"></a>

ロングポーリングは、レスポンスの送信前にメッセージがキューで使用可能になるまで Amazon SQS が指定された時間待機できるようにすることで、空のレスポンス数を削減します。また、ロングポーリングでは、サーバーをサンプリングするのではなくすべてのサーバーをクエリすることによって、偽の空のレスポンスが排除されます。ロングポーリングを有効にするには、受信したメッセージについてゼロ以外の待機時間を指定します。詳細については、「[SQS ロングポーリング](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [SetQueueAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#setqueueattributes) を使用して、Amazon SQS キューの属性を設定し、ロングポーリングを有効にします。
+ [ReceiveMessage](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#receivemessage) を使用して、ロングポーリングで 1 つ以上のメッセージを取得する
+ [CreateQueue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#createqueue) を使用して、ロングポーリングキューを作成する

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## キューの属性を設定してロングポーリングを有効にする
<a name="set-attributes-on-a-queue-to-enable-long-polling"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$queueUrl = "QUEUE_URL";

$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->setQueueAttributes([
        'Attributes' => [
            'ReceiveMessageWaitTimeSeconds' => 20
        ],
        'QueueUrl' => $queueUrl, // REQUIRED
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## ロングポーリングでメッセージを取得する
<a name="retrieve-messages-with-long-polling"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$queueUrl = "QUEUE_URL";

$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->receiveMessage([
        'AttributeNames' => ['SentTimestamp'],
        'MaxNumberOfMessages' => 1,
        'MessageAttributeNames' => ['All'],
        'QueueUrl' => $queueUrl, // REQUIRED
        'WaitTimeSeconds' => 20,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## ロングポーリングでキューを作成する
<a name="create-a-queue-with-long-polling"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$queueName = "QUEUE_NAME";


$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->createQueue([
        'QueueName' => $queueName,
        'Attributes' => [
            'ReceiveMessageWaitTimeSeconds' => 20
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 による Amazon SQS での可視性タイムアウトの管理
<a name="sqs-examples-managing-visibility-timeout"></a>

可視性タイムアウトは、Amazon SQS によって他の消費コンポーネントがそのメッセージを受信および処理できなくなる期間です。詳細については、「[可視性タイムアウト](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [ChangeMessageVisibilityBatch](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#changemessagevisibilitybatch) を使用した、キュー内指定メッセージの可視性タイムアウトの新しい値への変更。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## 複数メッセージの可視性タイムアウトの変更
<a name="change-the-visibility-timeout-of-multiple-messages"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$queueUrl = "QUEUE_URL";

$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->receiveMessage(array(
        'AttributeNames' => ['SentTimestamp'],
        'MaxNumberOfMessages' => 10,
        'MessageAttributeNames' => ['All'],
        'QueueUrl' => $queueUrl, // REQUIRED
    ));
    $messages = $result->get('Messages');
    if ($messages != null) {
        $entries = array();
        for ($i = 0; $i < count($messages); $i++) {
            $entries[] = [
                'Id' => 'unique_is_msg' . $i, // REQUIRED
                'ReceiptHandle' => $messages[$i]['ReceiptHandle'], // REQUIRED
                'VisibilityTimeout' => 3600
            ];
        }
        $result = $client->changeMessageVisibilityBatch([
            'Entries' => $entries,
            'QueueUrl' => $queueUrl
        ]);

        var_dump($result);
    } else {
        echo "No messages in queue \n";
    }
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 を使用した Amazon SQS でのメッセージの送受信
<a name="sqs-examples-send-receive-messages"></a>

Amazon SQS メッセージの詳細については、「Service Quotas ユーザーガイド」の「[SQS キューへのメッセージの送信](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-send-message.html)」および「[SQS キューからのメッセージの受信および削除](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-receive-delete-message.html.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [SendMessage](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#sendmessage) を使用した、指定キューへのメッセージの配信。
+ [ReceiveMessage](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#receivemessage) を使用した、指定キューからのメッセージ (1 から 10 個) の取得。
+ [DeleteMessage](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#deletemessage) を使用した、キューからのメッセージの削除。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## メッセージの送信
<a name="send-a-message"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

$params = [
    'DelaySeconds' => 10,
    'MessageAttributes' => [
        "Title" => [
            'DataType' => "String",
            'StringValue' => "The Hitchhiker's Guide to the Galaxy"
        ],
        "Author" => [
            'DataType' => "String",
            'StringValue' => "Douglas Adams."
        ],
        "WeeksOn" => [
            'DataType' => "Number",
            'StringValue' => "6"
        ]
    ],
    'MessageBody' => "Information about current NY Times fiction bestseller for week of 12/11/2016.",
    'QueueUrl' => 'QUEUE_URL'
];

try {
    $result = $client->sendMessage($params);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## メッセージの受信および削除
<a name="receive-and-delete-messages"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$queueUrl = "QUEUE_URL";

$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->receiveMessage([
        'AttributeNames' => ['SentTimestamp'],
        'MaxNumberOfMessages' => 1,
        'MessageAttributeNames' => ['All'],
        'QueueUrl' => $queueUrl, // REQUIRED
        'WaitTimeSeconds' => 0,
    ]);
    if (!empty($result->get('Messages'))) {
        var_dump($result->get('Messages')[0]);
        $result = $client->deleteMessage([
            'QueueUrl' => $queueUrl, // REQUIRED
            'ReceiptHandle' => $result->get('Messages')[0]['ReceiptHandle'] // REQUIRED
        ]);
    } else {
        echo "No messages in queue. \n";
    }
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 による Amazon SQS でのデッドレターキューの使用
<a name="sqs-examples-dead-letter-queues"></a>

デッドレターキューは、正常に処理できないメッセージの送信先として他の (送信元) キューが使用できるキューです。これらのメッセージは、処理が成功しなかった理由を判断するためにデッドレターキューに分離できます。デッドレターキューにメッセージを送信する各ソースキューを、個別に設定する必要があります。1 つのデッドレターキューを複数のキューの送信先とすることができます。

詳細については、「[SQS デッドレターキューの使用](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [SetQueueAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#setqueueattributes) を使用してデッドレターキューを有効にする

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## デッドレターキューを有効にする
<a name="enable-a-dead-letter-queue"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$queueUrl = "QUEUE_URL";

$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->setQueueAttributes([
        'Attributes' => [
            'RedrivePolicy' => "{\"deadLetterTargetArn\":\"DEAD_LETTER_QUEUE_ARN\",\"maxReceiveCount\":\"10\"}"
        ],
        'QueueUrl' => $queueUrl // REQUIRED
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 による Amazon SQS でのキューの使用
<a name="sqs-examples-using-queues"></a>

Amazon SQS キューについては、「[SQS キューの操作](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-how-it-works.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [ListQueues](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#listqueues) を使用してキューのリストを取得する
+ [CreateQueue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#createqueue) を使用して新しいキューを作成する
+ [GetQueueUrl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#getqueueurl) を使用して既存のキューの URL を取得する
+ [DeleteQueue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#deletequeue) を使用して、指定したキューを削除する

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## キューのリストを取得する
<a name="return-a-list-of-queues"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->listQueues();
    foreach ($result->get('QueueUrls') as $queueUrl) {
        echo "$queueUrl\n";
    }
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## キューを作成する
<a name="create-a-queue"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$queueName = "SQS_QUEUE_NAME";

$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->createQueue([
        'QueueName' => $queueName,
        'Attributes' => [
            'DelaySeconds' => 5,
            'MaximumMessageSize' => 4096, // 4 KB
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## キューの URL を取得する
<a name="return-the-url-of-a-queue"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$queueName = "SQS_QUEUE_NAME";

$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->getQueueUrl([
        'QueueName' => $queueName // REQUIRED
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## キューの削除
<a name="delete-a-queue"></a>

 **インポート**。

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **サンプルコード** 

```
$queueUrl = "SQS_QUEUE_URL";

$client = new SqsClient([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2012-11-05'
]);

try {
    $result = $client->deleteQueue([
        'QueueUrl' => $queueUrl // REQUIRED
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 を使用して Amazon EventBridge グローバルエンドポイントにイベントを送信する
<a name="eventbridge-examples"></a>

[Amazon EventBridge グローバルエンドポイント](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-global-endpoints.html)を使用して、イベント駆動型アプリケーションの可用性と信頼性を向上させることができます。

EventBridge グローバルエンドポイントを[設定](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-global-endpoints.html#eb-ge-create-endpoint)したら、SDK for PHP を使用してイベントを送信できます。

**重要**  
SDK for PHP で EventBridge グローバルエンドポイントを使用するには、PHP 環境に [AWS Common Runtime (AWS CRT) 拡張機能](guide_crt.md)がインストールされている必要があります。

次の例では、`EventBridgeClient` の [PutEvents](https://docs.aws.amazon.com//aws-sdk-php/v3/api/api-eventbridge-2015-10-07.html#putevents) メソッドを使用して、EventBridge グローバルエンドポイントに単一のイベントを送信します。

```
<?php
/* Send a single event to an existing Amazon EventBridge global endpoint. */
require '../vendor/autoload.php';

use Aws\EventBridge\EventBridgeClient;

$evClient = new EventBridgeClient([
    'region' => 'us-east-1'
]);

$endpointId = 'xxxx123456.xxx';  // Existing EventBridge global endpointId.
$eventBusName = 'default';       // Existing event bus in the us-east-1 Region.

$event =  [
    'Source' => 'my-php-app',
    'DetailType' => 'test',
    'Detail' => json_encode(['foo' => 'bar']),
    'Time' => new DateTime(),
    'Resources' => ['php-script'],
    'EventBusName' => $eventBusName,
    'TraceHeader' => 'test'
];

$result = $evClient->putEvents([
    'EndpointId' => $endpointId,
    'Entries' => [$event]
]);
```

[このブログ記事](https://aws.amazon.com/blogs//compute/introducing-global-endpoints-for-amazon-eventbridge/)には、EventBridge グローバルエンドポイントに関する詳細情報が記載されています。