

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS SDK for PHP에 대한 지침이 포함된 코드 예제
<a name="examples_index"></a>

이 섹션에는 AWS SDK for PHP를 사용하는 일반적인 AWS 시나리오를 보여주는 코드 예제가 포함되어 있습니다.

AWS SDK for PHP에 대한 모든 예제 코드는 [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)에서 사용할 수 있습니다.

## 보안 인증 정보
<a name="examplecredentials"></a>

예제 코드를 실행하기 전에 [AWS SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

**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 CloudFront 예제
<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 서비스(예: Amazon S3 및 Amazon EC2)에 저장되어 있는 정적/동적 파일을 더욱 빠르게 배포할 목적으로 콘텐츠를 전 세계 엣지 로케이션에서 캐싱합니다. 이후 사용자가 웹사이트에서 콘텐츠를 요청하면 CloudFront가 파일이 캐싱되어 있다는 가정 하에 가장 가까운 엣지 로케이션에서 해당 콘텐츠를 공급합니다. 그렇지 않으면 CloudFront가 파일 복사본을 가져와 공급한 후 다음 요청 시 사용할 수 있도록 캐싱합니다. 엣지 로케이션에서 콘텐츠를 캐싱하면 해당 지역에서 유사한 사용자 요청에 따른 지연 시간을 줄일 수 있습니다.

CloudFront 배포를 생성할 때는 항상 콘텐츠의 위치와 사용자 요청 시 배포 방법을 지정합니다. 이번 주제에서는 HTML, CSS, JSON 및 이미지 파일 같은 정적/동적 파일의 배포를 중심으로 설명하겠습니다. CloudFront를 비디오 온디맨드(VOD)에 사용하는 방법에 대한 자세한 내용은 [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

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>

현재 계정에서 지정한 AWS 리전에서 기존 CloudFront 배포 목록을 가져올 때는 [ListDistributions](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributions.html) 작업을 사용합니다.

 **가져옵니다**.

```
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>

배포를 비활성화하거나 제거하려면 상태를 deployed에서 disabled로 변경합니다.

지정한 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>

배포가 disabled 상태일 때는 해당 배포를 삭제할 수 있습니다.

지정한 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 무효화 관리
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

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에는 만료 날짜 같은 추가 정보가 포함되므로 콘텐츠에 대한 액세스를 더욱 세부적으로 제어할 수 있습니다. 이러한 추가 정보는 미리 준비된(canned) 정책 또는 사용자 지정 정책에 따라 정책 설명에 나타납니다. 프라이빗 배포를 설정하는 방법과 URL에 서명해야 하는 이유에 대한 자세한 내용은 Amazon CloudFront 개발자 안내서의 [Amazon CloudFront를 통한 프라이빗 콘텐츠 제공을](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 URL을 생성합니다.
+ [getSignedCookie](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CloudFront.CloudFrontClient.html#_getSignedCookie)를 사용하여 서명된 Amazon CloudFront 쿠키를 생성합니다.

에 대한 모든 예제 코드는 GitHub에서 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 쿠키 서명
<a name="signing-cf-cookies-for-private-distributions"></a>

서명된 URL에 대한 대체 방법으로, 서명된 쿠키를 통해 프라이빗 배포에 대한 클라이언트 액세스 권한을 부여할 수도 있습니다. 서명된 쿠키를 사용하면 HLS 형식의 비디오용 모든 파일 또는 웹 사이트의 구독자 영역에 있는 모든 파일과 같은 여러 개의 제한된 파일에 대한 액세스 권한을 제공할 수 있습니다. 서명된 URL 대신 서명된 쿠키를 사용해야 하는 이유(또는 그 반대)에 대한 자세한 내용은 Amazon CloudFront 개발자 안내서의 [서명된 URL과 서명된 쿠키 중 선택](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-choosing-signed-urls-cookies.html)을 참조하세요.

서명된 쿠키를 생성하는 방법은 서명된 URL을 생성하는 방법과 비슷합니다. 유일한 차이점은 호출되는 메서드입니다(`getSignedUrl` 대신 `getSignedCookie`).

 **가져오기** 

```
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 쿠키 생성 시 사용자 지정 정책 사용
<a name="use-a-custom-policy-when-creating-cf-cookies"></a>

`getSignedUrl`과 마찬가지로, `'policy'` 파라미터 및 `expires` 파라미터 대신 `url` 파라미터를 제공하여 사용자 지정 정책으로 쿠키에 서명할 수 있습니다. 사용자 지정 정책에서는 리소스 키에 와일드카드가 포함될 수 있습니다. 이렇게 하면 여러 개의 파일에 사용할 하나의 서명된 쿠키를 생성할 수 있습니다.

 `getSignedCookie`는 프라이빗 배포에 대한 액세스 권한을 부여하기 위해 모두 쿠키로 설정해야 하는 키-값 페어의 배열을 반환합니다.

 **가져오기** 

```
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();
```

## CloudFront 쿠키를 Guzzle 클라이언트에게 전송
<a name="send-cf-cookies-to-guzzle-client"></a>

이러한 쿠키를 Guzzle 클라이언트에 사용하기 위해 `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 개발자 안내서의 [서명된 쿠키 사용](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>

AWS SDK for PHP가 지원하는 범위를 초과하여 Amazon CloudSearch 도메인 요청을 사용자 지정할 수 있습니다. 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)를 따라 IAM으로 보호되는 도메인을 [3단계](https://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-started-search.html)에 사용하려는 경우 다음과 같이 요청에 서명하고 요청을 실행해야 합니다.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 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)는 Amazon Web Services 리소스 및 AWS에서 실행되는 애플리케이션을 실시간으로 모니터링합니다. 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

**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 경보는 지정한 기간 동안 단일 지표를 감시합니다. 기간 수에 대한 주어진 임계값과 지표 값을 비교하여 하나 이상의 작업을 수행합니다.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 경보 설명
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 지표 나열
<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>

지표는 시스템 성능에 대한 데이터입니다. 경보는 지정한 기간 동안 단일 지표를 감시합니다. 경보는 기간 수에 대해 주어진 임계값과 지표 값을 비교하여 하나 이상의 작업을 수행합니다.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 지표 데이터 게시
<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) 리소스 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 전달합니다. 단순한 규칙을 사용하여 이벤트를 하나 이상의 대상 함수 또는 스트림에 일치시키고 라우팅할 수 있습니다.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [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 이벤트에 사용자 지정 이벤트를 전송할 수 있습니다.

에 대한 모든 예제 코드는 GitHub에서 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 경보 작업 활성화
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

**Topics**
+ [보안 인증 정보](#examplecredentials)
+ [Amazon EC2 인스턴스 관리](ec2-examples-managing-instances.md)
+ [탄력적 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>

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [설명 인스턴스](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 지원 AMI를 시작합니다.
+ [StopInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#stopinstances)를 사용하여 Amazon EBS 지원 인스턴스를 중지합니다.
+ [RebootInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#rebootinstances)를 사용하여 하나 이상의 인스턴스 재부팅을 요청합니다.

AWS SDK for PHP에 대한 모든 예제 코드는 [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)에서 사용할 수 있습니다.

## 보안 인증 정보
<a name="examplecredentials"></a>

예제 코드를 실행하기 전에 [AWS SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 인스턴스 설명
<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와 함께 탄력적 IP 주소 사용
<a name="ec2-examples-using-elastic-ip-addresses"></a>

탄력적 IP 주소는 동적 클라우드 컴퓨팅을 위해 고안된 고정 IP 주소입니다. 탄력적 IP 주소는와 연결됩니다 AWS 계정. 퍼블릭 IP 주소로 인터넷에서 연결할 수 있습니다. 인스턴스에 퍼블릭 IP 주소가 없는 경우 탄력적 IP 주소를 인스턴스에 연결하여 인터넷과의 통신을 활성화할 수 있습니다.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [DescribeInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeinstances)를 사용하여 하나 이상의 인스턴스를 설명합니다.
+ [AllocateAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#allocateaddress)를 사용하여 탄력적 IP 주소를 획득합니다.
+ [AssociateAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#associateaddress)를 사용하여 탄력적 IP 주소를 인스턴스와 연결합니다.
+ [ReleaseAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#releaseaddress)를 사용하여 탄력적 IP 주소를 해제합니다.

에 대한 모든 예제 코드는 GitHub에서 확인할 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 리전 및 가용 영역으로 구성됩니다. 각 리전은 지리적 개별 영역이며, 가용 영역이라고 알려진 여러 개의 격리된 위치가 있습니다. 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 가용 영역 설명
<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)를 사용하여 하나 이상의 키 페어를 설명합니다.

AWS SDK for PHP에 대한 모든 예제 코드는 [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)에서 사용할 수 있습니다.

## 보안 인증 정보
<a name="examplecredentials"></a>

예제 코드를 실행하기 전에 [AWS SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 키 페어 생성
<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 보안 그룹은 하나 이상의 인스턴스에 대한 트래픽을 제어하는 가상 방화벽 역할을 합니다. 연결된 인스턴스에서 트래픽을 주고 받을 수 있도록 각 보안 그룹에 규칙을 추가합니다. 언제든지 보안 그룹에 대한 규칙을 수정할 수 있습니다. 새 규칙은 보안 그룹에 연결된 모든 인스턴스에 자동으로 적용됩니다.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [DescribeSecurityGroups](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describesecuritygroups)를 사용하여 하나 이상의 보안 그룹을 설명합니다.
+ [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 보안 그룹 설명
<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 Service 검색 요청에 서명
<a name="service_es-data-plane"></a>

Amazon OpenSearch Service는 인기 있는 오픈 소스 검색 및 분석 엔진인 Amazon OpenSearch Service를 손쉽게 배포, 운영, 확장할 수 있는 관리형 서비스입니다. OpenSearch Service를 사용하면 Amazon OpenSearch Service로 직접 액세스할 수 있습니다. 따라서 개발자는 친숙한 도구뿐 아니라 확실한 보안 옵션을 사용할 수 있습니다. 많은 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## OpenSearch Service 요청 서명
<a name="signing-an-es-request"></a>

OpenSearch 서비스는 [Signature 버전 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 사용합니다. 따라서 서비스의 서명 이름(이 경우 `es`)과 OpenSearch Service 도메인의 AWS 리전에 대해 요청에 서명해야 합니다. OpenSearch 서비스가 지원하는 지역의 전체 목록은 Amazon Web Services 일반 참조의 [AWS 리전 및 엔드포인트 페이지](https://docs.aws.amazon.com/general/latest/gr/rande.html)에서 찾을 수 있습니다. 하지만 이번 예제에서는 `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 SDK for PHP 버전 3을 사용한 AWS Identity and Access Management 예제
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

**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 및 보안 액세스 키)를 생성, 수정, 확인 또는 교체할 수 있습니다. 기본적으로 액세스 키를 생성할 때 키의 상태는 활성입니다. 따라서 사용자는 액세스 키를 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 액세스 키 생성
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 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에서 IAM 계정 별칭 사용
<a name="iam-examples-using-account-aliases"></a>

AWS 계정 ID 대신 회사 이름이나 기타 친숙한 식별자를 로그인 페이지의 URL에 포함하려는 경우 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 별칭 만들기
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 정책 생성
<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을 사용한 IAM 서버 인증서 작업
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 서버 인증서 나열
<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 SDK for PHP 버전 3을 사용한 AWS Key Management Service 예제
<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 키를 비활성화합니다.

에 대한 모든 예제 코드는 GitHub에서 확인할 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)할 수 있습니다.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [암호화](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#encrypt)를 사용하여 데이터 키를 암호화합니다.
+ [암호화 해제](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 키로 데이터 키를 다시 암호화합니다.

에 대한 모든 예제 코드는 GitHub에서 확인할 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>

[암호화](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) 또는 [암호화](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) 또는 [암호화](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)를 사용하여 키 정책을 설정합니다.

에 대한 모든 예제 코드는 GitHub에서 확인할 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 키를 생성할 때 키 정책을 생성하지 않은 경우 유효한 정책 이름은 기본 이름뿐입니다. *AWS Key Management Service 개발자 안내서에서* [기본 키 정책에](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.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';
$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 키를 생성할 때 키 정책을 생성하지 않은 경우 유효한 정책 이름은 기본 이름뿐입니다. *AWS Key Management Service 개발자 안내서에서* [기본 키 정책에](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.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';
$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 키에 대한 권한 부여를 취소합니다.

에 대한 모든 예제 코드는 GitHub에서 확인할 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>

에 대한 권한 부여를 생성하려면 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.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';
$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>

의 권한 부여에 대한 자세한 정보를 가져오려면 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.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';
$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>

에 대한 권한 부여를 사용 중지하려면 [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.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'
]);

$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>

에 대한 권한 부여를 취소하려면 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.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';
$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)를 사용하여 별칭을 삭제합니다.

에 대한 모든 예제 코드는 GitHub에서 확인할 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 계정 및에 있는 모든 별칭을 나열하려면 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 작업을 AWS 리전사용합니다.

 **가져오기** 

```
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 Data Streams 개발자 안내서의 [스트림 생성 및 관리](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)을 사용하여 단일 데이터 스트림에 대한 세부 정보를 확인합니다.
+ [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

Amazon Kinesis 개발자 안내서 사용에 대한 자세한 내용은 [Amazon Kinesis Data Streams 개발자 안내서](https://docs.aws.amazon.com/kinesis/latest/dev/)를 참조하세요.

## Kinesis 데이터 스트림을 사용하여 데이터 스트림 생성
<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`가 활성인지 여부를 확인합니다.

Kinesis 데이터 스트림에 단일 데이터 레코드를 기록하려면 [PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html) 작업을 사용합니다. Kinesis 데이터 스트림에 최대 500개의 레코드를 기록하려면 [PutRecords](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,000개의 레코드를 쓸 수 있습니다. 또한 각 샤드의 업로드 제한 속도는 초당 1MiB입니다. 사용은 샤드 단위로 계산되고 요금이 청구되므로, 다음 예제를 사용하여 스트림의 데이터 용량과 비용을 관리하세요.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

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 Data Streams 데이터 스트림의 샤드 목록을 표시하려면 [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>

데이터 스트림 샤드가 더 필요할 경우 현재 샤드 수를 늘릴 수 있습니다. 증가 시 샤드 수를 두 배로 늘리는 것이 좋습니다. 이렇게 하면 현재 사용할 수 있는 각 샤드의 복사본이 생성되어 용량이 늘어납니다. 샤드 수 두 배 증가는 24시간 동안 두 번만 할 수 있습니다.

Kinesis Data Streams 사용량에 대한 청구서는 샤드당 계산되므로 수요가 감소하면 샤드 수를 절반으로 줄이는 것이 좋습니다. 샤드를 제거할 때 현재 샤드 수의 절반까지만 샤드의 양을 줄일 수 있습니다.

Kinesis Data Streams 데이터 스트림의 샤드 수를 업데이트하려면 [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)을 사용하여 단일 전송 스트림에 대한 세부 정보를 확인합니다.
+ [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

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 서비스를 Firehouse로 마이그레이션할 수 있습니다.

 **가져옵니다**.

```
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) 작업을 사용합니다.

[대상 파라미터](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html)에서 설명한 대로 대상 파라미터를 제공합니다. 그런 다음 [Kinesis Data Firehose에 Amazon S3 대상 액세스 권한 부여](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 서비스를 사용하여 전송 스트림 생성
<a name="create-a-delivery-stream-using-es"></a>

데이터를 OpenSearch Service 클러스터로 전송하는 Firehose 전송 스트림을 설정하려면 [CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html) 작업을 사용합니다.

[대상 파라미터](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html)에서 설명한 대로 대상 파라미터를 제공합니다. [Kinesis Data Firehose에 Amazon ES 대상 액세스 권한 부여](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-es.html)에 설명된 대로 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 전송 스트림을 통해 데이터를 지정된 대상으로 전송하려면 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.MediaConvert`* 클라이언트 클래스를 통해 노출 AWS Elemental 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) 

에 대한 모든 예제 코드는 GitHub에서 확인할 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>

목록을 오름차순 또는 내림차순으로 정렬할지 여부, 확인할 작업 대기열의 ARN 및 포함할 작업 상태를 지정하는 값을 포함하여 JSON 파라미터를 생성합니다. 그러면 최대 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는 웹 어디에서나 원하는 양의 데이터를 저장하고 검색할 수 있는 간단한 웹 서비스 인터페이스를 갖춘 사용하기 쉬운 객체 스토리지입니다.

에 대한 모든 예제 코드는 GitHub에서 확인할 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

 **가져옵니다**.

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

use Aws\S3\S3Client;
```

## 버킷 나열
<a name="list-buckets"></a>

다음 코드를 사용하여 PHP 파일을 생성합니다. 먼저 AWS 리전과 버전을 지정하는 AWS.S3 클라이언트 서비스를 생성합니다. 그런 다음 요청 발신자가 소유한 모든 Amazon S3 버킷을 버킷 구조 배열로 반환하는 `listBuckets` 메서드를 호출합니다.

 **샘플 코드** 

```
$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 클라이언트 서비스를 생성합니다. 그런 다음 array를 파라미터로 사용하여 `createBucket` 메서드를 호출합니다. 유일하게 필요한 필드는 생성하려는 버킷 이름에 대한 문자열 값을 포함하는 'Bucket' 키입니다. 하지만 'CreateBucketConfiguration' 필드를 사용하여 AWS 리전을 지정할 수 있습니다. 성공할 경우 이 메서드는 버킷의 '위치'를 반환합니다.

 **샘플 코드** 

```
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(액세스 제어 목록)은 리소스 기반 액세스 정책 옵션 중 하나로, 해당 옵션을 사용해 버킷과 객체에 대한 액세스를 관리할 수 있습니다. 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)을 사용하여 버킷에 대한 액세스 제어 정책을 가져옵니다.
+ [PutBucketAcl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketacl)을 사용하여 ACL로 버킷에 대한 권한을 설정합니다.

AWS SDK for PHP에 대한 모든 예제 코드는 [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)에서 사용할 수 있습니다.

## 보안 인증 정보
<a name="examplecredentials"></a>

예제 코드를 실행하기 전에 [AWS SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 액세스 제어 목록 정책 가져오기 및 설정
<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>

교차 오리진 리소스 공유(CORS) 한 도메인에서 로드되어 다른 도메인에 있는 리소스와 상호 작용하는 클라이언트 웹 애플리케이션에 대한 방법을 정의합니다. Amazon S3에서 CORS 지원을 통해 Amazon S3으로 다양한 기능의 클라이언트 측 웹 애플리케이션을 구축하고, Amazon S3 리소스에 대한 Cross-Origin 액세스를 선택적으로 허용할 수 있습니다.

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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 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>

단일 `PutObject` 작업으로 최대 5GB 크기의 객체를 업로드할 수 있습니다. 하지만 멀티파트 업로드 메서드(예: `CreateMultipartUpload`, `UploadPart`, `CompleteMultipartUpload`, `AbortMultipartUpload`)를 사용하면 5MB \$1 5TB 크기의 객체를 업로드할 수 있습니다.

다음 예에서는 작업 방법을 보여줍니다.
+ [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 위치 간 객체를 복사합니다.

에 대한 모든 예제 코드는 GitHub에서 확인할 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` 값을 초과하면 이 콜백이 간접 호출됩니다. `CommandInterface` 객체에 추가할 수 있는 파라미터는 [CreateMultipartUpload API 참조](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload)를 참조하세요.  
**`before_upload`**  
(`callable`) 모든 `PutObject` 또는 `UploadPart` 작업 이전에 호출할 콜백입니다. 콜백에는 `function (Aws\Command $command) {...}`와 같은 함수 서명이 있어야 합니다. 파일 크기가 `mup_threshold` 값보다 작거나 같으면 이 콜백이 간접 호출됩니다. `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)`) 멀티파트 업로드를 수행할 때 사용할 부분 크기(바이트)입니다. 값은 5MB에서 5GB 사이(포함)이어야 합니다.  
**`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 고객은 100MB를 초과하는 객체에 멀티파트 업로드를 사용하는 것이 좋습니다.

## 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` 객체는 직렬화 가능하므로, 다른 프로세스에서 업로드를 다시 시작할 수도 있습니다. 또한 예외를 처리하지 않을 때에도 `$uploader->getState()`를 호출하여 `UploadState` 객체를 가져올 수 있습니다.

**중요**  
`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)`) 멀티파트 업로드를 수행할 때 사용할 부분 크기(바이트)입니다. 이 값은 5MB에서 5GB 사이(포함)이어야 합니다.  
** `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` 사용`MultipartUploader`되지만 Amazon S3 내에서 크기가 5GB\$15TB인 객체를 복사하도록 설계된 객체 AWS SDK for PHP 도 포함되어 있습니다.

```
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>

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();
```

이제 다른 사용자가 미리 서명된 URL을 HTTP PUT 요청에 사용하여 파일을 업로드할 수 있습니다.

```
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에서 사전 서명된 게시물
<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 Object 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 Identity Center 가져온 보안 인증으로는 작동하지 않습니다.

예제 코드를 실행하기 전에 [AWS SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에서 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 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의 보안 인증](guide_credentials.md)을 참조하세요.

## 버킷에 대한 웹 사이트 구성 가져오기, 설정, 삭제
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 버킷에 대한 정책 가져오기, 삭제, 바꾸기
<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";
}
```

# S3 액세스 포인트 ARN AWS SDK for PHP 버전 3사용
<a name="s3-examples-access-point-arn"></a>

S3는 S3 버킷과 상호 작용하는 새로운 방법인 액세스 포인트를 도입했습니다. 액세스 포인트는 버킷에 직접 적용되는 대신 고유한 정책 및 구성을 적용할 수 있습니다. AWS SDK for PHP를 사용하면 버킷 이름을 명시적으로 지정하는 대신 API 작업에 버킷 필드에서 액세스 포인트 ARN을 사용할 수 있습니다. [여기](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html)에서 S3 액세스 포인트 및 ARN의 작동 방식에 대한 자세한 내용을 확인할 수 있습니다. 다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ 액세스 포인트 ARN과 함께 [GetObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject)를 사용하여 버킷에서 객체를 가져옵니다.
+ 액세스 포인트 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

 **가져옵니다**.

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

use Aws\S3\S3Client;
```

## 객체 가져오기
<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
]);
```

클라이언트는 환경 변수와 구성 파일 옵션을 다음과 같은 우선 순위에 따라 확인합니다.

1. 위의 예제에서와 같은 클라이언트 옵션 `use_arn_region`.

1. 환경 변수 `AWS_S3_USE_ARN_REGION` 

```
export AWS_S3_USE_ARN_REGION=true
```

1. AWS 공유 구성 파일(기본적으로 `~/.aws/config`)의 구성 변수 `s3_use_arn_region`.

```
[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)는 Amazon S3 요청 트래픽을 AWS 리전간에 라우팅하기 위한 글로벌 엔드포인트를 제공합니다.

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 공통 런타임(AWS CRT) 확장](guide_crt.md)이 설치되어 있어야 합니다.

다중 리전 액세스 포인트를 생성하면 Amazon S3에서는 다음 형식의 Amazon 리소스 이름(ARN)을 생성합니다.

`arn:aws:s3::account-id:accesspoint/MultiRegionAccessPoint_alias`

생성된 ARN을 `[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)` 메서드의 버킷 이름 대신 사용할 수 있습니다.

```
<?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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 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에 저장된 기존 암호 값을 교체할 때는 Ladmbda 교체 함수와 [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)는 사용자의 이메일 주소와 도메인을 사용해 이메일을 보내고 받기 위한 비용을 절약할 수 있고 사용이 손쉬운 이메일 플랫폼입니다. Amazon SES에 대한 자세한 내용은 [Amazon SES 개발자 안내서](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)를 참조하세요.

AWS는 두 가지 버전의 Amazon SES 서비스를 제공하며, 이에 따라 PHP용 SDK는 [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)라는 두 가지 버전의 클라이언트를 제공합니다. 메서드가 호출되는 방식이나 결과가 다를 수 있지만 클라이언트의 기능이 중복되는 경우가 많습니다. 두 API는 독점적인 기능도 제공하므로 두 클라이언트를 모두 사용하여 모든 기능에 액세스할 수 있습니다.

이 단원의 예제에서는 모두 원본 `SesClient`를 사용합니다.

AWS SDK for PHP 버전 3에 대한 모든 예제 코드는 [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)에서 사용할 수 있습니다.

**Topics**
+ [이메일 주소 확인](ses-verify.md)
+ [이메일 템플릿 사용](ses-template.md)
+ [이메일 필터 관리](ses-filters.md)
+ [이메일 규칙 사용](ses-rules.md)
+ [전송 활동 모니터링](ses-send-email.md)
+ [발신자 권한 부여](ses-sender-policy.md)

# Amazon SES API 및 AWS SDK for PHP 버전 3을 사용하여 이메일 보안 인증 확인
<a name="ses-verify"></a>

Amazon Simple Email Service (Amazon SES) 계정 사용을 처음 시작할 때 이메일을 보내려는 AWS 리전과 동일한 리전에서 모든 발신자와 수신자를 확인해야 합니다. 이메일 전송에 대한 자세한 내용은 [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)를 사용하여 이메일 주소 확인
+ [VerifyDomainIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#verifydomainidentity)를 사용하여 이메일 도메인 확인
+ [ListIdentities](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listidentities)를 사용하여 모든 이메일 주소 나열
+ [ListIdentities](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listidentities)를 사용하여 모든 이메일 도메인 나열
+ [DeleteIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deleteidentity)를 사용하여 이메일 주소 제거
+ [DeleteIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deleteidentity)를 사용하여 이메일 도메인 제거

AWS SDK for PHP에 대한 모든 예제 코드는 [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)에서 사용할 수 있습니다.

## 보안 인증 정보
<a name="examplecredentials"></a>

예제 코드를 실행하기 전에 [AWS SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 대로 AWS SDK for PHP를 가져옵니다.

Amazon SES 사용에 대한 자세한 내용은 [Amazon SES 개발자 안내서](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)를 참조하세요.

## 이메일 주소 확인
<a name="verifying-email-addresses"></a>

Amazon SES는 확인된 이메일 주소 또는 도메인에서만 이메일을 보낼 수 있습니다. 이메일 주소를 확인하여 해당 주소의 소유자이고 Amazon SES가 해당 주소에서 이메일을 보낼 수 있도록 하고자 함을 입증합니다.

다음 코드 예제를 실행하면 Amazon SES가 지정한 주소로 이메일을 보냅니다. 사용자(또는 이메일 수신자)가 이메일의 링크를 클릭하면 주소가 확인됩니다.

Amazon SES 계정에 이메일 주소를 추가하려면 [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";
}
```

## 이메일 도메인 확인
<a name="verify-an-email-domain"></a>

Amazon SES는 확인된 이메일 주소 또는 도메인에서만 이메일을 보낼 수 있습니다. 도메인을 확인하여 해당 도메인의 소유자임을 입증합니다. 도메인을 확인하면 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";
}
```

## 이메일 주소 나열
<a name="list-email-addresses"></a>

확인 상태와 관계없이 현재 AWS 리전에 제출된 이메일 주소 목록을 검색하려면 [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";
}
```

## 이메일 도메인 나열
<a name="list-email-domains"></a>

확인 상태와 관계없이 현재 AWS 리전에 제출된 이메일 도메인 목록을 검색하려면 [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";
}
```

## 이메일 주소 삭제
<a name="delete-an-email-address"></a>

보안 인증 목록에서 확인된 이메일 주소를 삭제하려면 [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";
}
```

## 이메일 도메인 삭제
<a name="delete-an-email-domain"></a>

확인된 보안 인증 목록에서 확인된 이메일 도메인을 삭제하려면 [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)를 통해 템플릿을 사용하여 각 수신자에 대해 맞춤화된 이메일을 전송할 수 있습니다. 템플릿에는 제목 줄과 이메일 본문의 텍스트 및 HTML 부분이 포함됩니다. 제목과 본문 섹션에는 각 수신자에 대해 맞춤화된 고유 값이 포함될 수도 있습니다.

자세한 내용은 Amazon Simple Email Service 개발자 가이드에서 [Amazon SES를 사용하여 개인화된 이메일 전송](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)을 사용하여 이메일 템플릿 만들기
+ [ListTemplates](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listtemplates)를 사용하여 모든 이메일 템플릿 나열
+ [GetTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#gettemplate)을 사용하여 이메일 템플릿 검색
+ [UpdateTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#updateTemplate)을 사용하여 이메일 템플릿 업데이트
+ [DeleteTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletetemplate)을 사용하여 이메일 템플릿 제거
+ [SendTemplatedEmail](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#sendtemplatedemail)을 사용하여 템플릿 이메일 전송

AWS SDK for PHP에 대한 모든 예제 코드는 [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)에서 사용할 수 있습니다.

## 보안 인증 정보
<a name="examplecredentials"></a>

예제 코드를 실행하기 전에 [AWS SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 대로 AWS SDK for PHP를 가져옵니다.

Amazon SES 사용에 대한 자세한 내용은 [Amazon SES 개발자 안내서](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)를 참조하세요.

## 이메일 템플릿 생성
<a name="create-an-email-template"></a>

템플릿을 만들어 맞춤형 이메일 메시지를 전송하려면 [CreateTemplate](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateTemplate.html) 작업을 사용합니다. 템플릿은 해당 템플릿이 추가된 AWS 리전에서 메시지를 보낼 권한이 있는 계정이 사용할 수 있습니다.

**참고**  
Amazon SES는 HTML의 유효성을 검사하지 않으므로 이메일을 전송하기 전에 *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";
}
```

## 이메일 템플릿 가져오기
<a name="get-an-email-template"></a>

제목 줄, HTML 본문 및 일반 텍스트를 포함하여 기존 이메일 템플릿의 콘텐츠를 보려면 [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";
}
```

## 모든 이메일 템플릿 나열
<a name="list-all-email-templates"></a>

현재 AWS 리전의 AWS 계정 계정과 연결된 모든 이메일 템플릿의 목록을 검색하려면 [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";
}
```

## 이메일 템플릿 업데이트
<a name="update-an-email-template"></a>

제목 줄, HTML 본문 및 일반 텍스트를 포함하여 특정 이메일 템플릿의 콘텐츠를 변경하려면 [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";
}
```

## 이메일 템플릿 삭제
<a name="delete-an-email-template"></a>

특정 이메일 템플릿을 제거하려면 [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";
}
```

## 템플릿이 있는 이메일 전송
<a name="send-an-email-with-a-template"></a>

템플릿을 사용하여 수신자에게 이메일을 전송하려면 [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을 사용하여 이메일 필터 관리
<a name="ses-filters"></a>

이메일을 보내는 것 외에도 Amazon Simple Email Service (Amazon SES) 로 이메일을 수신할 수 있습니다. IP 주소 필터는 특정 IP 주소 또는 특정 범위의 IP 주소에서 발신한 메일의 수락 여부를 지정할 수 있게 합니다. 자세한 내용은 [Amazon SES 이메일 수신을 위해 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)를 사용하여 이메일 필터 만들기
+ [ListReceiptFilters](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listreceiptfilters)를 사용하여 모든 이메일 필터 나열
+ [DeleteReceiptFilter](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletereceiptfilter)를 사용하여 이메일 필터 제거

AWS SDK for PHP에 대한 모든 예제 코드는 [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)에서 사용할 수 있습니다.

## 보안 인증 정보
<a name="examplecredentials"></a>

예제 코드를 실행하기 전에 [AWS SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 대로 AWS SDK for PHP를 가져옵니다.

Amazon SES 사용에 대한 자세한 내용은 [Amazon SES 개발자 안내서](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)를 참조하세요.

## 이메일 필터 만들기
<a name="create-an-email-filter"></a>

특정 IP 주소에서 보내는 이메일을 허용하거나 차단하려면 [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";
}
```

## 모든 이메일 필터 나열
<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";
}
```

## 이메일 필터 삭제
<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을 사용하여 이메일 규칙 생성 및 관리
<a name="ses-rules"></a>

이메일을 보내는 것 외에도 Amazon Simple Email Service (Amazon SES)를 사용하여 이메일을 수신할 수 있습니다. 수신 규칙을 사용하면 사용자 소유의 이메일 주소 또는 도메인으로 수신되는 이메일에 대한 Amazon SES의 처리 방법을 지정할 수 있습니다. 규칙은 Amazon S3, Amazon SNS, AWS Lambda 등 다른 AWS 서비스로 이메일을 보낼 수 있습니다.

자세한 내용은 [Amazon SES 이메일 수신을 위한 수신 규칙 세트 관리하기](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-managing-receipt-rule-sets.html) 및 [Amazon SES 이메일 수신을 위한 수신 규칙 관리하기](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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 대로 AWS SDK for PHP를 가져옵니다.

Amazon SES 사용에 대한 자세한 내용은 [Amazon SES 개발자 안내서](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)를 참조하세요.

## 수신 규칙 세트 생성
<a name="create-a-receipt-rule-set"></a>

수신 규칙 세트에는 수신 규칙 모음이 포함되어 있습니다. 수신 규칙을 만들려면 계정과 연결된 수신 규칙 세트가 하나 이상 있어야 합니다. 수신 규칙 세트를 만들려면 고유한 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>

기존의 수신 규칙 세트에 수신 규칙을 추가하여 수신 이메일을 제어합니다. 다음 예제에서는 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>

초당 한 번 지정된 수신 규칙 세트의 세부 정보를 반환합니다. [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를 사용하여 이메일을 전송하는 데 어려움을 겪을 수 있습니다.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 대로 AWS SDK for PHP를 가져옵니다.

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)를 통해 이메일을 전송할 수 있도록 하려면 전송 권한 부여 정책을 만듭니다. 이는 소유한 보안 인증에 연결하는 JSON 문서입니다.

이 정책은 누가 어떤 조건으로 해당 보안 인증을 사용하여 전송할 수 있는지 명시적으로 나열합니다. 사용자와 사용자가 정책에서 명시적으로 권한을 부여한 개체 이외의 모든 발신자는 이메일을 전송할 수 없습니다. 보안 인증은 연결된 정책이 없을 수도, 하나 또는 여러 개일 수도 있습니다. 또한 다중 정책의 효과를 구현하기 위해 복수의 문을 포함한 단일 정책을 생성할 수도 있습니다.

자세한 내용은 [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 대로 AWS SDK for PHP를 가져옵니다.

Amazon SES 사용에 대한 자세한 내용은 [Amazon SES 개발자 안내서](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/)를 참조하세요.

## 권한 있는 발신자 만들기
<a name="create-an-authorized-sender"></a>

다른 AWS 계정 계정에 사용자를 대신해 이메일을 전송할 수 있는 권한을 부여하려면 보안 인증 정책을 사용하거나 확인된 이메일 주소 또는 도메인에서 이메일을 전송하도록 권한 부여를 추가하거나 업데이트합니다. 보안 인증 정책을 만들려면 [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>

특정 이메일 보안 인증 또는 도메인 보안 인증과 연결된 전송 권한 부여 정책을 반환합니다. 지정된 이메일 주소 또는 도메인에 대한 전송 권한 부여를 가져오려면 [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>

현재 AWSS 리전의 특정 이메일 보안 인증 또는 도메인 보안 인증과 연결된 전송 권한 부여 정책을 나열하려면 [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>

[DeleteIdentityPolicy](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteIdentityPolicy.html) 작업으로 연결된 보안 인증 정책을 삭제하여 이메일 보안 인증 또는 도메인 보안 인증으로 이메일을 전송할 수 있는 다른 AWS 계정 계정의 전송 권한 부여를 제거합니다.

 **가져옵니다**.

```
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에는 게시자(생산자라고도 함)와 구독자(소비자라고도 함)라는 두 유형의 클라이언트가 있습니다. 게시자는 주제에 대한 메시지를 생산 및 발송함으로써 구독자와 비동시적으로 통신하는 논리적 액세스 및 커뮤니케이션 채널입니다. 구독자(웹 서버, 이메일 주소, Amazon SQS 대기열, AWS Lambda 함수)는 주제를 구독할 때 지원되는 프로토콜(Amazon SQS, HTTP/HTTPS URLs, 이메일 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, 이메일, 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 주제 생성
<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>

단일 기존 주제의 속성을 가져오려면 [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>

단일 기존 주제의 속성을 업데이트하려면 [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, 이메일 주소 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 사용에 대한 자세한 내용은 [System-to-System Messaging을 위해 Amazon SNS 사용하기](https://docs.aws.amazon.com/sns/latest/dg/sns-system-to-system-messaging.html) 단원을 참조하세요.

에 대한 모든 예제 코드는 GitHub에서 확인할 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="subscribe-an-email-address-to-a-topic"></a>

이메일 주소의 구독을 시작하려면 [Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) 작업을 사용합니다.

전달되는 파라미터에 사용되는 값에 따라 subscribe 메서드를 사용하여 서로 다른 여러 엔드포인트가 Amazon SNS 주제를 구독하게 할 수 있습니다. 이는 이 주제의 다른 예제에서 볼 수 있습니다.

다음 예제에서는 엔드포인트가 이메일 주소입니다. 확인 토큰이 이 이메일로 전송됩니다. 수신한 후 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 메시지를 전송하는 다른 방법은 AWS SDK for PHP 버전 3으로 Amazon SNS에서 SMS 메시지 전송을 참조하세요.

 **가져오기** 

```
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 서명이 필요합니다. unsubscribe 호출에 인증이 필요하지 않고 요청자가 구독 소유자가 아닌 경우, 최종 취소 메시지가 해당 엔드포인트로 전송됩니다.

 **가져오기** 

```
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 메시지 수신을 옵트아웃했는지 여부 확인
+ [ListPhoneNumberOptedOut](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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 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바이트를 포함할 수 있습니다. 단일 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)
+ [DLQ(Dead Letter Queue) 사용](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를 지정된 시간 동안 대기시켜 빈 응답의 개수를 줄입니다. 또한, 긴 폴링은 서버의 샘플링 대신에 모든 서버를 쿼리하여 False인 빈 응답을 제거합니다. 긴 폴링을 활성화하려면 수신된 메시지에 0이 아닌 대기 시간을 지정합니다. 자세한 내용은 [SQS 긴 폴링](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html)을 참조하세요.

다음 예제에서는 다음과 같은 작업을 하는 방법을 보여줍니다.
+ [SetQueueAttribute](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)를 사용하여 긴 폴링이 있는 하나 이상의 메시지를 검색합니다.
+ [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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 긴 폴링을 활성화하기 위한 대기열의 속성 설정
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 여러 메시지의 제한 시간 초과 변경
<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)를 사용하여 지정된 대기열에서 하나 이상의 메시지(최대 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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 메시지 전송
<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 버전 3에서 DLQ(Dead Letter Queue) 사용
<a name="sqs-examples-dead-letter-queues"></a>

DLQ(Dead Letter Queue)은 성공적으로 처리하지 못한 메시지를 다른 (소스) 대기열에서 보낼 수 있는 대기열입니다. DLQ(Dead Letter Queue)에서 이 메시지를 구분하고 격리하여 처리에 실패한 이유를 확인할 수 있습니다. DLQ(Dead Letter Queue)로 메시지를 보내는 각 소스 대기열을 개별적으로 구성해야 합니다. 여러 대기열에서 하나의 DLQ(Dead Letter Queue)로 메시지를 보낼 수 있습니다.

자세한 내용은 [SQS DLQ(Dead Letter Queue) 사용](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)를 사용하여 DLQ(Dead Letter Queue)를 활성화합니다.

AWS SDK for PHP에 대한 모든 예제 코드는 [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)에서 사용할 수 있습니다.

## 보안 인증 정보
<a name="examplecredentials"></a>

예제 코드를 실행하기 전에 [AWS SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## DLQ(Dead Letter Queue) 활성화
<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 SDK for PHP 버전 3을 AWS 사용하여 로 인증](credentials.md)에 설명된 대로 AWS 보안 인증을 구성합니다. 그 다음 [AWS SDK for PHP 버전 3 설치](getting-started_installation.md)에 설명된 AWS SDK for PHP를 가져옵니다.

## 대기열 목록 반환
<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를 사용하여 이벤트를 전송할 수 있습니다.

**중요**  
PHP용 SDK와 함께 EventBridge 글로벌 엔드포인트를 사용하려면 PHP 환경에 [AWS 공통 런타임(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 글로벌 엔드포인트에 대한 자세한 정보가 포함되어 있습니다.