

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Exemplos de código com orientação para o AWS SDK para PHP
<a name="examples_index"></a>

Esta seção contém códigos de exemplo que demonstram cenários comuns da AWS que usam o AWS SDK para PHP.

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

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

# Exemplos do Amazon CloudFront usando o AWS SDK para PHP versão 3
<a name="cf-examples"></a>

O Amazon CloudFront é um serviço da web da AWS que acelera o fornecimento de conteúdo da web estático e dinâmico por seu próprio servidor web ou de um servidor da AWS, como o Amazon S3. O CloudFront distribui o conteúdo por meio de uma rede global de data centers chamados locais da borda. Quando um usuário solicita um conteúdo que você está distribuindo com o CloudFront, ele é roteado para o local da borda que fornece a menor latência. Se o conteúdo ainda não está armazenado em cache nesse local, o CloudFront recupera uma cópia do servidor de origem, a fornece, em seguida, a armazena em cache para futuras solicitações.

Para obter mais informações sobre o CloudFront, consulte o [Guia do desenvolvedor do Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/).

Todo o código de exemplo do AWS SDK para PHP versão 3 está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

# Gerenciar distribuições do Amazon CloudFront usando a API do CloudFront e o AWS SDK para PHP versão 3
<a name="cloudfront-example-distribution"></a>

O Amazon CloudFront armazena em cache conteúdo em locais da borda no mundo todo para acelerar a distribuição de arquivos estáticos e dinâmicos que você armazena no seu próprio servidor ou em um serviço da Amazon, como o Amazon S3 e o Amazon EC2. Quando os usuários solicitam conteúdo do seu site, o CloudFront o fornece pelo local da borda mais próximo caso o arquivo esteja armazenado em cache nele. Caso contrário, o CloudFront recupera uma cópia do arquivo, fornece-o e depois armazena-o em cache para a próxima solicitação. Armazenar em cache conteúdo em um ponto de presença reduz a latência das solicitações de usuário semelhantes nessa área.

Para cada distribuição do CloudFront que criar, você especifica onde o conteúdo está localizado e como distribuí-lo quando os usuários fazem solicitações. Este tópico se concentra nas distribuições para arquivos estáticos e dinâmicos, como HTML, CSS, JSON e arquivos de imagem. Para obter informações sobre o uso do CloudFront com vídeo sob demanda, consulte [Vídeo sob demanda e streaming de vídeo ao vivo com o CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/on-demand-streaming-video.html).

Os exemplos a seguir mostram como:
+ Crie uma distribuição usando [CreateDistribution](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#createdistribution).
+ Obtenha uma distribuição usando [GetDistribution](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#getdistribution).
+ Liste distribuições usando [ListDistributions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#listdistributions).
+ Atualize distribuições usando [UpdateDistributions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#updatedistribution).
+ Desabilite distribuições usando [DisableDistribution](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#disabledistribution).
+ Exclua distribuições usando [DeleteDistributions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#deletedistribution).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso do Amazon CloudFront, consulte o [Guia do desenvolvedor do Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/).

## Crie uma distribuição do CloudFront
<a name="create-a-cf-distribution"></a>

Crie uma distribuição de um bucket do Amazon S3. No exemplo a seguir, os parâmetros opcionais são comentados, mas os valores padrão são exibidos. Para adicionar personalizações à sua distribuição, remova o comentário do valor e do parâmetro dentro de `$distribution`.

Para criar uma distribuição do CloudFront, use a operação [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

## Recuperar uma distribuição do CloudFront
<a name="retrieve-a-cf-distribution"></a>

Para recuperar o status e os detalhes de uma distribuição do CloudFront especificada, use a operação [GetDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

## Listar distribuições do CloudFront
<a name="list-cf-distributions"></a>

Obtenha uma lista de distribuições do CloudFront existentes na região da AWS especificada em sua conta atual usando a operação [ListDistributions](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributions.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

## Atualizar uma distribuição do CloudFront
<a name="update-a-cf-distribution"></a>

Atualizar uma distribuição do CloudFront é semelhante a criar uma distribuição. No entanto, quando você atualiza uma distribuição, mais campos são obrigatórios e todos os valores devem ser incluídos. Para fazer alterações em uma distribuição existente, recomendamos que você primeiro recupere a distribuição existente e atualize os valores que deseja alterar na matriz `$distribution`.

Para atualizar uma distribuição do CloudFront especificada, use a operação [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html).

 **Importações** 

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

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

 **Código de exemplo** 

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

## Desabilitar uma distribuição do CloudFront
<a name="disable-a-cf-distribution"></a>

Para desativar ou remover uma distribuição, altere seu status de implantado para desabilitado.

Para desabilitar uma distribuição do CloudFront especificada, use a operação [DisableDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DisableDistribution.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

## Excluir uma distribuição do CloudFront
<a name="delete-a-cf-distribution"></a>

Depois que uma distribuição estiver em um status desabilitado, é possível excluir a distribuição.

Para remover uma distribuição do CloudFront especificada, use a operação [DeleteDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DeleteDistribution.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

# Gerenciar invalidações do Amazon CloudFront usando a API do CloudFront e o AWS SDK para PHP versão 3
<a name="cloudfront-example-invalidation"></a>

O Amazon CloudFront armazena em cache cópias de arquivos estáticos e dinâmicos em locais da borda no mundo todo. Para remover ou atualizar um arquivo em todos os pontos de presença, crie uma invalidação para cada arquivo ou para um grupo de arquivos.

A cada mês, as primeiras 1.000 invalidações são gratuitas. Para saber mais sobre a remoção de conteúdo de um local da borda do CloudFront, consulte [Invalidar arquivos](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html).

Os exemplos a seguir mostram como:
+ Crie uma invalidação de distribuição usando [CreateInvalidation](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#createinvalidation).
+ Obtenha uma invalidação de distribuição usando [GetInvalidation](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#getinvalidation).
+ Liste invalidações usando [ListInvalidations](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2018-11-05.html#listinvalidations).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso do Amazon CloudFront, consulte o [Guia do desenvolvedor do Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/).

## Criar uma invalidação de distribuição
<a name="create-a-distribution-invalidation"></a>

Crie uma invalidação de distribuição do CloudFront especificando o local do caminho para os arquivos que você precisa remover. Este exemplo invalida todos os arquivos na distribuição, mas você pode identificar arquivos específicos em `Items`.

Para criar uma invalidação de distribuição do CloudFront, use a operação [CreateInvalidation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

## Obter uma invalidação de distribuição
<a name="get-a-distribution-invalidation"></a>

Para recuperar o status e os detalhes de uma invalidação de distribuição do CloudFront, use a operação [GetInvalidation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetInvalidation.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

## Listar invalidações de distribuição
<a name="list-distribution-invalidations"></a>

Para listar todas as invalidações de distribuição atuais do CloudFront, use a operação [ListInvalidations](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListInvalidations.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

# Assinando a Amazon CloudFront URLs com AWS SDK para PHP a versão 3
<a name="cloudfront-example-signed-url"></a>

Os assinados URLs permitem que você forneça aos usuários acesso ao seu conteúdo privado. Um URL assinado inclui informações adicionais (por exemplo, um horário de expiração) que proporcionam a você mais controle sobre o acesso a seu conteúdo. Essas informações adicionais são descritas em uma declaração de política, que é baseada em uma política padrão ou personalizada. Para obter informações sobre como configurar distribuições privadas e por que você precisa assinar URLs, consulte [Servindo conteúdo privado pela Amazon CloudFront no Amazon](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) CloudFront Developer Guide.
+ Crie um URL assinado da Amazon usando CloudFront [getSignedURL](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CloudFront.CloudFrontClient.html#_getSignedUrl).
+ Crie um CloudFront cookie assinado da Amazon usando [getSignedCookie](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CloudFront.CloudFrontClient.html#_getSignedCookie).

Todo o código de exemplo do AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso da Amazon CloudFront, consulte o [Amazon CloudFront Developer Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/).

## Assinatura CloudFront URLs para distribuições privadas
<a name="signing-cf-urls-for-private-distributions"></a>

Você pode assinar uma URL usando o CloudFront cliente no SDK. Primeiro, você deve criar um objeto `CloudFrontClient`. Você pode assinar um CloudFront URL para um recurso de vídeo usando uma política predefinida ou personalizada.

 **Importações** 

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

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

 **Código de exemplo** 

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

## Use uma política personalizada ao criar CloudFront URLs
<a name="use-a-custom-policy-when-creating-cf-urls"></a>

Para usar uma política personalizada, forneça a chave `policy` em vez de `expires`.

 **Importações** 

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

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

 **Código de exemplo** 

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

## Use um URL CloudFront assinado
<a name="use-a-cf-signed-url"></a>

A forma do URL assinado será diferente, dependendo se o URL que você está assinando estiver usando o esquema "HTTP" ou "RTMP". No caso de "HTTP", o URL absoluto e completo será retornado. Para "RTMP", somente o URL relativo será retornado para sua conveniência. Isso ocorre porque alguns jogadores requerem que o host e o caminho sejam fornecidos como parâmetros separados.

O exemplo a seguir mostra como você pode usar o URL assinado para criar uma página da Web que exiba um vídeo usando [JWPlayer](http://www.longtailvideo.com/jw-player/). O mesmo tipo de técnica se aplicaria a outros jogadores [FlowPlayer](http://flowplayer.org/), como, mas exigiria um código diferente do lado do cliente.

```
<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 Cookies de assinatura para distribuições privadas
<a name="signing-cf-cookies-for-private-distributions"></a>

Como alternativa ao assinado URLs, você também pode conceder aos clientes acesso a uma distribuição privada por meio de cookies assinados. Os cookies assinados permitem fornecer acesso a vários arquivos restritos, como todos os arquivos de um vídeo no formato HLS ou todos os arquivos na área dos assinantes de um site. Para obter mais informações sobre por que você pode querer usar cookies assinados em vez de assinados URLs (ou vice-versa), consulte [Escolha entre cookies assinados URLs e assinados](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-choosing-signed-urls-cookies.html) no Amazon CloudFront Developer Guide.

A criação de um cookie assinado é semelhante à criação de uma URL assinada. A única diferença é o método que é chamado (`getSignedCookie` em vez de `getSignedUrl`).

 **Importações** 

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

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

 **Código de exemplo** 

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

## Use uma política personalizada ao criar CloudFront cookies
<a name="use-a-custom-policy-when-creating-cf-cookies"></a>

Assim como ocorre com `getSignedUrl`, você pode fornecer um parâmetro `'policy'` em vez de um parâmetro `expires` e de um parâmetro `url` para assinar um cookie com uma política personalizada. Uma política personalizada pode conter caracteres curinga na chave do recurso. Isso permite criar um único cookie assinado para vários arquivos.

 `getSignedCookie` retorna uma matriz de pares de chave-valor, que devem ser definidos como cookies para conceder acesso a uma distribuição privada.

 **Importações** 

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

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

 **Código de exemplo** 

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

## Enviar CloudFront cookies para o cliente Guzzle
<a name="send-cf-cookies-to-guzzle-client"></a>

Você também pode passar esses cookies para um `GuzzleHttp\Cookie\CookieJar` para uso com um cliente do Guzzle.

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

Para obter mais informações, consulte [Usando cookies assinados](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html) no Amazon CloudFront Developer Guide.

# Inscrição de solicitações personalizadas do domínio do Amazon CloudSearch com o AWS SDK para PHP versão 3
<a name="service_cloudsearch-custom-requests"></a>

As solicitações de domínio do Amazon CloudSearch podem ser personalizadas para além do que é compatível com o AWS SDK para PHP. Nos casos em que você precisa fazer solicitações personalizadas para domínios protegidos por autenticação do IAM, você pode usar os provedores e assinantes de credenciais do SDK para assinar qualquer [Solicitação PSR-7](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Psr.Http.Message.RequestInterface.html).

Por exemplo, se você estiver seguindo o [Guia de conceitos básicos do Cloud Search](https://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-started.html) e desejar usar um domínio protegido do IAM para a [Etapa 3](https://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-started-search.html), será necessário assinar e executar sua solicitação da seguinte forma.

Os exemplos a seguir mostram como:
+ Assine uma solicitação com o protocolo de assinatura da AWS usando o [SignatureV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Signature.SignatureV4.html#_signRequest).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Assinar a solicitação de domínio do Amazon CloudSearch
<a name="sign-cslong-domain-request"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Exemplos do Amazon CloudWatch usando o AWS SDK para PHP versão 3
<a name="cw-examples"></a>

O Amazon CloudWatch (CloudWatch) monitora os recursos da Amazon Web Services e as aplicações executadas na AWS em tempo real. Você pode usar o CloudWatch para coletar e monitorar métricas, que são as variáveis mensuráveis que ajudam você a avaliar seus recursos e aplicativos. Os alarmes do CloudWatch enviam notificações ou fazem alterações automaticamente nos recursos que você está monitorando com base nas regras definidas.

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

**Topics**
+ [Credenciais](#examplecredentials)
+ [Trabalhar com alarmes do Amazon CloudWatch](cw-examples-work-with-alarms.md)
+ [Obter métricas do CloudWatch](cw-examples-getting-metrics.md)
+ [Publicar métricas personalizadas no Amazon CloudWatch](cw-examples-publishing-custom-metrics.md)
+ [Envio de eventos para CloudWatch eventos da Amazon](cw-examples-sending-events.md)
+ [Usar ações de alarmes com alarmes do Amazon CloudWatch](cw-examples-using-alarm-actions.md)

# Trabalhar com alarmes do Amazon CloudWatch com o AWS SDK para PHP versão 3
<a name="cw-examples-work-with-alarms"></a>

O alarme do Amazon CloudWatch observa uma única métrica em um período especificado. Ele executa uma ou mais ações com base no valor da métrica em relação a um limite especificado ao longo de vários períodos.

Os exemplos a seguir mostram como:
+ Descrever um alarme usando [DescribeAlarms](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#describealarms).
+ Criar um alarme usando [PutMetricAlarm](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#putmetricalarm).
+ Excluir um alarme usando [DeleteAlarms](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#deletealarms).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Descrever alarmes
<a name="describe-alarms"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Criar um alarme
<a name="create-an-alarm"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Excluir alarmes
<a name="delete-alarms"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Obter métricas do Amazon CloudWatch com o AWS SDK para PHP versão 3
<a name="cw-examples-getting-metrics"></a>

Métricas são dados sobre a performance de seus sistemas. É possível habilitar o monitoramento detalhado de alguns recursos, como instâncias do Amazon EC2 ou de métricas de suas próprias aplicações.

Os exemplos a seguir mostram como:
+ Listar as métricas usando [ListMetrics](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#listmetrics).
+ Recuperar alarmes para uma métrica usando [DescribeAlarmsForMetric](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#describealarmsformetric).
+ Obter as estatísticas de uma métrica especificada usando [GetMetricStatistics](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#getmetricstatistics).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Listar as métricas
<a name="list-metrics"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Recuperar alarmes para uma métrica
<a name="retrieve-alarms-for-a-metric"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Obter estatísticas de métricas
<a name="get-metric-statistics"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Publicar métricas personalizadas no Amazon CloudWatch com o AWS SDK para PHP versão 3
<a name="cw-examples-publishing-custom-metrics"></a>

Métricas são dados sobre a performance de seus sistemas. O alarme observa uma única métrica em um período especificado. Ele executa uma ou mais ações com base no valor da métrica, relativa a um limite especificado em um número de períodos.

Os exemplos a seguir mostram como:
+ Publicar dados de métricas usando [PutMetricData](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#putmetricdata).
+ Criar um alarme usando [PutMetricAlarm](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#putmetricalarm).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Publicar dados de métricas
<a name="publish-metric-data"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Criar um alarme
<a name="create-an-alarm"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Envio de eventos para a Amazon CloudWatch Events com a AWS SDK para PHP versão 3
<a name="cw-examples-sending-events"></a>

CloudWatch O Events fornece um fluxo quase em tempo real de eventos do sistema que descrevem mudanças nos recursos da Amazon Web Services (AWS) para qualquer um dos vários destinos. Com regras simples, é possível corresponder eventos e roteá-los para um ou mais fluxos ou funções de destino.

Os exemplos a seguir mostram como:
+ Crie uma regra usando [PutRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-events-2015-10-07.html#putrule)o.
+ Adicione alvos a uma regra usando [PutTargets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-events-2015-10-07.html#puttargets)o.
+ Envie eventos personalizados para CloudWatch Eventos usando [PutEvents](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-events-2015-10-07.html#putevents).

Todo o código de exemplo do AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar uma regra
<a name="create-a-rule"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

## Adicionar destinos a uma regra
<a name="add-targets-to-a-rule"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

## Enviar eventos personalizados
<a name="send-custom-events"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

# Usar ações de alarmes com alarmes do Amazon CloudWatch com o AWS SDK para PHP versão 3
<a name="cw-examples-using-alarm-actions"></a>

Use ações de alarmes para criar alarmes que param, encerram, reiniciam ou recuperam suas instâncias do Amazon EC2. Use as ações parar ou encerrar quando não for mais necessário que uma instância seja executada. Use as ações reiniciar e recuperar para reiniciar essas instâncias automaticamente.

Os exemplos a seguir mostram como:
+ Habilitar ações para alarmes especificados usando [EnableAlarmActions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#enablealarmactions).
+ Desabilitar ações para alarmes especificados usando [DisableAlarmActions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-monitoring-2010-08-01.html#disablealarmactions).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Habilitar ações de alarme
<a name="enable-alarm-actions"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Desabilitar ações de alarme
<a name="disable-alarm-actions"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Exemplos do Amazon EC2 usando o AWS SDK para PHP versão 3
<a name="ec2-examples"></a>

O Amazon Elastic Compute Cloud (Amazon EC2) é um serviço Web que fornece hospedagem de servidor virtual na nuvem. Ele foi projetado para facilitar a computação em nuvem em escala da web para desenvolvedores fornecendo capacidade computacional redimensionável.

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

**Topics**
+ [Credenciais](#examplecredentials)
+ [Gerenciar instâncias do Amazon EC2](ec2-examples-managing-instances.md)
+ [Usar endereços IP elásticos](ec2-examples-using-elastic-ip-addresses.md)
+ [Usar regiões e zonas de disponibilidade](ec2-examples-using-regions-and-zones.md)
+ [Trabalhar com pares de chaves](ec2-examples-working-with-key-pairs.md)
+ [Trabalhar com grupos de segurança](ec2-examples-using-security-groups.md)

# Gerenciamento de instâncias do Amazon EC2 usando o AWS SDK para PHP versão 3
<a name="ec2-examples-managing-instances"></a>

Os exemplos a seguir mostram como:
+ Descrever instâncias do Amazon EC2 usando [DescribeInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeinstances).
+ Habilitar o monitoramento detalhado de uma instância em execução usando [MonitorInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#monitorinstances).
+ Desabilitar o monitoramento de uma instância em execução usando [UnmonitorInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#unmonitorinstances).
+ Iniciar uma AMI baseada no Amazon EBS interrompida anteriormente usando [StartInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#startinstances).
+ Interromper uma instância baseada no Amazon EBS usando [StopInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#stopinstances).
+ Solicitar a reinicialização de uma ou mais instâncias usando [RebootInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#rebootinstances).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Descrever instâncias
<a name="describe-instances"></a>

 **Importações** 

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

use Aws\Ec2\Ec2Client;
```

 **Código de exemplo** 

```
$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";
    }
}
```

## Habilitar e desabilitar o monitoramento
<a name="enable-and-disable-monitoring"></a>

 **Importações** 

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

 **Código de exemplo** 

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

## Iniciar e interromper uma instância do
<a name="start-and-stop-an-instance"></a>

 **Importações** 

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

 **Código de exemplo** 

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

## Reinicializar uma instância
<a name="reboot-an-instance"></a>

 **Importações** 

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

 **Código de exemplo** 

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

# Usando endereços IP elásticos com o Amazon EC2 com AWS SDK para PHP a versão 3
<a name="ec2-examples-using-elastic-ip-addresses"></a>

Um endereço IP elástico é um endereço IP estático projetado para computação em nuvem dinâmica. Um endereço IP elástico está associado ao seu Conta da AWS. Trata-se de um endereço IP público que pode ser acessado na Internet. Se a instância não tiver um endereço IP público, você poderá associar um endereço IP elástico à instância para permitir a comunicação com a Internet.

Os exemplos a seguir mostram como:
+ Descreva uma ou mais de suas instâncias usando [DescribeInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeinstances).
+ Adquira um endereço IP elástico usando [AllocateAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#allocateaddress).
+ Associe um endereço IP elástico a uma instância usando [AssociateAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#associateaddress).
+ Libere um endereço IP elástico usando [ReleaseAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#releaseaddress)o.

Todo o código de exemplo para o AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Descrever uma instância
<a name="describe-an-instance"></a>

 **Importações** 

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

use Aws\Ec2\Ec2Client;
```

 **Código de exemplo** 

```
$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";
    }
}
```

## Alocar e associar um endereço
<a name="allocate-and-associate-an-address"></a>

 **Importações** 

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

 **Código de exemplo** 

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

## Liberar um endereço
<a name="release-an-address"></a>

 **Importações** 

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

 **Código de exemplo** 

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

# Uso de regiões e zonas de disponibilidade para o Amazon EC2 com o AWS SDK para PHP versão 3
<a name="ec2-examples-using-regions-and-zones"></a>

O Amazon EC2 está hospedado em vários locais no mundo todo. Esses locais são compostos por regiões da AWS e zonas de disponibilidade. Toda região é uma área geográfica distinta com vários locais isolados conhecidos como zonas de disponibilidade. O Amazon EC2 permite alocar instâncias e dados em diversos locais.

Os exemplos a seguir mostram como:
+ Descrever as zonas de disponibilidade que estão disponíveis usando [DescribeAvailabilityZones](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeavailabilityzones).
+ Descreva regiões da AWS que estão disponíveis atualmente usando [DescribeRegions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeregions).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Descrever zonas de disponibilidade
<a name="describe-availability-zones"></a>

 **Importações** 

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

 **Código de exemplo** 

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

$result = $ec2Client->describeAvailabilityZones();

var_dump($result);
```

## Descrever regiões
<a name="describe-regions"></a>

 **Importações** 

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

 **Código de exemplo** 

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

$result = $ec2Client->describeRegions();

var_dump($result);
```

# Trabalhar com pares de chaves do Amazon EC2 com o AWS SDK para PHP versão 3
<a name="ec2-examples-working-with-key-pairs"></a>

O Amazon EC2 utiliza criptografia de chave pública para criptografar e descriptografar as informações de login. A criptografia de chave pública usa uma chave pública para criptografar dados. Em seguida, o destinatário usa a chave privada para descriptografar os dados. As chaves pública e privada são conhecidas como par de chaves.

Os exemplos a seguir mostram como:
+ Criar um par de chaves RSA de 2.048 bits usando [CreateKeyPair](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#createkeypair).
+ Excluir um determinado par de chaves usando [DeleteKeyPair](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#deletekeypair).
+ Descrever um ou mais pares de chaves usando [DescribeKeyPairs](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describekeypairs).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar um par de chaves
<a name="create-a-key-pair"></a>

 **Importações** 

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

 **Código de exemplo** 

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

## Excluir um par de chaves
<a name="delete-a-key-pair"></a>

 **Importações** 

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

 **Código de exemplo** 

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

## Descrever pares de chaves
<a name="describe-key-pairs"></a>

 **Importações** 

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

 **Código de exemplo** 

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

$result = $ec2Client->describeKeyPairs();

var_dump($result);
```

# Como trabalhar com grupos de segurança no Amazon EC2 com o AWS SDK para PHP versão 3
<a name="ec2-examples-using-security-groups"></a>

Um grupo de segurança do Amazon EC2 atua como um firewall virtual que controla o tráfego para uma ou mais instâncias. Você adiciona regras a cada grupo de segurança que permite tráfego de entrada ou de saída das instâncias associadas. É possível modificar as regras de um grupo de segurança a qualquer momento. As novas regras são aplicadas automaticamente para todas as instâncias que estão associados ao grupo de segurança.

Os exemplos a seguir mostram como:
+ Descrever um ou mais grupos de segurança usando [DescribeSecurityGroups](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describesecuritygroups).
+ Adicionar uma regra de entrada a um grupo de segurança usando [AuthorizeSecurityGroupIngress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#authorizesecuritygroupingress).
+ Criar um grupo de segurança usando [CreateSecurityGroup](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#createsecuritygroup).
+ Excluir um grupo de segurança usando [DeleteSecurityGroup](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#deletesecuritygroup).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Descrever grupos de segurança
<a name="describe-security-groups"></a>

 **Importações** 

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

 **Código de exemplo** 

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

$result = $ec2Client->describeSecurityGroups();

var_dump($result);
```

## Adicionar uma regra de entrada
<a name="add-an-ingress-rule"></a>

 **Importações** 

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

 **Código de exemplo** 

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

## Criar um grupo de segurança
<a name="create-a-security-group"></a>

 **Importações** 

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

 **Código de exemplo** 

```
$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';
```

## Exclua um grupo de segurança
<a name="delete-a-security-group"></a>

 **Importações** 

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

 **Código de exemplo** 

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

# Assinar uma solicitação de pesquisa do Amazon OpenSearch Service com a AWS SDK para PHP versão 3
<a name="service_es-data-plane"></a>

O Amazon OpenSearch Service é um serviço gerenciado que facilita implantar, operar e escalar o Amazon OpenSearch Service, um conhecido mecanismo de pesquisa e análise de código aberto. O OpenSearch Service oferece acesso direto à API do Amazon OpenSearch Service. Isso significa que os desenvolvedores podem usar as ferramentas com as quais estão familiarizados, bem como opções de segurança robustas. Muitos clientes do Amazon OpenSearch Service oferecem suporte à assinatura de solicitações, mas, caso esteja diante de um cliente que não oferece, é possível assinar solicitações PSR-7 arbitrárias com os provedores de credenciais e assinantes integrados do AWS SDK para PHP.

Os exemplos a seguir mostram como:
+ Assine uma solicitação com o protocolo de assinatura da AWS usando o [SignatureV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Signature.SignatureV4.html#_signRequest).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Assinar uma solicitação do OpenSearch Service
<a name="signing-an-es-request"></a>

O OpenSearch Service usa o [Signature versão 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html). Isso significa que você precisa assinar solicitações com o nome de assinatura do serviço (`es`, neste caso) e a região da AWS do seu domínio do OpenSearch Service. Uma lista completa de regiões compatíveis com o OpenSearch Service pode ser encontrada [ na página Regiões e endpoints da AWS](https://docs.aws.amazon.com/general/latest/gr/rande.html) na Referência geral da Amazon Web Services. No entanto, neste exemplo, assinaremos solicitações para um domínio do OpenSearch Service na região `us-west-2`.

É necessário fornecer credenciais, o que pode ser feito com a cadeia de provedores padrão do SDK ou com qualquer formulário de credenciais descrito em [Credenciais do AWS SDK para PHP versão 3](guide_credentials.md). Também será necessária uma [solicitação PSR-7](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Psr.Http.Message.RequestInterface.html) (assumida no código abaixo com o nome `$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);
```

# Exemplos do AWS Identity and Access Management usando o AWS SDK para PHP versão 3
<a name="iam-examples"></a>

O AWS Identity and Access Management (IAM) é um serviço web que permite que os clientes da Amazon Web Services gerenciem usuários e permissões de usuário no AWS. O serviço é destinado a organizações com vários usuários ou sistemas na nuvem que usam os produtos da AWS. Com o IAM, é possível gerenciar usuários, credenciais de segurança como chaves de acesso e permissões que controlam quais recursos da AWS os usuários podem acessar.

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

**Topics**
+ [Credenciais](#examplecredentials)
+ [Gerenciar chaves de acesso do IAM](iam-examples-managing-access-keys.md)
+ [Gerenciar usuários do IAM](iam-examples-managing-users.md)
+ [Usar aliases de conta do IAM](iam-examples-using-account-aliases.md)
+ [Trabalhar com políticas do IAM](iam-examples-working-with-policies.md)
+ [Trabalhar com certificados de servidor do IAM](iam-examples-working-with-certs.md)

# Gerenciar chaves de acesso ao IAM com o AWS SDK para PHP versão 3
<a name="iam-examples-managing-access-keys"></a>

Os usuários precisam de suas próprias chaves de acesso para fazer chamadas programáticas à AWS. Para atender a essa necessidade, você pode criar, modificar, exibir ou mudar chaves de acesso (IDs de chave de acesso e chaves de acesso secretas) para os usuários do IAM. Por padrão, quando você cria uma chave de acesso, seu status é Ativo. Isso significa que o usuário pode usar a chave de acesso para chamadas à API.

Os exemplos a seguir mostram como:
+ Criar uma chave de acesso secreta e o ID da chave de acesso correspondente usando [CreateAccessKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#createaccesskey).
+ Retornar informações sobre os IDs de chave de acesso associados a um usuário do IAM usando [ListAccessKeys](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#listaccesskeys).
+ Recuperar informações sobre quando uma chave de acesso foi usada pela última vez usando [GetAccessKeyLastUsed](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#getaccesskeylastused).
+ Alterar o status de uma chave de acesso do Active para Inativo ou vice-versa usando [UpdateAccessKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#updateaccesskey).
+ Excluir um par de chaves de acesso associadas a um usuário do IAM usando [DeleteAccessKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteaccesskey).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar uma chave de acesso
<a name="create-an-access-key"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Listar chaves de acesso
<a name="list-access-keys"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Obter informações sobre o uso mais recente de uma chave de acesso
<a name="get-information-about-an-access-key-s-last-use"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Atualizar uma chave de acesso
<a name="update-an-access-key"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Excluir uma chave de acesso
<a name="delete-an-access-key"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Gerenciamento de usuários do IAM com o AWS SDK para PHP versão 3
<a name="iam-examples-managing-users"></a>

Um usuário do IAM é uma entidade que você cria na AWS para representar a pessoa ou o serviço que o utiliza para interagir com a AWS. Um usuário na AWS consiste em um nome e credenciais.

Os exemplos a seguir mostram como:
+ Criar um usuário do IAM usando [CreateUser](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#createuser).
+ Listar os usuários do IAM usando [ListUsers](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#listusers).
+ Atualizar um usuário do IAM usando [UpdateUser](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#updateuser).
+ Recuperar informações sobre um usuário do IAM usando [GetUser](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#getuser).
+ Excluir um usuário do IAM usando [DeleteUser](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteuser).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar um usuário do IAM
<a name="create-an-iam-user"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Listar usuários do IAM
<a name="list-iam-users"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Atualizar um usuário do IAM
<a name="update-an-iam-user"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Obter informações sobre um usuário do IAM
<a name="get-information-about-an-iam-user"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Excluir um usuário do IAM
<a name="delete-an-iam-user"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Usar aliases de conta do IAM com o AWS SDK para PHP versão 3
<a name="iam-examples-using-account-aliases"></a>

Se deseja que o URL para sua página de login contenha o nome da sua empresa (ou outro identificador amigável) em vez do ID de sua Conta da AWS, você pode criar um alias para o ID de sua Conta da AWS. Se você criar um alias da Conta da AWS, o URL de sua página de login será alterado para incorporar o alias.

Os exemplos a seguir mostram como:
+ Criar um alias usando [CreateAccountAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#createaccountalias).
+ Liste o alias associado à Conta da AWS usando [ListAccountAliases](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#listaccountaliases).
+ Excluir um alias usando [DeleteAccountAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteaccountalias).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar um alias
<a name="create-an-alias"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Listar aliases de conta
<a name="list-account-aliases"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Excluir um alias
<a name="delete-an-alias"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Trabalhar com políticas do IAM com o AWS SDK para PHP versão 3
<a name="iam-examples-working-with-policies"></a>

Você concede permissões a um usuário criando uma política. Uma política é um documento que lista as ações que um usuário pode executar e os recursos que essas ações podem afetar. Por padrão, todas as ações ou recursos que não são explicitamente permitidos são negados. As políticas podem ser criadas e anexadas aos usuários, grupos de usuários, funções assumidas por usuários e recursos.

Os exemplos a seguir mostram como:
+ Criar uma política gerenciada usando [CreatePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#createpolicy).
+ Anexar uma política a uma função usando [AttachRolePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#attachrolepolicy).
+ Anexar uma política a um usuário usando [AttachUserPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#attachuserpolicy).
+ Anexar uma política a um grupo usando [AttachGroupPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#attachgrouppolicy).
+ Remover uma política de função usando [DetachRolePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#detachrolepolicy).
+ Remover uma política de usuário usando [DetachUserPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#detachuserpolicy).
+ Remover uma política de grupo usando [DetachGroupPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#detachgrouppolicy).
+ Excluir uma política gerenciada usando [DeletePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deletepolicy).
+ Excluir uma política de função usando [DeleteRolePolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleterolepolicy).
+ Excluir uma política de usuário usando [DeleteUserPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteuserpolicy).
+ Excluir uma política de grupo usando [DeleteGroupPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deletegrouppolicy).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar uma política
<a name="create-a-policy"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Anexar uma política a uma função
<a name="attach-a-policy-to-a-role"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Anexar uma política a um usuário
<a name="attach-a-policy-to-a-user"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Anexar uma política a um grupo
<a name="attach-a-policy-to-a-group"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Desanexar uma política de usuário
<a name="detach-a-user-policy"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Desanexar uma política de grupo
<a name="detach-a-group-policy"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Excluir uma política
<a name="delete-a-policy"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Excluir uma política de perfil
<a name="delete-a-role-policy"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Excluir uma política de usuário
<a name="delete-a-user-policy"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Excluir uma política de grupo
<a name="delete-a-group-policy"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Trabalhar com certificados de servidor do IAM com o AWS SDK para PHP versão 3
<a name="iam-examples-working-with-certs"></a>

Para permitir conexões HTTPS com o site ou a aplicação na AWS, você precisa de um certificado de servidor SSL/TLS. Para usar um certificado que você obteve de um provedor externo com seu site ou sua aplicação na AWS, é necessário fazer upload desse certificado para o IAM ou importá-lo para o AWS Certificate Manager.

Os exemplos a seguir mostram como:
+ Liste os certificados armazenados no IAM usando [ListServerCertificates](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#listservercertificates).
+ Recuperar informações sobre um certificado usando [GetServerCertificate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#getservercertificate).
+ Atualizar um certificado usando [UpdateServerCertificate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#updateservercertificate).
+ Excluir um certificado usando [DeleteServerCertificate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-iam-2010-05-08.html#deleteservercertificate).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Listar certificados do servidor
<a name="list-server-certificates"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Recuperar um certificado de servidor
<a name="retrieve-a-server-certificate"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Atualizar um certificado do servidor
<a name="update-a-server-certificate"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

## Excluir um certificado do servidor
<a name="delete-a-server-certificate"></a>

 **Importações** 

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

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

 **Código de exemplo** 

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

# Exemplos do AWS Key Management Service usando o AWS SDK para PHP versão 3
<a name="kms-examples"></a>

AWS Key Management Service (AWS KMS) é um serviço gerenciado que facilita a criação e o controle das chaves de criptografia usadas para criptografar seus dados. Para obter mais informações sobre o AWS KMS, consulte a [Documentação do Amazon KMS](https://aws.amazon.com/documentation/kms/). Se você estiver escrevendo aplicações seguras para PHP ou enviando dados para outros serviços da AWS, o AWS KMS ajudará a manter o controle sobre quem pode usar as chaves e ter acesso aos dados criptografados.

Todo o código de exemplo do AWS SDK para PHP versão 3 está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

**Topics**
+ [Trabalhar com chaves](kms-example-keys.md)
+ [Criptografar e descriptografar chaves de dados](kms-example-encrypt.md)
+ [Trabalhar com políticas de chaves](kms-example-key-policy.md)
+ [Trabalhar com concessões](kms-example-grants.md)
+ [Trabalhar com aliases](kms-example-alias.md)

# Trabalhando com chaves usando a AWS KMS API e a AWS SDK para PHP versão 3
<a name="kms-example-keys"></a>

Os recursos primários em AWS Key Management Service (AWS KMS) são [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys). Você pode usar uma chave do KMS para criptografar seus dados.

Os exemplos a seguir mostram como:
+ Crie uma chave KMS do cliente usando [CreateKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#createkey).
+ Gere uma chave de dados usando [GenerateDataKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#generatedatakey).
+ Visualize uma chave KMS usando [DescribeKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#describekey).
+ Obtenha a chave IDs e a chave ARNS das chaves KMS usando. [ListKeys](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#listkeys)
+ Ative as chaves KMS usando [EnableKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#enablekey).
+ Desative as chaves KMS usando [DisableKey](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#disablekey).

Todo o código de exemplo para o AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre como usar AWS Key Management Service (AWS KMS), consulte o [Guia do AWS KMS desenvolvedor](https://docs.aws.amazon.com/kms/latest/developerguide/).

## Criar uma chave do KMS
<a name="create-a-cmk"></a>

Para criar uma [chave KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys), use a [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)operação.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Gerar uma chave de dados
<a name="generate-a-data-key"></a>

Para gerar uma chave de criptografia de dados, use a [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)operação. Essa operação retorna cópias de texto simples e criptografadas da chave de dados que ela cria. Especifique o AWS KMS key abaixo do qual gerar a chave de dados.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Visualizar uma chave do KMS
<a name="view-a-cmk"></a>

Para obter informações detalhadas sobre uma chave KMS, incluindo o Amazon Resource Name (ARN) e o [estado da chave](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html) KMS, use a operação. [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)

 `DescribeKey` não obtém aliases. Para obter aliases, use a [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)operação.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Obtenha o ID da chave e a chave ARNs de uma chave KMS
<a name="get-the-key-id-and-key-arns-of-a-cmk"></a>

Para obter o ID e o ARN da chave KMS, use a operação. [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Habilitar uma chave do KMS
<a name="enable-a-cmk"></a>

Para ativar uma chave KMS desativada, use a [EnableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKey.html)operação.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Desabilitar uma chave do KMS
<a name="disable-a-cmk"></a>

Para desativar uma chave KMS, use a [DisableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html)operação. A desabilitação de uma chave do KMS impede que ela seja usada.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Criptografando e descriptografando chaves de AWS KMS dados usando a versão 3 AWS SDK para PHP
<a name="kms-example-encrypt"></a>

As chaves de dados são as chaves de criptografia que você pode usar para criptografar dados, incluindo grandes quantidades de dados e outras chaves de criptografia de dados.

Você pode usar AWS Key Management Service an's (AWS KMS) [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)para gerar, criptografar e descriptografar chaves de dados.

Os exemplos a seguir mostram como:
+ Criptografar uma chave de dados usando [Encrypt](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#encrypt).
+ Descriptografar uma chave de dados usando [Decrypt](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#decrypt).
+ Criptografe novamente uma chave de dados com uma nova chave KMS usando. [ReEncrypt](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#reencrypt)

Todo o código de exemplo para o AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre como usar AWS Key Management Service (AWS KMS), consulte o [Guia do AWS KMS desenvolvedor](https://docs.aws.amazon.com/kms/latest/developerguide/).

## Encrypt
<a name="encrypt"></a>

A operação [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) é projetada para criptografar chaves de dados, mas não é usada com frequência. As [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)operações [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)e retornam chaves de dados criptografadas. Você pode usar o método `Encypt` quando estiver movendo dados criptografados para uma nova região da AWS e quiser criptografar a chave de dados com uma chave do KMS na nova região.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

Para descriptografar uma chave de dados, use a operação [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html).

O `ciphertextBlob` que você especificar deve ser o valor do `CiphertextBlob` campo de uma resposta [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html), [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html), ou [Criptografar.](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Recriptografar
<a name="reencrypt"></a>

Para descriptografar uma chave de dados criptografada e, em seguida, recriptografar imediatamente a chave de dados com uma chave KMS diferente, use a operação. [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) As operações são realizadas inteiramente no lado interno do servidor AWS KMS, para que nunca exponham seu texto simples do lado de fora. AWS KMS

O `ciphertextBlob` que você especificar deve ser o valor do `CiphertextBlob` campo de uma resposta [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html), [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html), ou [Criptografar.](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Trabalhando com as AWS KMS principais políticas usando a AWS SDK para PHP versão 3
<a name="kms-example-key-policy"></a>

Ao criar uma [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys), você determina quem pode usar e gerenciar essa chave do KMS. Essas permissões estão contidas em um documento chamado política de chaves. Você pode usar a política de chaves para adicionar, remover ou modificar permissões a qualquer momento para uma chave KMS gerenciada pelo cliente, mas não pode editar a política de chaves para uma chave KMS AWS gerenciada. Para obter mais informações, consulte [Autenticação e controle de acesso para o AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html).

Os exemplos a seguir mostram como:
+ Liste os nomes das principais políticas usando [ListKeyPolicies](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#listkeypolicies).
+ Obtenha uma política importante usando [GetKeyPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#getkeypolicy).
+ Defina uma política chave usando [PutKeyPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#putkeypolicy).

Todo o código de exemplo do AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre como usar AWS Key Management Service (AWS KMS), consulte o [Guia do AWS KMS desenvolvedor](https://docs.aws.amazon.com/kms/latest/developerguide/).

## Listar todas as políticas de chaves
<a name="list-all-key-policies"></a>

Para obter os nomes das políticas de chaves de uma chave do KMS, use a operação `ListKeyPolicies`. 

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Recuperar uma política de chaves
<a name="retrieve-a-key-policy"></a>

Para obter a política de uma chave do KMS, use a operação `GetKeyPolicy`.

 `GetKeyPolicy` exige um nome de política. A não ser que você tenha criado uma política de chave ao criar a chave do KMS, o único nome de política válido é o padrão. Saiba mais sobre a [política de chave padrão](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html) no *Guia do desenvolvedor do AWS Key Management Service *.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Definir uma política de chave
<a name="set-a-key-policy"></a>

Para estabelecer ou alterar a política de uma chave do KMS, use a operação `PutKeyPolicy`.

 `PutKeyPolicy` exige um nome de política. A não ser que você tenha criado uma política de chave ao criar a chave do KMS, o único nome de política válido é o padrão. Saiba mais sobre a [política de chave padrão](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html) no *Guia do desenvolvedor do AWS Key Management Service *.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Trabalhando com subsídios usando a AWS KMS API e a AWS SDK para PHP versão 3
<a name="kms-example-grants"></a>

Uma concessão é outro mecanismo para fornecer permissões. É uma alternativa à política de chave. Você pode usar subsídios para fornecer acesso de longo prazo que permita que AWS os diretores usem seu AWS Key Management Service (AWS KMS) gerenciado pelo cliente [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys). Para obter mais informações, consulte [Concessões no AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) no *Guia do desenvolvedor AWS Key Management Service *.

Os exemplos a seguir mostram como:
+ Crie uma concessão para uma chave KMS usando [CreateGrant](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#creategrant).
+ Visualize uma concessão para uma chave KMS usando [ListGrants](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#listgrants).
+ Retire uma concessão para uma chave KMS usando [RetireGrant](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#retiregrant).
+ Revogue a concessão de uma chave KMS usando. [RevokeGrant](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#revokegrant)

Todo o código de exemplo para o AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre como usar AWS Key Management Service (AWS KMS), consulte o [Guia do AWS KMS desenvolvedor](https://docs.aws.amazon.com/kms/latest/developerguide/).

## Criar uma concessão
<a name="create-a-grant"></a>

Para criar uma concessão para um AWS KMS key, use a [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)operação.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Visualizar uma concessão
<a name="view-a-grant"></a>

Para obter informações detalhadas sobre as concessões em um AWS KMS key, use a [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)operação.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Retirar uma concessão
<a name="retire-a-grant"></a>

Para retirar uma concessão de um AWS KMS key, use a [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)operação. Remova uma concessão para limpá-la depois que terminar de usá-la.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Revogar uma concessão
<a name="revoke-a-grant"></a>

Para revogar uma concessão a um AWS KMS key, use a [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)operação. Você pode revogar uma concessão para negar explicitamente as operações que dependem dela.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Trabalhando com aliases usando a AWS KMS API e a AWS SDK para PHP versão 3
<a name="kms-example-alias"></a>

AWS Key Management Service (AWS KMS) fornece um nome de exibição opcional para um [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)chamado alias.

Os exemplos a seguir mostram como:
+ Crie um alias usando o. [CreateAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#createalias)
+ Visualize um alias usando [ListAliases](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#listaliases).
+ Atualize um alias usando o. [UpdateAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#updatealias)
+ Exclua um alias usando [DeleteAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kms-2014-11-01.html#deletealias).

Todo o código de exemplo do AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre como usar AWS Key Management Service (AWS KMS), consulte o [Guia do AWS KMS desenvolvedor](https://docs.aws.amazon.com/kms/latest/developerguide/).

## Criar um alias da
<a name="create-an-alias"></a>

Para criar um alias para uma chave KMS, use a [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html)operação. O alias deve ser exclusivo na conta e na AWS região. Se você criar um alias para uma chave do KMS que já tem um alias, a operação `CreateAlias` criará outro alias para a mesma chave do KMS. Ela não substitui o alias existente.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Visualizar um alias
<a name="view-an-alias"></a>

Para listar todos os aliases na mão do Conta da AWS chamador Região da AWS, use a [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)operação. 

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Atualizar um alias
<a name="update-an-alias"></a>

Para associar um alias existente a uma chave KMS diferente, use a [UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html)operação.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Excluir um alias
<a name="delete-an-alias"></a>

Para excluir um alias, use a [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html)operação. A exclusão de um alias não tem efeito sobre a chave do KMS subjacente.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Exemplos do Amazon Kinesis usando o AWS SDK para PHP versão 3
<a name="kinesis-examples"></a>

O Amazon Kinesis é um serviço da AWS que coleta, processa e analisa dados em tempo real. Configure seus fluxos de dados com o Amazon Kinesis Data Streams ou use o Amazon Data Firehose para enviar dados ao Amazon S3, OpenSearch Service, Amazon Redshift ou Splunk.

Para obter mais informações sobre o Kinesis, consulte a [Documentação do Amazon Kinesis](https://docs.aws.amazon.com/kinesis/index.html).

Todo o código de exemplo do AWS SDK para PHP versão 3 está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

**Topics**
+ [Fluxos de dados do Kinesis](kinesis-example-data-stream.md)
+ [Fragmentos do Kinesis](kinesis-example-shard.md)
+ [Fluxos de entrega do Kinesis Data Firehose](kinesis-firehose-example-delivery-stream.md)

# Criação de fluxos de dados usando a API do Kinesis Data Streams e o AWS SDK para PHP versão 3
<a name="kinesis-example-data-stream"></a>

O Amazon Kinesis Data Streams permite que você envie dados em tempo real. Crie um produtor de dados com o Kinesis Data Streams que fornece dados para o destino configurado a cada vez que você adicionar dados.

Para obter mais informações, consulte [Como criar e gerenciar fluxos](https://docs.aws.amazon.com/kinesis/latest/dev/working-with-streams.html.html) no Guia do desenvolvedor do Amazon Kinesis.

Os exemplos a seguir mostram como:
+ Crie um streaming de dados usando [CreateAlias](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#createstream).
+ Obtenha detalhes sobre um único streaming de dados usando [DescribeStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#describestream).
+ Liste streaming de dados existentes usando [ListStreams](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#liststreams).
+ Envie dados para um streaming de dados existente usando [PutRecord](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#putrecord).
+ Exclua um streaming de dados usando [DeleteStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#deletestream).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso do Guia do desenvolvedor do Amazon Kinesis, consulte o [Guia do desenvolvedor do Amazon Kinesis Data Streams](https://docs.aws.amazon.com/kinesis/latest/dev/).

## Criar um fluxo de dados usando um fluxo de dados do Kinesis
<a name="create-a-data-stream-using-a-ak-data-stream"></a>

Estabeleça um fluxo de dados do Kinesis no qual você pode enviar informações para serem processadas pelo Kinesis usando o código de exemplo a seguir. Saiba mais sobre [como criar e atualizar fluxos de dados](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html) no Guia do desenvolvedor do Amazon Kinesis.

Para criar um fluxo de dados do Kinesis, use a operação [CreateStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_CreateStream.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Recuperar um fluxo de dados
<a name="retrieve-a-data-stream"></a>

Obtenha detalhes sobre um streaming de dados existente usando o código de exemplo a seguir. Por padrão, isso retorna informações sobre os primeiros dez fragmentos conectados ao fluxo de dados especificado do Kinesis. Lembre-se de verificar `StreamStatus` da resposta antes de gravar dados em um fluxo de dados do Kinesis.

Para recuperar detalhes sobre determinado fluxo de dados, o Kinesis usa a operação [DescribeStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStream.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Listar fluxos de dados existentes que estão conectados ao Kinesis
<a name="list-existing-data-streams-that-are-connected-to-ak"></a>

Liste os primeiros 10 fluxos de dados a partir de sua Conta da AWS na região da AWS selecionada. Use o ``HasMoreStreams` retornado para determinar se há mais streamings associados à sua conta.

Para listar os fluxos de dados do Kinesis, use a operação [ListStreams](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListStreams.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Enviar dados para um fluxo de dados existente
<a name="send-data-to-an-existing-data-stream"></a>

Depois de criar um streaming de dados, use o exemplo a seguir para enviar dados. Antes de enviar dados para ele, use `DescribeStream` para verificar se os dados `StreamStatus` estão ativos.

Para gravar um único registro de dados em um fluxo de dados do Kinesis, use a operação [PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html). Para gravar até 500 registros em um fluxo de dados do Kinesis, use a operação [PutRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Criar um fluxo de dados
<a name="delete-a-data-stream"></a>

Este exemplo demonstra como excluir um streaming de dados. Excluir um streaming de dados também exclui todos os dados enviados a ele. Os fluxos de dados ativos do Kinesis alternam para o estado DELETING até que a exclusão do fluxo seja concluída. Enquanto está no estado DELETING (EXCLUINDO), o streaming continua a processar dados.

Para excluir um fluxo de dados do Kinesis, use a operação [DeleteStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DeleteStream.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Gerenciar fragmentos de dados usando a API do Kinesis Data Streams e o AWS SDK para PHP versão 3
<a name="kinesis-example-shard"></a>

O Amazon Kinesis Data Streams permite que você envie dados em tempo real para um endpoint. A taxa de fluxo de dados depende do número de fragmentos no fluxo.

Você pode gravar 1.000 registros por segundo em um único fragmento. Cada fragmento também tem um limite de upload de 1 MiB por segundo. O uso é calculado e cobrado por fragmento, então, use estes exemplos para gerenciar a capacidade de dados e o custo do seu fluxo.

Os exemplos a seguir mostram como:
+ Liste fragmentos em um fluxo usando [ListShards](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#listshards).
+ Adicione ou reduza o número de fragmentos em um fluxo usando [UpdateShardCount](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-kinesis-1913-12-02.html#updateshardcount).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações, consulte Ler dados do Amazon Kinesis Data Streams no [Guia do desenvolvedor do Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/).

## Listar fragmentos de fluxos de dados
<a name="list-data-stream-shards"></a>

Liste os detalhes de até 100 fragmentos em um fluxo específico.

Para listar os fragmentos em um fluxo de dados do Kinesis, use a operação [ListShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListShards.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Adicionar mais fragmentos de fluxo de dados
<a name="add-more-data-stream-shards"></a>

Se precisar de mais fragmentos de fluxo de dados, você poderá aumentar o número atual de fragmentos. Recomendamos que você duplique sua contagem de fragmentos quando aumentá-la. Isso cria uma cópia de cada fragmento disponível atualmente para aumentar sua capacidade. Você pode dobrar o número de fragmentos apenas duas vezes em um período de 24 horas.

Lembre-se de que o faturamento do uso do Kinesis Data Streams é calculado por fragmento, então, quando a demanda diminui, recomendamos que você reduza a contagem de fragmentos pela metade. Ao remover fragmentos, você só pode reduzir a escala verticalmente da quantidade de fragmentos para a metade da sua contagem de fragmentos atual.

Para atualizar a contagem de fragmentos de um fluxo de dados do Kinesis dados, use a operação [UpdateShardCount](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_UpdateShardCount.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Criar fluxos de entrega usando a API do Firehose e o AWS SDK para PHP versão 3
<a name="kinesis-firehose-example-delivery-stream"></a>

O Amazon Data Firehose permite que você envie dados em tempo real para outros serviços da AWS, incluindo Amazon Kinesis Data Streams, Amazon S3, Amazon OpenSearch Service (OpenSearch Service) e Amazon Redshift, ou para o Splunk. Crie um produtor de dados com os fluxos de entrega para fornecer dados para o destino configurado a cada vez que você adicionar dados.

Os exemplos a seguir mostram como:
+ Criar um fluxo de entrega usando a operação [CreateDeliveryStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#createdeliverystream).
+ Obter detalhes sobre um único fluxo de entrega usando a operação [DescribeDeliveryStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#describedeliverystream).
+ Listar seus fluxos de entrega usando a operação [ListDeliveryStreams](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#listdeliverystreams).
+ Enviar dados para um fluxo de entrega usando a operação [PutRecord](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#putrecord).
+ Excluir um fluxo de entrega usando a operação [DeleteDeliveryStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-firehose-2015-08-04.html#deletedeliverystream).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter informações sobre como usar o Amazon Data Firehose, consulte o [Guia do desenvolvedor do Amazon Kinesis Data Firehose](https://docs.aws.amazon.com/streams/latest/dev/).

## Criar um fluxo de entrega usando um fluxo de dados do Kinesis
<a name="create-a-delivery-stream-using-a-ak-data-stream"></a>

Para estabelecer um fluxo de entrega que coloca os dados em um fluxo de dados do Kinesis, use a operação [CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html).

Isso permite que os desenvolvedores migrem serviços existentes do Kinesis para o Firehose.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Criar um fluxo de entrega usando um bucket do Amazon S3
<a name="create-a-delivery-stream-using-an-s3-bucket"></a>

Para estabelecer um fluxo de entrega que coloca os dados em um bucket do Amazon S3, use a operação [CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html).

Forneça os parâmetros de destino, conforme descrito em [Parâmetros de destino](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html). Em seguida, conceda ao seu bucket do Amazon S3 acesso ao Firehose, conforme descrito em [Conceder ao Kinesis Data Firehose acesso a um destino do Amazon S3](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Para testar um fluxo de entrega usando o OpenSearch Service
<a name="create-a-delivery-stream-using-es"></a>

Para estabelecer um fluxo de entrega do Firehose que coloca os dados em um cluster do OpenSearch Service, use a operação [CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html).

Forneça os parâmetros de destino, conforme descrito em [Parâmetros de destino](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html). Certifique-se de conceder ao seu cluster do OpenSearch Service acesso ao Firehose, conforme descrito em [Conceder ao Kinesis Data Firehose acesso a um destino do Amazon ES](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-es.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Recuperar um fluxo de entrega
<a name="retrieve-a-delivery-stream"></a>

Para obter detalhes sobre um fluxo de entrega existente do Firehose, use a operação [DescribeDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DescribeDeliveryStream.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Listar fluxos de entrega existentes que estão conectados ao Kinesis Data Streams
<a name="list-existing-delivery-streams-connected-to-aks"></a>

Para listar todos os fluxos de entrega existentes do Firehose que enviam dados para o Kinesis Data Streams, use a operação [ListDeliveryStreams](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ListDeliveryStreams.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Listar fluxos de entrega existentes que enviam dados para outros serviços da AWS
<a name="list-existing-delivery-streams-sending-data-to-other-aws-services"></a>

Para listar todos os fluxos de entrega existentes do Firehose que enviam dados para o Amazon S3, OpenSearch Service ou Amazon Redshift, ou para o Splunk, use a operação [ListDeliveryStreams](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ListDeliveryStreams.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Enviar dados para um fluxo de entrega existente do Firehose
<a name="send-data-to-an-existing-akf-delivery-stream"></a>

Para enviar dados por meio de um fluxo de entrega do Firehose ao seu destino especificado, use a operação [PutRecord](https://docs.aws.amazon.com/firehose/latest/APIReference/API_API_PutRecord.html) após criar um fluxo de entrega do Firehose.

Antes de enviar dados para um fluxo de entrega do Firehose, use `DescribeDeliveryStream` para verificar se o fluxo de entrega está ativo.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Excluir um fluxo de entrega do Firehose
<a name="delete-a-akf-delivery-stream"></a>

Para excluir um fluxo de entrega do Firehose, use a operação [DeleteDeliveryStreams](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DeleteDeliveryStreams.html). Isso também exclui todos os dados enviados ao fluxo de entrega.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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 exemplos usando a AWS SDK para PHP versão 3
<a name="emc-examples"></a>

AWS Elemental MediaConvert é um serviço de transcodificação de vídeo baseado em arquivo com recursos de nível de transmissão. Você pode usá-lo para criar ativos para transmissão e entrega video-on-demand (VOD) pela Internet. Para obter mais informações, consulte o [Guia do usuário do AWS Elemental MediaConvert](https://docs.aws.amazon.com/mediaconvert/latest/ug/).

A API PHP para AWS Elemental MediaConvert é exposta por meio da classe *`AWS.MediaConvert`*cliente. Para obter mais informações, consulte [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) na Referência da API.

## Crie e gerencie trabalhos de transcodificação no AWS Elemental MediaConvert
<a name="emc-examples-jobs"></a>

Neste exemplo, você usa a AWS SDK para PHP versão 3 para chamar AWS Elemental MediaConvert e criar um trabalho de transcodificação. Antes de começar, é necessário fazer upload do vídeo de entrada no bucket do Amazon S3 que você provisionou para o armazenamento de entrada. Para obter uma lista dos codecs de vídeo de entrada e contêineres compatíveis, consulte [Codecs e contêineres de entrada compatíveis](https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers-input.html) no [Guia do usuário do AWS Elemental MediaConvert](https://docs.aws.amazon.com/mediaconvert/latest/ug/).

Os exemplos a seguir mostram como:
+ Crie trabalhos de transcodificação em. AWS Elemental MediaConvert[CreateJob](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html#createjob).
+ Cancele um trabalho de transcodificação da AWS Elemental MediaConvert fila. [CancelJob](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html#canceljob) 
+ Recupere o JSON para concluir o trabalho de transcodificação. [GetJob](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html#getjob) 
+ Recupere uma matriz JSON para até 20 dos trabalhos criados mais recentemente. [ListJobs](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-mediaconvert-2017-08-29.html#listjobs) 

Todo o código de exemplo para o AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

### Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para acessar o MediaConvert cliente, crie uma função do IAM que dê AWS Elemental MediaConvert acesso aos seus arquivos de entrada e aos buckets do Amazon S3 onde seus arquivos de saída são armazenados. Para obter detalhes, consulte [Configurar permissões do IAM](https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html) no [Guia do usuário do AWS Elemental MediaConvert](https://docs.aws.amazon.com/mediaconvert/latest/ug/).

### Criar um cliente
<a name="create-a-client"></a>

Configure o AWS SDK para PHP criando um MediaConvert cliente, com a região do seu código. Neste exemplo, a região é definida como us-west-2.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\MediaConvert\MediaConvertClient;
```

 **Código de exemplo** 

```
$mediaConvertClient = new MediaConvertClient([
    'version' => '2017-08-29',
    'region' => 'us-east-2',
    'profile' => 'default'
]);
```

### Definição de um trabalho de transcodificação simples
<a name="defining-a-simple-transcoding-job"></a>

Crie o JSON que define os parâmetros da tarefa de transcodificação.

Esses parâmetros são detalhados. Você pode usar o [console do AWS Elemental MediaConvert](https://console.aws.amazon.com/mediaconvert/home) para gerar os parâmetros de trabalho JSON escolhendo as configurações de trabalho no console e depois selecionando **Mostrar JSON de trabalho** na parte inferior da seção **Trabalho**. Este exemplo mostra o JSON para uma tarefa simples.

 **Código de exemplo** 

```
$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"
    ]
];
```

### Criar um trabalho
<a name="create-a-job"></a>

Depois de criar o JSON de parâmetros de tarefa, chame o método createJob invocando um `AWS.MediaConvert service object` e passando os parâmetros. O ID da tarefa criado é retornado nos dados da resposta.

 **Código de exemplo** 

```
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";
}
```

### Recuperar um trabalho
<a name="retrieve-a-job"></a>

Com o JobID retornado quando o createjob foi chamado, você pode obter descrições detalhadas dos trabalhos recentes no formato JSON.

 **Código de exemplo** 

```
$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";
}
```

### Cancelar um trabalho
<a name="cancel-a-job"></a>

Com o JobID retornado quando o createjob foi chamado, você pode cancelar uma tarefa enquanto ela ainda está na fila. Você não pode cancelar tarefas cuja transcodificação já tenha sido iniciada.

 **Código de exemplo** 

```
$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";
}
```

### Listagem de trabalhos de transcodificação recentes
<a name="listing-recent-transcoding-jobs"></a>

Crie o JSON de parâmetros, incluindo valores para especificar se deseja classificar a lista em ordem CRESCENTE ou DECRESCENTE, o ARN da fila de trabalho a ser verificada e o status de tarefas a ser incluído. Isso retornará até 20 trabalhos. Para recuperar os próximos 20 trabalhos mais recentes, use a string nextToken retornada com o resultado.

 **Código de exemplo** 

```
$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";
}
```

# Exemplos do Amazon S3 usando a AWS SDK para PHP versão 3
<a name="s3-examples"></a>

O Amazon Simple Storage Service (Amazon S3) é um serviço da Web que oferece um armazenamento na nuvem altamente escalável. O Amazon S3 fornece armazenamento de objetos fácil de usar com uma interface de web service para armazenar e recuperar qualquer quantidade de dados de qualquer lugar da web.

Todo o código de exemplo para o AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

**Topics**
+ [Credenciais](#examplecredentials)
+ [Criação e uso de buckets do Amazon S3](s3-examples-creating-buckets.md)
+ [Gerenciar permissões de acesso ao bucket do Amazon S3](s3-examples-access-permissions.md)
+ [Configurar buckets do Amazon S3](s3-examples-configuring-a-bucket.md)
+ [Carregamentos fracionados do Amazon S3](s3-multipart-upload.md)
+ [URL pré-assinado do Amazon S3](s3-presigned-url.md)
+ [Criar POSTs pré-assinados do S3](s3-presigned-post.md)
+ [Usar um bucket do Amazon S3 como um host estático da Web](s3-examples-static-web-host.md)
+ [Trabalhar com políticas de bucket do Amazon S3](s3-examples-bucket-policies.md)
+ [Usar ARNs de ponto de acesso do S3](s3-examples-access-point-arn.md)
+ [Usar pontos de acesso multirregionais](s3-multi-region-access-points.md)

# Criação e uso de buckets do Amazon S3 com o AWS SDK para PHP versão 3
<a name="s3-examples-creating-buckets"></a>

Os exemplos a seguir mostram como:
+ Retornar uma lista de buckets pertencentes ao remetente autenticado da solicitação usando [ListBuckets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#listbuckets).
+ Criar um novo bucket usando [CreateBucket](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createbucket).
+ Adicionar um objeto a um bucket usando [PutObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

 **Importações** 

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

use Aws\S3\S3Client;
```

## Listar buckets
<a name="list-buckets"></a>

Crie um arquivo PHP com o seguinte código. Primeiro crie um serviço cliente do AWS.S3 que especifique a região e a versão da AWS. Depois, chame o método `listBuckets`, que retorna todos os buckets do Amazon S3 pertencentes ao remetente da solicitação como uma matriz de estruturas de bucket.

 **Código de exemplo** 

```
$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";
}
```

## Criar um bucket
<a name="create-a-bucket"></a>

Crie um arquivo PHP com o seguinte código. Primeiro crie um serviço cliente do AWS.S3 que especifique a região e a versão da AWS. Em seguida, chame o método `createBucket` com uma matriz como o parâmetro. O único campo obrigatório é a chave "Bucket", com um valor de string para o nome do bucket a ser criado. No entanto, você pode especificar a região da AWS com o campo “CreateBucketConfiguration”. Se for bem-sucedido, esse método retornará o “Local” do bucket.

 **Código de exemplo** 

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

## Colocar um objeto em um bucket
<a name="put-an-object-in-a-bucket"></a>

Para adicionar arquivos ao novo bucket, crie um arquivo PHP com o código a seguir.

Na linha de comando, execute esse arquivo e passe o nome do bucket no qual você deseja fazer upload do arquivo como uma sequência, seguido pelo caminho completo para o arquivo cujo upload você deseja fazer.

 **Código de exemplo** 

```
$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";
}
```

# Gerenciar permissões de acesso ao bucket do Amazon S3 com o AWS SDK para PHP versão 3
<a name="s3-examples-access-permissions"></a>

As listas de controle de acesso (ACLs) são uma das opções da política de acesso com base em recurso que pode ser usada para gerenciar o acesso aos buckets e objetos. Use as ACLs para conceder permissões básicas de leitura/gravação a outras contas da AWS. Para saber mais, consulte [Gerenciar acesso com ACLs](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html).

O exemplo a seguir mostra como:
+ Obter a política de controle de acesso de um bucket usando [GetBucketAcl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketacl).
+ Definir as permissões em um bucket que usa ACLs usando [PutBucketAcl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketacl).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Obter e definir uma política de lista de controle de acesso
<a name="get-and-set-an-access-control-list-policy"></a>

 **Importações** 

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

use Aws\S3\S3Client;  
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
// 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";
}
```

# Configuração de buckets do Amazon S3 com o AWS SDK para PHP versão 3
<a name="s3-examples-configuring-a-bucket"></a>

O compartilhamento de recursos de origem cruzada (CORS) define uma maneira de os aplicativos web clientes carregados em um domínio interagirem com recursos em outro domínio. Com o suporte do CORS no Amazon S3, você pode criar aplicações web no lado do cliente com o Amazon S3 e permitir seletivamente o acesso de origem cruzada aos seus recursos do Amazon S3.

Para obter mais informações sobre como usar a configuração do CORS com um bucket do Amazon S3, consulte [Compartilhamento de recursos entre origens (CORS)](https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html).

Os exemplos a seguir mostram como:
+ Obter a configuração do CORS para um bucket usando [GetBucketCors](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketcors).
+ Definir a configuração do CORS para um bucket usando [PutBucketCors](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketcors).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Obter a configuração do CORS
<a name="get-the-cors-configuration"></a>

Crie um arquivo PHP com o seguinte código. Primeiro crie um serviço de cliente AWS.S3 e, em seguida, chame o método `getBucketCors` e especifique o bucket cuja configuração de CORS você deseja.

O único parâmetro obrigatório é o nome do bucket selecionado. Se o bucket tiver uma configuração do CORS, essa configuração será retornada pelo Amazon S3 como um [objeto CORSRules](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#shape-corsrule).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

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

## Definir a configuração do CORS
<a name="set-the-cors-configuration"></a>

Crie um arquivo PHP com o seguinte código. Primeiro crie um serviço de cliente do AWS.S3. Depois, chame o método `putBucketCors` e especifique o bucket que tenha a configuração do CORS a ser definida e o CORSConfiguration como um [objeto JSON CORSRules](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#shape-corsrule).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

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

# Usando uploads de várias partes do Amazon S3 com a versão 3 AWS SDK para PHP
<a name="s3-multipart-upload"></a>

Com uma única operação `PutObject`, você pode fazer upload de objetos de até 5 GB. No entanto, usando os métodos de multipart upload (por exemplo `CreateMultipartUpload`, `UploadPart`, `CompleteMultipartUpload`, `AbortMultipartUpload`), você pode fazer upload de objetos de 5 MB a 5 TB.

O exemplo a seguir mostra como:
+ Faça upload de um objeto para o Amazon S3, usando. [ObjectUploader](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.ObjectUploader.html)
+ Crie um upload de várias partes para um objeto do Amazon S3 usando o. [MultipartUploader](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.MultipartUploader.html)
+ Copie objetos de um local do Amazon S3 para outro usando. [ObjectCopier](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.ObjectCopier.html)

Todo o código de exemplo para o AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Uploader de objeto
<a name="object-uploader"></a>

Se você não tiver certeza se `PutObject` ou `MultipartUploader` é melhor para a tarefa, use `ObjectUploader`. O `ObjectUploader` fará upload de um arquivo grande no Amazon S3 usando `PutObject` ou `MultipartUploader`, dependendo do tamanho da carga útil.

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\ObjectUploader;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

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

### Configuração
<a name="object-uploader-configuration"></a>

O construtor do objeto `ObjectUploader` aceita os seguintes argumentos:

**`$client`**  
O objeto `Aws\ClientInterface` a ser usado para executar as transferências. Deve ser uma instância de `Aws\S3\S3Client`.

**`$bucket`**  
(`string`, *obrigatório*) Nome do bucket para o qual o objeto está sendo enviado.

**`$key`**  
(`string`, *obrigatório*) Chave a ser usada para o objeto que está sendo enviado.

**`$body`**  
(`mixed`, *obrigatório*) Dados do objeto a serem carregados. Pode ser um `StreamInterface`, um recurso de fluxo de PHP ou uma string de dados a ser carregada.

**`$acl`**  
(`string`) Lista de controle de acesso (ACL) a ser definida no objeto que está sendo obtido por upload. Por padrão, os objetos são privados.

**`$options`**  
Uma matriz associativa de opções de configuração para o multipart upload. As seguintes opções de configuração são válidas:    
**`add_content_md5`**  
(`bool`) Defina como verdadeiro para calcular automaticamente a MD5 soma de verificação do upload.  
**`mup_threshold`**  
(`int`, *padrão*: `int(16777216)`) O número de bytes para o tamanho do arquivo. Se o tamanho do arquivo exceder esse limite, será usado um carregamento fracionado.  
**`before_complete`**  
(`callable`) Retorno de chamada a ser invocado antes da operação `CompleteMultipartUpload`. O retorno de chamada deve ter uma assinatura de função similar a: `function (Aws\Command $command) {...}`. Consulte a [referência CompleteMultipartUpload da API](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#completemultipartupload) para ver os parâmetros que você pode adicionar ao `CommandInterface` objeto.  
**`before_initiate`**  
(`callable`) Retorno de chamada a ser invocado antes da operação `CreateMultipartUpload`. O retorno de chamada deve ter uma assinatura de função similar a: `function (Aws\Command $command) {...}`. O SDK invocará esse retorno de chamada se o tamanho do arquivo exceder o valor de `mup_threshold`. Consulte a [referência CreateMultipartUpload da API](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload) para ver os parâmetros que você pode adicionar ao `CommandInterface` objeto.  
**`before_upload`**  
(`callable`) Retorno de chamada a ser invocado antes de qualquer operação `PutObject` ou `UploadPart`. O retorno de chamada deve ter uma assinatura de função similar a: `function (Aws\Command $command) {...}`. O SDK invocará esse retorno de chamada se o tamanho do arquivo for inferior ou igual ao valor de `mup_threshold`. Consulte a [referência PutObject da API](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject) para ver os parâmetros que você pode aplicar à `PutObject` solicitação. Para os parâmetros que se aplicam a uma `UploadPart` solicitação, consulte a [referência UploadPart da API](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#uploadpart). O SDK ignora qualquer parâmetro que não seja aplicável à operação representada pelo objeto `CommandInterface`.  
**`concurrency`**  
(`int`, *padrão*: `int(3)`) O número máximo de operações `UploadPart` simultâneas permitidas durante o multipart upload.  
**`part_size`**  
(`int`, *padrão*: `int(5242880)`) Tamanho da parte, em bytes, a ser usado ao fazer um multipart upload. Esse valor deve ser de 5 MB a 5 GB, inclusive.  
**`state`**  
(`Aws\Multipart\UploadState`) Um objeto que representa o estado do multipart upload e que é usado para retomar um upload anterior. Quando essa opção for fornecida, os argumentos `$bucket` e `$key` e a opção `part_size` serão ignoradas.  
**`params`**  
Uma matriz associativa que fornece opções de configuração para cada subcomando. Por exemplo:  

```
new ObjectUploader($bucket, $key, $body, $acl, ['params' => ['CacheControl' => <some_value>])
```

## MultipartUploader
<a name="multipartuploader"></a>

Os multipart uploads são projetados para melhorar a experiência de upload de objetos maiores. Eles permitem fazer upload de objetos em partes independentemente, em qualquer ordem e em paralelo.

Os clientes do Amazon S3 são incentivados a usar os carregamentos fracionados para objetos maiores que 100 MB.

## MultipartUploader objeto
<a name="multipartuploader-object"></a>

O SDK tem um objeto `MultipartUploader` especial que simplifica o processo de multipart upload.

 **Importações** 

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

```
$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";
}
```

O carregador cria um gerador de dados da parte, com base na origem fornecida e na configuração e tenta fazer upload de todas as partes. Se houver falha em alguma parte do upload, o uploader continuará a fazer upload das partes até que todos os dados de origem tenham sido lidos. Posteriormente, o uploader tentará novamente fazer upload das partes com falha ou lançará uma exceção que contém informações sobre as partes com falha de upload.

## Personalização de um carregamento fracionado
<a name="customizing-a-multipart-upload"></a>

Você pode definir opções personalizadas nas operações `CreateMultipartUpload`, `UploadPart` e `CompleteMultipartUpload` executadas pelo multipart uploader por meio de retornos de chamada passados para o construtor.

 **Importações** 

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

use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

```
// 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';
    },
]);
```

### Coleta de resíduos manual entre carregamentos de partes
<a name="manual-garbage-collection-between-part-uploads"></a>

Se você atingir o limite de memória com grandes uploads, isso pode ser devido a referências cíclicas geradas pelo SDK ainda não terem sido coletadas pelo [coletor de lixo do PHP](https://www.php.net/manual/en/features.gc.php) quando o limite de memória foi atingido. Invocar manualmente o algoritmo de coleta entre operações pode permitir que os ciclos sejam coletados antes que esse limite seja atingido. O exemplo a seguir que invoca o algoritmo de coleta usando um retorno de chamada antes de fazer upload de cada parte. Observe que a invocação do coletor de lixo não vêm com um custo de desempenho e o uso ideal dependerá do seu caso de uso e do ambiente.

```
$uploader = new MultipartUploader($client, $source, [
   'bucket' => 'your-bucket',
   'key' => 'your-key',
   'before_upload' => function(\Aws\Command $command) {
      gc_collect_cycles();
   }
]);
```

## Recuperação de erros
<a name="recovering-from-errors"></a>

Quando ocorre um erro durante o processo de multipart upload, é lançada uma `MultipartUploadException`. Essa exceção fornece acesso ao objeto `UploadState`, que contém informações sobre o andamento do multipart upload. O `UploadState` pode ser usado para retomar um upload que não foi concluído.

 **Importações** 

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

```
// 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);
}
```

A retomada de um upload de um `UploadState` tenta fazer upload das partes que ainda não foram obtidas por upload. O objeto de estado rastreia a partes ausentes, mesmo que sejam consecutivas. O uploader lê ou procura no arquivo de origem fornecido os intervalos de bytes que pertencem às partes que ainda precisam ser obtidas por upload.

 Os objetos `UploadState` são serializáveis, portanto, você também pode retomar um upload em um outro processo. Você também pode obter o objeto `UploadState`, mesmo quando não estiver tratando de uma exceção, chamando `$uploader->getState()`.

**Importante**  
Streams passados como uma origem para um `MultipartUploader` não são automaticamente retrocedidos antes do upload. Se estiver usando um stream em vez de um caminho de arquivo em um loop semelhante ao exemplo anterior, será necessário redefinir a variável `$source` dentro do bloco `catch`.

 **Importações** 

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

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

### Abortar um multipart upload
<a name="aborting-a-multipart-upload"></a>

Um multipart upload pode ser anulado recuperando o `UploadId` contido no objeto `UploadState` e passando-o para `abortMultipartUpload`.

```
try {
    $result = $uploader->upload();
} catch (MultipartUploadException $e) {
    // State contains the "Bucket", "Key", and "UploadId"
    $params = $e->getState()->getId();
    $result = $s3Client->abortMultipartUpload($params);
}
```

## Carregamentos fracionados assíncronos
<a name="asynchronous-multipart-uploads"></a>

Chamar `upload()` no `MultipartUploader` é uma solicitação de bloqueio. Se estiver trabalhando em um contexto assíncrono, você poderá obter uma [promessa](guide_promises.md) para o multipart upload.

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

use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

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

### Configuração
<a name="asynchronous-multipart-uploads-configuration"></a>

O construtor do objeto `MultipartUploader` aceita os seguintes argumentos:

** `$client` **  
O objeto `Aws\ClientInterface` a ser usado para executar as transferências. Deve ser uma instância de `Aws\S3\S3Client`.

** `$source` **  
A origem dos dados que estão sendo carregados. Isso pode ser um caminho ou um URL (por exemplo, `/path/to/file.jpg`), um identificador de recurso (por exemplo, `fopen('/path/to/file.jpg', 'r)`) ou uma instância de um [stream PSR-7](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Psr.Http.Message.StreamInterface.html).

** `$config` **  
Uma matriz associativa de opções de configuração para o multipart upload.  
As seguintes opções de configuração são válidas:    
** `acl` **  
(`string`) Lista de controle de acesso (ACL) a ser definida no objeto que está sendo obtido por upload. Por padrão, os objetos são privados.  
** `before_complete` **  
(`callable`) Retorno de chamada a ser invocado antes da operação `CompleteMultipartUpload`. O retorno de chamada deve ter uma assinatura de função como `function (Aws\Command $command) {...}`.  
** `before_initiate` **  
(`callable`) Retorno de chamada a ser invocado antes da operação `CreateMultipartUpload`. O retorno de chamada deve ter uma assinatura de função como `function (Aws\Command $command) {...}`.  
** `before_upload` **  
(`callable`) Retorno de chamada a ser invocado antes de qualquer operação `UploadPart`. O retorno de chamada deve ter uma assinatura de função como `function (Aws\Command $command) {...}`.  
** `bucket` **  
(`string`, *obrigatório*) Nome do bucket para o qual o objeto está sendo enviado.  
** `concurrency` **  
(`int`, *padrão*: `int(5)`) O número máximo de operações `UploadPart` simultâneas permitidas durante o multipart upload.  
** `key` **  
(`string`, *obrigatório*) Chave a ser usada para o objeto que está sendo enviado.  
** `part_size` **  
(`int`, *padrão*: `int(5242880)`) Tamanho da parte, em bytes, a ser usado ao fazer um multipart upload. Esse tamanho deve ser de 5 MB a 5 GB, inclusive.  
** `state` **  
(`Aws\Multipart\UploadState`) Um objeto que representa o estado do multipart upload e que é usado para retomar um upload anterior. Quando essa opção for fornecida, as opções `bucket`, `key` e `part_size` serão ignoradas.  
**`add_content_md5`**  
(`boolean`) Defina como verdadeiro para calcular automaticamente a MD5 soma de verificação do upload.  
**`params`**  
Uma matriz associativa que fornece opções de configuração para cada subcomando. Por exemplo:  

```
new MultipartUploader($client, $source, ['params' => ['CacheControl' => <some_value>]])
```

## Cópias de várias partes
<a name="multipart-copies"></a>

Isso AWS SDK para PHP também inclui um `MultipartCopy` objeto que é usado de forma semelhante ao`MultipartUploader`, mas foi projetado para copiar objetos entre 5 GB e 5 TB de tamanho no Amazon S3.

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartCopy;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

```
// 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";
}
```

# URL pré-assinada do Amazon S3 com a versão 3 AWS SDK para PHP
<a name="s3-presigned-url"></a>

Você pode autenticar determinados tipos de solicitações passando as informações necessárias como parâmetros de query string em vez de usar o cabeçalho de autorização HTTP. Isso é útil para habilitar o acesso de navegadores de terceiros a seus dados privados do Amazon S3 sem um proxy na solicitação. A ideia é construir uma solicitação “pré-assinada” e codificá-la como um URL que outro usuário possa usar. Além disso, você pode limitar uma solicitação pré-assinada, especificando um tempo de expiração.

## Criar um URL pré-assinado para uma solicitação HTTP GET
<a name="s3-presigned-url-get"></a>

O exemplo de código a seguir mostra como criar um URL pré-assinado para uma solicitação HTTP GET usando o SDK para PHP.

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

A [referência da API para o método `createPresignedRequest`](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html#method_createPresignedRequest) fornece mais detalhes.

Outra pessoa pode usar o valor de `$presignedUrl` para recuperar o objeto na próxima hora. Quando a solicitação HTTP GET é feita, usando um navegador, por exemplo, o serviço S3 interpreta que a chamada está vindo do usuário que criou o URL pré-assinado.

## Criar um URL pré-assinado para uma solicitação HTTP PUT
<a name="s3-presigned-url-put"></a>

O exemplo de código a seguir mostra como criar um URL pré-assinado para uma solicitação HTTP PUT usando o SDK para PHP.

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

Agora, outra pessoa pode usar o URL pré-assinado em uma solicitação HTTP PUT para fazer o upload de um arquivo:

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

# POSTs pré-assinados do Amazon S3 com o AWS SDK para PHP versão 3
<a name="s3-presigned-post"></a>

Assim como os URLs pré-assinados, os POSTs pré-assinados permitem fornecer acesso de gravação a um usuário sem conceder credenciais da AWS ao usuário. Os formulários de POST pré-assinados podem ser criados com a ajuda de uma instância de [AwsS3PostObjectV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.PostObjectV4.html).

Os exemplos a seguir mostram como:
+ Obter dados de um objeto do formulário de upload POST do S3 usando [PostObjectV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.PostObjectV4.html).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

**nota**  
`PostObjectV4` não funciona com credenciais provenientes do Centro de Identidade do AWS IAM.

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar PostObjectV4
<a name="create-postobjectv4"></a>

Para criar uma instância de `PostObjectV4`, você deve fornecer o seguinte:
+ instância de `Aws\S3\S3Client` 
+ bucket
+ matriz associativa de campos de entrada de formulário
+ conjunto de condições de políticas (consulte [Construção de políticas](https://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTForms.html) no Guia do usuário do Amazon Simple Storage Service)
+ sequência de tempo de expiração para a política (opcional, uma hora por padrão).

 **Importações** 

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

use Aws\S3\PostObjectV4;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

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

# Uso de um bucket do Amazon S3 como um host estático da Web com o AWS SDK para PHP versão 3
<a name="s3-examples-static-web-host"></a>

Você pode hospedar um site estático no Amazon S3. Para saber mais, consulte [Hospedagem de um site estático no Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html).

O exemplo a seguir mostra como:
+ Obter a configuração do site de um bucket usando [GetBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketwebsite).
+ Definir a configuração do site de um bucket usando [PutBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketwebsite).
+ Remover a configuração do site de um bucket usando [DeleteBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#deletebucketwebsite).

Todo o código de exemplo do AWS SDK para PHP versão 3 está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="credentials-s3-examples-static-web-host"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS. Consulte as [Credenciais do AWS SDK para PHP versão 3](guide_credentials.md).

## Obter, definir e excluir a configuração do site de um bucket
<a name="get-set-and-delete-the-website-configuration-for-a-bucket"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

```
$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";
}
```

# Trabalhar com políticas de bucket do Amazon S3 com o AWS SDK para PHP versão 3
<a name="s3-examples-bucket-policies"></a>

Você pode usar uma política de bucket para conceder permissão aos recursos do Amazon S3. Para saber mais sobre isso, consulte [Usar políticas de bucket e de usuário](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html).

O exemplo a seguir mostra como:
+ Retornar a política de um bucket especificado usando [GetBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketpolicy).
+ Substituir uma política em um bucket usando [PutBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketpolicy).
+ Excluir uma política de um bucket usando [DeleteBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#deletebucketpolicy).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Obter, excluir e substituir uma política em um bucket
<a name="get-delete-and-replace-a-policy-on-a-bucket"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **Código de exemplo** 

```
$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";
}
```

# Usar ARNs de ponto de acesso do S3 no AWS SDK para PHP versão 3
<a name="s3-examples-access-point-arn"></a>

O S3 incluiu pontos de acesso, uma nova maneira de interagir com buckets do S3. Os pontos de acesso podem ter políticas e configurações exclusivas aplicadas a eles, em vez de diretamente ao bucket. O AWS SDK para PHP permite que você use ARNs de ponto de acesso no campo do bucket para operações de API em vez de especificar explicitamente o nome do bucket. Mais detalhes sobre como os pontos de acesso do S3 e os ARNs funcionam podem ser encontrados [aqui](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html). Os exemplos a seguir mostram como:
+ Usar [GetObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject) com um ARN de ponto de acesso para obter um objeto de um bucket.
+ Usar [PutObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject) com um ARN de ponto de acesso para adicionar um objeto a um bucket.
+ Configurar o cliente do S3 para usar a região do ARN em vez da região do cliente.

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

 **Importações** 

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

use Aws\S3\S3Client;
```

## Objeto Get
<a name="get-object"></a>

Primeiro crie um serviço cliente do AWS.S3 que especifique a região e a versão da AWS. Depois, chame o método `getObject` com sua chave e um ARN de ponto de acesso do S3 no campo `Bucket`, que obterá o objeto do bucket associado a esse ponto de acesso.

 **Código de exemplo** 

```
$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'
]);
```

## Colocar um objeto em um bucket
<a name="put-an-object-in-a-bucket"></a>

Primeiro crie um serviço cliente do AWS.S3 que especifique a região e a versão da AWS. Depois, chame o método `putObject` com a chave desejada, o corpo ou o arquivo de origem e um ARN de ponto de acesso do S3 no campo `Bucket`, que colocará o objeto no bucket associado a esse ponto de acesso.

 **Código de exemplo** 

```
$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'
]);
```

## Configurar o cliente do S3 para usar a região do ARN em vez da região do cliente
<a name="configure-the-s3-client-to-use-the-arn-region-instead-of-the-client-region"></a>

Ao usar um ARN de ponto de acesso do S3 em uma operação de cliente do S3, por padrão, o cliente se certificará de que a região do ARN corresponda à região do cliente, lançando uma exceção, caso contrário. Esse comportamento pode ser alterado para aceitar a região do ARN em vez da região do cliente definindo a opção de configuração de `use_arn_region` como `true`. Por padrão, a opção é definida como `false`.

 **Código de exemplo** 

```
$s3 = new S3Client([
    'version'        => 'latest',
    'region'         => 'us-west-2',
    'use_arn_region' => true
]);
```

O cliente também verificará uma variável de ambiente e uma opção de arquivo de configuração, na seguinte ordem de prioridade:

1. A opção do cliente `use_arn_region`, como no exemplo acima.

1. A variável de ambiente `AWS_S3_USE_ARN_REGION` 

```
export AWS_S3_USE_ARN_REGION=true
```

1. A variável de configuração `s3_use_arn_region` no arquivo de configuração compartilhado da AWS (por padrão em `~/.aws/config`).

```
[default]
s3_use_arn_region = true
```

# Use os pontos de acesso multirregionais do Amazon S3 com a versão 3 AWS SDK para PHP
<a name="s3-multi-region-access-points"></a>

Os [pontos de acesso multirregionais do Amazon Simple Storage Service (S3)](https://docs.aws.amazon.com//AmazonS3/latest/userguide/MultiRegionAccessPoints.html) fornecem um endpoint global para rotear o tráfego de solicitações do Amazon S3 entre Regiões da AWS.

Você pode criar pontos de acesso multirregionais [usando o SDK for](https://docs.aws.amazon.com//aws-sdk-php/v3/api/api-s3control-2018-08-20.html#createmultiregionaccesspoint) PHP, AWS outro SDK, o [console S3 ou a CLI](https://docs.aws.amazon.com//AmazonS3/latest/userguide/multi-region-access-point-create-examples.html), AWS 

**Importante**  
Para usar pontos de acesso multirregionais com o SDK for PHP, seu ambiente PHP deve ter AWS a extensão [Common Runtime AWS (CRT](guide_crt.md)) instalada.

Quando você cria um ponto de acesso multirregional, o Amazon S3 gera um nome do recurso da Amazon (ARN) que tem o seguinte formato: 

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

Você pode usar o ARN gerado no lugar de um nome de bucket para os métodos `[getObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject)` e `[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";
```

# Gerenciar segredos usando a API do Secrets Manager e o AWS SDK para PHP versão 3
<a name="secretsmanager-examples-manage-secret"></a>

AWS Secrets ManagerO armazena e gerencia segredos compartilhados, como senhas, chaves de API e credenciais de banco de dados. Com o serviço Secrets Manager, os desenvolvedores podem substituir as credenciais de codificação rígida no código implantado por uma chamada integrada para o Secrets Manager.

O Secrets Manager oferece suporte nativo à rotação automática de credenciais para bancos de dados do Amazon Relational Database Service (Amazon RDS), aumentando a segurança da aplicação. O Secrets Manager também pode alternar perfeitamente segredos para outros bancos de dados e serviços de terceiros usando o AWS Lambda para implementação de detalhes específicos do serviço.

Os exemplos a seguir mostram como:
+ Criar um segredo usando [CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret).
+ Recuperar um segredo usando [GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue).
+ Listar todos os segredos armazenados pelo Secrets Manager usando [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets).
+ Obter detalhes sobre um segredo especificado usando [DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret).
+ Atualizar um segredo especificado usando [PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue).
+ Configurar uma rotação de segredos usando [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret).
+ Marcar um segredo para exclusão usando [DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar um segredo no Secrets Manager
<a name="create-a-secret-in-asm"></a>

Para criar um segredo no Secrets Manager, use a operação [CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret).

Neste exemplo, um nome de usuário e uma senha são armazenados como uma string JSON.

 **Importações** 

```
require 'vendor/autoload.php';
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Recuperar um segredo do Secrets Manager
<a name="retrieve-a-secret-from-asm"></a>

Para recuperar o valor de um segredo armazenado no Secrets Manager, use a operação [GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue).

Neste exemplo, `secret` é uma string que contém o valor armazenado. Se o valor para `username` é `<<USERNAME>>`, e o valor para `password` é `<<PASSWORD>>`, a saída de `secret` é:

```
{"username":"<<USERNAME>>","password":"<<PASSWORD>>"}
```

Use `json_decode($secret, true)` para acessar os valores da matriz.

 **Importações** 

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

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

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

## Listar segredos armazenados no Secrets Manager
<a name="list-secrets-stored-in-asm"></a>

Obtenha uma lista de todos os segredos que estão armazenados no Secrets Manager usando a operação [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets).

 **Importações** 

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

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Recuperar os detalhes sobre um segredo
<a name="retrieve-details-about-a-secret"></a>

Os segredos armazenados contêm metadados sobre as regras de rotação, quando foi o último acesso ou alteração, as tags criadas pelo usuário, e o nome de recurso da Amazon (ARN). Para obter os detalhes de um segredo especificado armazenado no Secrets Manager, use a operação [DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret).

 **Importações** 

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

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Atualizar o valor do segredo
<a name="update-the-secret-value"></a>

Para armazenar um novo valor do segredo criptografado no Secrets Manager, use a operação [PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue).

Isso cria uma nova versão do segredo. Se uma versão do segredo já existir, adicione o parâmetro `VersionStages` com o valor em `AWSCURRENT` para garantir que o novo valor seja usado ao recuperar o valor.

 **Importações** 

```
require 'vendor/autoload.php';
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Alternar o valor de um segredo existente no Secrets Manager
<a name="rotate-the-value-to-an-existing-secret-in-asm"></a>

Para alternar o valor de um segredo existente armazenado no Secrets Manager, use uma função de rotação do Lambda e a operação [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret).

Antes de começar, crie uma função do Lambda para alternar o segredo. O [Catálogo de exemplos de código da AWS](https://docs.aws.amazon.com/code-samples/latest/catalog/code-catalog-lambda_functions-secretsmanager.html) atualmente contém vários exemplos de código do Lambda para alternar as credenciais de banco de dados do Amazon RDS.

**nota**  
Para obter mais informações sobre a alternância de segredos, consulte [Alternar seus segredos do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html) no Guia do usuário do AWS Secrets Manager.

Depois de configurar a função do Lambda, configure uma nova rotação de segredos.

 **Importações** 

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

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

Quando uma rotação for configurada, você poderá implementar uma rotação usando a operação [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret).

 **Importações** 

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

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Excluir um segredo do Secrets Manager
<a name="delete-a-secret-from-asm"></a>

Para remover um segredo especificado do Secrets Manager, use a operação [DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret). Para evitar a exclusão de um segredo acidentalmente, um stamp DeletionDate é adicionado automaticamente ao segredo que especifica uma janela de tempo de recuperação na qual você poderá reverter a exclusão. Se não for especificado o tempo para a janela de recuperação, o tempo padrão é de 30 dias.

 **Importações** 

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

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Informações relacionadas
<a name="related-information"></a>

Os exemplos do AWS SDK para PHP usam as seguintes operações REST da Referência de API do AWS Secrets Manager:
+  [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) 

Para obter mais informações sobre o uso do AWS Secrets Manager, consulte o [Guia do usuário do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/).

# Exemplos do Amazon SES usando o AWS SDK para PHP versão 3
<a name="ses-examples"></a>

Amazon Simple Email Service (Amazon SES) é uma plataforma de e-mail que oferece uma forma fácil e econômica para você enviar e receber e-mail usando seus próprios endereços de e-mail e domínios. Para obter mais informações sobre o Amazon SES, consulte o [Guia do desenvolvedor do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/).

A AWS oferece duas versões do serviço Amazon SES e, correspondentemente, o SDK para PHP oferece duas versões do cliente: [SesClient](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Ses.SesClient.html) e [SesV2Client](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.SesV2.SesV2Client.html). A funcionalidade dos clientes se sobrepõe em muitos casos, embora a forma como os métodos são chamados ou os resultados possam ser diferentes. As duas APIs também oferecem recursos exclusivos, para que você possa usar os dois clientes para acessar todas as funcionalidades.

Todos os exemplos desta seção usam a original, `SesClient`. 

Todo o código de exemplo do AWS SDK para PHP versão 3 está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

**Topics**
+ [Verificar endereços de e-mail](ses-verify.md)
+ [Lidar com modelos de e-mail](ses-template.md)
+ [Gerenciamento de filtros de e-mail](ses-filters.md)
+ [Utilizar regras de e-mail](ses-rules.md)
+ [Monitorar sua atividade de envio](ses-send-email.md)
+ [Autorizar remetentes](ses-sender-policy.md)

# Verificar identidades de e-mail usando a API do Amazon SES e o AWS SDK para PHP versão 3
<a name="ses-verify"></a>

Quando você começar a usar sua conta do Amazon Simple Email Service (Amazon SES), todos os remetentes e destinatários devem ser verificados na mesma região da AWS para a qual seus e-mails são enviados. Para obter mais informações sobre o envio de e-mails, consulte [Envio de e-mail com o Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-email.html).

Os exemplos a seguir mostram como:
+ Verifique um endereço de e-mail com o [VerifyEmailIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#verifyemailidentity).
+ Verifique um domínio de e-mail com o [VerifyDomainIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#verifydomainidentity).
+ Liste todos os endereços de e-mail com o [ListIdentities](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listidentities).
+ Liste todos os domínios de e-mail com o [ListIdentities](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listidentities).
+ Exclua um endereço de e-mail com o [DeleteIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deleteidentity).
+ Exclua um domínio de e-mail com o [DeleteIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deleteidentity).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso do Amazon SES, consulte o [Guia do desenvolvedor do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/).

## Verificar endereços de e-mail
<a name="verifying-email-addresses"></a>

O Amazon SES somente pode enviar e-mails de endereços ou domínios de e-mail verificados. Ao verificar um endereço de e-mail, demonstre que é o proprietário desse endereço e deseja conceder permissão ao Amazon SES para enviar e-mails desse endereço.

Ao executar o exemplo de código a seguir, o Amazon SES envia um e-mail para o endereço especificado. Quando você (ou o destinatário do e-mail) clicar no link do e-mail, o endereço será verificado.

Para adicionar um endereço de e-mail à sua conta do Amazon SES, utilize a operação [VerifyEmailIdentity](https://docs.aws.amazon.com/ses/latest/APIReference/API_VerifyEmailIdentity.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Verificar um domínio de e-mail
<a name="verify-an-email-domain"></a>

O Amazon SES somente pode enviar e-mails de endereços ou domínios de e-mail verificados. Ao verificar um domínio, demonstre que é o proprietário desse domínio. Ao verificar um domínio, você permite que o Amazon SES envie e-mails de qualquer endereço nesse domínio.

Ao executar o exemplo de código a seguir, o Amazon SES fornece um token de verificação. É necessário adicionar o token para configuração de DNS do seu domínio. Para obter mais informações, consulte [Verificar um domínio com o Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-domain-procedure.html) no Guia do desenvolvedor do Amazon Simple Email Service.

Para adicionar um domínio de envio à sua conta do Amazon SES, utilize a operação [VerifyDomainIdentity](https://docs.aws.amazon.com/ses/latest/APIReference/API_VerifyDomainIdentity.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Listar endereços de e-mail
<a name="list-email-addresses"></a>

Para recuperar uma lista de endereços de e-mail enviada à região atual da AWS, independentemente do status de verificação, utilize a operação [ListIdentities](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListIdentities.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Listar domínios de e-mail
<a name="list-email-domains"></a>

Para recuperar uma lista de domínios de e-mail enviada à região atual da AWS, independentemente do status de verificação, utilize a operação [ListIdentities](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListIdentities.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Excluir um endereço de e-mail
<a name="delete-an-email-address"></a>

Para excluir um endereço de e-mail verificado na lista de identidades, utilize a operação [DeleteIdentity](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteIdentity.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Excluir um domínio de e-mail
<a name="delete-an-email-domain"></a>

Para excluir um domínio de e-mail verificado na lista de identidades verificadas, utilize a operação [DeleteIdentity](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteIdentity.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Criação de modelos personalizados de e-mail usando a API do Amazon SES e o AWS SDK para PHP versão 3
<a name="ses-template"></a>

O Amazon Simple Email Service (Amazon SES) permite o envio de e-mails personalizados para cada destinatário por meio de modelos. Os modelos incluem uma linha de assunto e as partes em texto e HTML do corpo de e-mail. É possível que as seções de assunto e corpo também contenham valores exclusivos e personalizados para cada destinatário.

Para obter mais informações, consulte [Enviar e-mail personalizado usando o Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html) no Guia do desenvolvedor do Amazon Simple Email Service.

Os exemplos a seguir mostram como:
+ Crie um modelo de e-mail com o [CreateTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createtemplate).
+ Liste todos os modelos de e-mail com o [ListTemplates](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listtemplates).
+ Recupere um modelo de e-mail com o [GetTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#gettemplate).
+ Atualize um modelo de e-mail com o [UpdateTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#updateTemplate).
+ Exclua um modelo de e-mail com o [DeleteTemplate](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletetemplate).
+ Envie um e-mail em modelo com o [SendTemplatedEmail](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#sendtemplatedemail).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso do Amazon SES, consulte o [Guia do desenvolvedor do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/).

## Criar um modelo de e-mail
<a name="create-an-email-template"></a>

Para criar um modelo e enviar mensagens de e-mail personalizadas, utilize a operação [CreateTemplate](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateTemplate.html). O modelo pode ser utilizado por qualquer conta autorizada a enviar mensagens na região da AWS para a qual o modelo será adicionado.

**nota**  
O Amazon SES não valida HTML, portanto, certifique-se de que o *HtmlPart* é válido antes de enviar um e-mail.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Obter um modelo de e-mail
<a name="get-an-email-template"></a>

Para visualizar o conteúdo de um modelo de e-mail existente, incluindo a linha de assunto, o corpo HTML e o texto sem formatação, utilize a operação [GetTemplate](https://docs.aws.amazon.com/ses/latest/APIReference/API_GetTemplate.html). Somente o TemplateName é obrigatório.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Listar todos os modelos de e-mail
<a name="list-all-email-templates"></a>

Para recuperar uma lista de todos os modelos de e-mail associados à Conta da AWS na região atual da AWS, utilize a operação [ListTemplates](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListTemplates.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Atualizar um modelo de e-mail
<a name="update-an-email-template"></a>

Para alterar o conteúdo de um modelo de e-mail específico, incluindo a linha de assunto, o corpo HTML e o texto sem formatação, utilize a operação [UpdateTemplate](https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdadteTemplate.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Excluir um modelo de e-mail
<a name="delete-an-email-template"></a>

Para excluir um modelo de e-mail específico, utilize a operação [DeleteTemplate](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteTemplate.html). Somente o TemplateName é necessário.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Enviar um e-mail com modelo
<a name="send-an-email-with-a-template"></a>

Para usar um modelo e enviar e-mails aos destinatários, utilize a operação [SendTemplatedEmail](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendTemplatedEmail.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Gerenciamento de filtros de e-mail usando a API do Amazon SES e o AWS SDK para PHP versão 3
<a name="ses-filters"></a>

Além de enviar e-mails, você também pode receber e-mails com o Amazon Simple Email Service (Amazon SES). Um filtro de endereço IP permite que você especifique se deseja aceitar ou recusar e-mails provenientes de um endereço IP ou de um intervalo de endereços IP. Para obter mais informações, consulte [Gerenciamento de filtros de endereço IP para o recebimento de e-mails do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-managing-ip-filters.html).

Os exemplos a seguir mostram como:
+ Crie um filtro de e-mail com o [CreateReceiptFilter](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createreceiptfilter).
+ Liste todos os filtros de e-mail com o [ListReceiptFilters](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listreceiptfilters).
+ Exclua um filtro de e-mail com o [DeleteReceiptFilter](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletereceiptfilter).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso do Amazon SES, consulte o [Guia do desenvolvedor do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/).

## Criar um filtro de e-mail
<a name="create-an-email-filter"></a>

Para autorizar ou bloquear e-mails de um endereço IP específico, utilize a operação [CreateReceiptFilter](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptFilter.html). Forneça o endereço IP ou intervalo de endereços e um nome exclusivo para identificar esse filtro.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Listar todos os filtros de e-mail
<a name="list-all-email-filters"></a>

Para listar os filtros de endereço IP associados à sua Conta da AWS na região da AWS atual, utilize a operação [ListReceiptFilters](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListReceiptFilters.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Excluir um filtro de e-mail
<a name="delete-an-email-filter"></a>

Para excluir um filtro existente para um endereço IP específico, utilize a operação [DeleteReceiptFilter](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteReceiptFilter.html). Informe o nome do filtro exclusivo para identificar o filtro de recebimento a ser excluído.

Caso seja necessário alterar o intervalo de endereços filtrados, é possível excluir um filtro de recebimento e criar um novo.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Criação e gerenciamento de regras de e-mail usando a API do Amazon SES e o AWS SDK para PHP versão 3
<a name="ses-rules"></a>

Além de enviar e-mails, você também pode receber e-mails com o Amazon Simple Email Service (Amazon SES). Com as regras de recebimento, é possível especificar o que o Amazon SES faz com o e-mail que recebe para os endereços de e-mail ou domínios que você possui. Uma regra pode habilitar o envio de e-mail para outros serviços da AWS, incluindo Amazon S3, Amazon SNS ou AWS Lambda, entre outros.

Para obter mais informações, consulte [Gerenciamento de conjuntos de regras de recepção para o recebimento de e-mails do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-managing-receipt-rule-sets.html) e [Gerenciamento de regras de recepção para o recebimento de e-mails do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-managing-receipt-rules.html).

Os exemplos a seguir mostram como:
+ Crie um conjunto de regras de recebimento com o [CreateReceiptRuleSet](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createreceiptruleset).
+ Crie uma regra de recebimento com o [CreateReceiptRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createreceiptrule).
+ Descreva um conjunto de regras de recebimento com o [DescribeReceiptRuleSet](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#describereceiptruleset).
+ Descreva uma regra de recebimento com o [DescribeReceiptRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#describereceiptrule).
+ Liste todos os conjuntos de regras de recebimento com o [ListReceiptRuleSets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listreceiptrulesets).
+ Atualize uma regra de recebimento com o [UpdateReceiptRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#updatereceiptrule).
+ Exclua uma regra de recebimento com o [DeleteReceiptRule](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletereceiptrule).
+ Exclua um conjunto de regras de recebimento com o [DeleteReceiptRuleSet](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deletereceiptruleset).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso do Amazon SES, consulte o [Guia do desenvolvedor do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/).

## Criar um conjunto de regras de recebimento
<a name="create-a-receipt-rule-set"></a>

Um conjunto de regras de recebimento é composto por um grupo de regras de recepção. É necessário que ao menos um conjunto de regras de recebimento esteja associado à sua conta para que você possa criar uma regra de recebimento. Para criar um conjunto de regras de recebimento, forneça um RuleSetName exclusivo e utilize a operação [CreateReceiptRuleSet](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptRuleSet.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Criar uma regra de recebimento
<a name="create-a-receipt-rule"></a>

Adicione uma regra de recebimento a um conjunto de regras existente para controlar os e-mails recebidos. Esse exemplo mostra como criar uma regra de recebimento que envia mensagens recebidas a um bucket do Amazon S3, mas também é possível enviar mensagens para o Amazon SNS e o AWS Lambda. Para criar um conjunto de regras de recebimento, informe uma regra e o RuleSetName exclusivo à operação [CreateReceiptRule](https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptRule.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Descrever um conjunto de regras de recebimento
<a name="describe-a-receipt-rule-set"></a>

Retorne os detalhes do conjunto de regras de recebimento especificado a cada segundo. Para utilizar a operação [DescribeReceiptRuleSet](https://docs.aws.amazon.com/ses/latest/APIReference/API_DescribeReceiptRuleSet.html), informe o RuleSetName.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Descrever uma regra de recebimento
<a name="describe-a-receipt-rule"></a>

Retorne os detalhes de uma regra de recebimento especificada. Para utilizar a operação [DescribeReceiptRule](https://docs.aws.amazon.com/ses/latest/APIReference/API_DescribeReceiptRule.html), informe a RuleName e o RuleSetName.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Listar todos os conjuntos de regras de recebimento
<a name="list-all-receipt-rule-sets"></a>

Para listar os conjuntos de regras de recebimento existentes em sua Conta da AWS na região da AWS atual, utilize a operação [ListReceiptRuleSets](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListReceiptRuleSets.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Atualizar uma regra de recebimento
<a name="update-a-receipt-rule"></a>

Esse exemplo mostra como atualizar uma regra de recebimento que envia mensagens recebidas a uma função do AWS Lambda, mas também é possível enviar mensagens para o Amazon SNS e o Amazon S3. Para utilizar a operação [UpdateReceiptRule](https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdateReceiptRule.html), informe a nova regra de recebimento e o RuleSetName.

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Excluir um conjunto de regras de recebimento
<a name="delete-a-receipt-rule-set"></a>

Remover um conjunto de regras de recebimento específico que não está desabilitado no momento. Essa ação também exclui todas as regras de recebimento incluídas no conjunto. Para excluir um conjunto de regras de recebimento, informe o RuleSetName à operação [DeleteReceiptRuleSet](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteReceiptRuleSet.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

## Excluir uma regra de recebimento
<a name="delete-a-receipt-rule"></a>

Para excluir uma regra de recebimento especificada, informe a RuleName e o RuleSetName à operação [DeleteReceiptRule](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteReceiptRule.html).

 **Importações** 

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

use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$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";
}
```

# Monitorar a atividade de envio usando a API do Amazon SES e o AWS SDK para PHP versão 3
<a name="ses-send-email"></a>

O Amazon Simple Email Service (Amazon SES) oferece métodos para monitorar a atividade de envio. Recomendamos que você implemente esses métodos para que possa manter o controle de medidas importantes, como as taxas de devolução, reclamação e rejeição da sua conta. Taxas de devolução e reclamação muito altas podem prejudicar sua capacidade de enviar e-mails usando o Amazon SES.

Os exemplos a seguir mostram como:
+ Verifique sua cota de envio com o [GetSendQuota](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#getsendquota).
+ Monitore sua atividade de envio com o [GetSendStatistics](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#getsendstatistics).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso do Amazon SES, consulte o [Guia do desenvolvedor do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/).

## Verificar sua cota de envio
<a name="check-your-sending-quota"></a>

O limite de envio é de somente uma determinada quantidade de mensagens em um período de 24 horas. Para verificar quantas mensagens ainda podem ser enviadas, utilize a operação [GetSendQuota](https://docs.aws.amazon.com/ses/latest/APIReference/API_GetSendQuota.html). Para obter mais informações, consulte [Gerenciamento de limites de envio do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/manage-sending-limits.html).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **Código de exemplo** 

```
$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";
}
```

## Monitorar sua atividade de envio
<a name="monitor-your-sending-activity"></a>

Para recuperar métricas referentes às mensagens enviadas nas últimas duas semanas, utilize a operação [GetSendStatistics](https://docs.aws.amazon.com/ses/latest/APIReference/API_GetSendStatistics.html). Esse exemplo retorna o número de tentativas de entrega, devoluções, reclamações e mensagens recusadas em incrementos de 15 minutos.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **Código de exemplo** 

```
$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";
}
```

# Autorização de remetentes usando a API do Amazon SES e o AWS SDK para PHP versão 3
<a name="ses-sender-policy"></a>

Para habilitar outra Conta da AWS, usuário do AWS Identity and Access Management ou serviço da AWS a enviar e-mails por meio do Amazon Simple Email Service (Amazon SES) em seu nome, crie uma política de autorização de envio. Este é um documento JSON que você deve anexar a uma identidade que possui.

A política lista expressamente quem você permite que envie para essa identidade e em que condições. Com exceção de você e das entidades às quais concedeu permissões explicitamente na política, todos os demais remetentes não estão autorizados a enviar e-mails. Uma identidade pode ter nenhuma política, uma política ou várias políticas anexadas a ela. Você também pode ter uma política com várias instruções para alcançar o efeito de várias políticas.

Para obter mais informações, consulte [Como usar a autorização de envio com o Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html).

Os exemplos a seguir mostram como:
+ Crie um remetente autorizado com o [PutIdentityPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#createidentitypolicy).
+ Recupere políticas para um remetente autorizado com o [GetIdentityPolicies](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#getidentitypolicies).
+ Liste os remetentes autorizados com o [ListIdentityPolicies](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#listidentitypolicies).
+ Revogue permissão para um remetente autorizado com o [DeleteIdentityPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#deleteidentitypolicy).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

Para obter mais informações sobre o uso do Amazon SES, consulte o [Guia do desenvolvedor do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/).

## Criar um remetente autorizado
<a name="create-an-authorized-sender"></a>

Para autorizar outra Conta da AWS a enviar e-mails em seu nome, utilize uma política de identidade para adicionar ou atualizar a autorização referente ao envio de e-mails de seus endereços de e-mail ou domínios verificados. Para criar uma política de identidades, utilize a operação [PutIdentityPolicy](https://docs.aws.amazon.com/ses/latest/APIReference/API_PutIdentityPolicy.html).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **Código de exemplo** 

```
$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";
}
```

## Recuperar políticas para um remetente autorizado
<a name="retrieve-polices-for-an-authorized-sender"></a>

Retorne as políticas de autorização de envio que são associadas a uma identidade de e-mail ou identidade de domínio específica. Para obter a autorização de envio para um determinado endereço de e-mail ou domínio, utilize a operação [GetIdentityPolicy](https://docs.aws.amazon.com/ses/latest/APIReference/API_GetIdentityPolicy.html).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **Código de exemplo** 

```
$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";
}
```

## Listar remetentes autorizados
<a name="list-authorized-senders"></a>

Para listar as políticas de autorização de envio que são associadas a uma identidade de e-mail ou identidade de domínio específica na região atual da AWS, utilize a operação [ListIdentityPolicies](https://docs.aws.amazon.com/ses/latest/APIReference/API_ListIdentityPolicies.html).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **Código de exemplo** 

```
$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";
}
```

## Revogar permissão para um remetente autorizado
<a name="revoke-permission-for-an-authorized-sender"></a>

Exclua a autorização de envio concedida a outra Conta da AWS para o envio de e-mails com uma identidade de e-mail ou identidade de domínio ao remover a política de identidade associada por meio da operação [DeleteIdentityPolicy](https://docs.aws.amazon.com/ses/latest/APIReference/API_DeleteIdentityPolicy.html).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Ses\SesClient;
```

 **Código de exemplo** 

```
$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";
}
```

# Exemplos do Amazon SNS usando a versão 3 AWS SDK para PHP
<a name="sns-examples"></a>

O Amazon Simple Notification Service (Amazon SNS) é um serviço web que coordena e gerencia a entrega ou o envio de mensagens para endpoints ou clientes assinantes.

No Amazon SNS, há dois tipos de clientes: os publicadores (também chamados de produtores) e os assinantes (também chamados de consumidores). Os editores se comunicam de maneira assíncrona com os inscritos produzindo e enviando uma mensagem para um tópico, que é um canal de comunicação e um ponto de acesso lógico. Os assinantes (servidores web, endereços de e-mail, filas do Amazon SQS, AWS Lambda funções) consomem ou recebem a mensagem ou notificação por meio de um dos protocolos suportados (Amazon SQS, HTTP/HTTPS URLs e-mail, AWS SMS Lambda) quando estão inscritos no tópico.

Todo o código de exemplo para a AWS SDK para PHP versão 3 está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

**Topics**
+ [Gerenciamento de tópicos](sns-examples-managing-topics.md)
+ [Como gerenciar assinaturas](sns-examples-subscribing-unsubscribing-topics.md)
+ [Envio de mensagens SMS do Amazon](sns-examples-sending-sms.md)

# Gerenciar tópicos no Amazon SNS com o AWS SDK para PHP versão 3
<a name="sns-examples-managing-topics"></a>

Para enviar notificações para Amazon Simple Queue Service (Amazon SQS), URLs de HTTP/HTTPS, e-mail, AWS SMS ou AWS Lambda, primeiramente é necessário criar um tópico que gerencie a entrega de mensagens a todos os assinantes desse tópico.

Em relação ao padrão de design do observador, o tópico é semelhante ao assunto. Após a criação do tópico, adicione assinantes que serão notificados automaticamente quando uma mensagem for publicada no tópico.

Saiba mais sobre como assinar tópicos em [Gerenciamento de assinaturas no Amazon SNS com o AWS SDK para PHP versão 3](sns-examples-subscribing-unsubscribing-topics.md).

Os exemplos a seguir mostram como:
+ Crie um tópico para publicar notificações com o [CreateTopic](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#createtopic).
+ Obtenha uma lista de tópicos do solicitante com o [ListTopics](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#listtopic).
+ Exclua um tópico e todas as suas assinaturas com o [DeleteTopic](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#deletetopic).
+ Obtenha todas as propriedades de um tópico com o [GetTopicAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#gettopicattributes).
+ Permita que o proprietário de um tópico defina um atributo do tópico como um novo valor com o [SetTopicAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#settopicattributes).

Para obter mais informações sobre o uso do Amazon SNS, consulte [Atributos de tópico do Amazon SNS para status de entrega de mensagens](https://docs.aws.amazon.com/sns/latest/dg/sns-topic-attributes.html).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar um tópico
<a name="create-a-topic"></a>

Para criar um tópico, utilize a operação [CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html).

Cada nome de tópico presente na Conta da AWS deve ser exclusivo.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Listar seus tópicos
<a name="list-your-topics"></a>

Para listar até 100 tópicos existente na região da AWS atual, utilize a operação [ListTopics](https://docs.aws.amazon.com/sns/latest/api/API_ListTopics.html).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Excluir um tópico
<a name="delete-a-topic"></a>

Para remover um tópico existente e todas as suas assinaturas, utilize a operação [DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html).

Todas as mensagens que ainda não tiverem sido entregues aos assinantes também serão excluídas.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Obter atributos de tópicos
<a name="get-topic-attributes"></a>

Para recuperar as propriedades de um único tópico existente, utilize a operação [GetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetTopicAttributes.html).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Definir atributos de tópicos
<a name="set-topic-attributes"></a>

Para atualizar as propriedades de um único tópico existente, utilize a operação [SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html).

É possível definir apenas os atributos `Policy`, `DisplayName` e `DeliveryPolicy`.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

# Gerenciando assinaturas no Amazon SNS com a versão 3 AWS SDK para PHP
<a name="sns-examples-subscribing-unsubscribing-topics"></a>

Use tópicos do Amazon Simple Notification Service (Amazon SNS) para enviar notificações para o Amazon Simple Queue Service (Amazon SQS), HTTP/HTTPS, endereços de e-mail, () ou. AWS Server Migration Service AWS SMS AWS Lambda

As assinaturas são anexadas a um tópico que gerencia o envio de mensagens aos assinantes. Saiba mais sobre a criação de tópicos em [Gerenciando tópicos no Amazon SNS com a AWS SDK para PHP versão 3](sns-examples-managing-topics.md).

Os exemplos a seguir mostram como:
+ Inscreva-se em um tópico existente com a função [Assinar](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#subscribe).
+ Verifique uma assinatura usando [ConfirmSubscription](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#confirmsubscription).
+ Liste as assinaturas existentes usando. [ListSubscriptionsByTopic](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#listsubscriptionsbytopic)
+ Exclua uma assinatura com a opção [Cancelar assinatura](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#unsubscribe).
+ Enviar uma mensagem para todos os assinantes de um tópico com a função [Publicar](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#publish).

Para obter mais informações sobre o uso do Amazon SNS, consulte [Usando o Amazon System-to-System SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-system-to-system-messaging.html) para mensagens.

Todo o código de exemplo do AWS SDK para PHP está disponível [aqui em GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito em[Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em[Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Inscrever um endereço de e-mail em um tópico
<a name="subscribe-an-email-address-to-a-topic"></a>

Para iniciar a inscrição em um endereço de e-mail, utilize a operação [Assinar](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html).

O método de assinatura pode ser utilizado para inscrever vários endpoints em um tópico do Amazon SNS, dependendo dos valores adotados para os parâmetros passados. Isso é mostrado em outros exemplos deste tópico.

Neste exemplo, o endpoint é um endereço de e-mail. Um token de confirmação é enviado para este e-mail. Dentro do prazo de três dias de recebimento, verifique a assinatura com esse token de confirmação.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Inscrever um endpoint de aplicação em um tópico
<a name="subscribe-an-application-endpoint-to-a-topic"></a>

Para iniciar a inscrição em uma aplicação web, utilize a operação [Assinar](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html).

O método de assinatura pode ser utilizado para inscrever vários endpoints em um tópico do Amazon SNS, dependendo dos valores adotados para os parâmetros passados. Isso é mostrado em outros exemplos deste tópico.

Nesse exemplo, o endpoint é uma URL. Um token de confirmação é enviado para este endereço da web. Dentro do prazo de três dias de recebimento, verifique a assinatura com esse token de confirmação.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Inscrever uma função do Lambda em um tópico
<a name="subscribe-a-lam-function-to-a-topic"></a>

Para iniciar a assinatura de uma função do Lambda, utilize a operação [Assinar](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html).

O método de assinatura pode ser utilizado para inscrever vários endpoints em um tópico do Amazon SNS, dependendo dos valores adotados para os parâmetros passados. Isso é mostrado em outros exemplos deste tópico.

Nesse exemplo, o endpoint é uma função do Lambda. Um token de confirmação é enviado para essa função do Lambda. Dentro do prazo de três dias de recebimento, verifique a assinatura com esse token de confirmação.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Inscrever mensagens SMS de texto em um tópico
<a name="subscribe-a-text-sms-to-a-topic"></a>

Para enviar mensagens SMS a vários números de telefone ao mesmo tempo, inscreva cada número em um tópico.

Para iniciar a inscrição em um número de telefone, utilize a operação [Assinar](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html).

O método de assinatura pode ser utilizado para inscrever vários endpoints em um tópico do Amazon SNS, dependendo dos valores adotados para os parâmetros passados. Isso é mostrado em outros exemplos deste tópico.

Neste exemplo, o endpoint é um número de telefone no formato E.164, um padrão para telecomunicações internacionais.

Um token de confirmação é enviado para este número de telefone. Dentro do prazo de três dias de recebimento, verifique a assinatura com esse token de confirmação.

Para obter uma alternativa de envio de mensagens SMS com o Amazon SNS, consulte [Envio de mensagens SMS no Amazon SNS com o AWS SDK para PHP versão 3](sns-examples-sending-sms.md).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Confirmar inscrição em um tópico
<a name="confirm-subscription-to-a-topic"></a>

Para criar uma assinatura, o proprietário do endpoint deve confirmar a intenção de receber mensagens do tópico por meio de um token enviado mediante o estabelecimento da inscrição, conforme descrito anteriormente. Os tokens de confirmação são válidos por três dias. Após três dias, você pode reenviar um token ao criar uma nova assinatura.

Para confirmar uma assinatura, use a [ConfirmSubscription](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)operação.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Listar assinaturas em um tópico
<a name="list-subscriptions-to-a-topic"></a>

Para listar até 100 assinaturas existentes em uma determinada AWS região, use a [ListSubscriptions](https://docs.aws.amazon.com/sns/latest/api/API_ListSubscriptions.html)operação.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Cancelar a assinatura de um tópico
<a name="unsubscribe-from-a-topic"></a>

Para excluir um endpoint inscrito em um tópico, utilize a operação [Cancelar assinatura](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html).

Se a assinatura exigir autenticação para exclusão, somente o proprietário da assinatura ou o proprietário do tópico poderá cancelar a assinatura, e uma AWS assinatura será necessária. Se a chamada de cancelamento da assinatura não exigir autenticação e o solicitante não for proprietário da assinatura, uma mensagem de cancelamento final será entregue ao endpoint.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Publique uma mensagem em um tópico do Amazon SNS
<a name="publish-a-message-to-an-sns-topic"></a>

Para enviar uma mensagem a cada endpoint inscrito em um tópico do Amazon SNS, utilize a operação [Publicar](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html).

Crie um objeto que contenha os parâmetros para publicar uma mensagem, incluindo o texto da mensagem e o nome do recurso da Amazon (ARN) do tópico do Amazon SNS.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

# Envio de mensagens SMS no Amazon SNS com o AWS SDK para PHP versão 3
<a name="sns-examples-sending-sms"></a>

Você pode usar o Amazon Simple Notification Service (Amazon SNS) para enviar mensagens de texto ou mensagens SMS para dispositivos habilitados para SMS. Você pode enviar uma mensagem diretamente para um número de telefone ou enviar uma mensagem para vários números de telefone de uma só vez inscrevendo esses números em um tópico e enviando sua mensagem para o tópico.

Use o Amazon SNS para especificar as preferências para o uso de mensagens SMS, por exemplo, como suas entregas serão otimizadas (para fins de custo ou confiabilidade), o limite de gastos mensais, como as entregas de mensagens serão registradas e a assinatura em relatórios diários de uso de SMS. Essas preferências são recuperadas e definidas como atributos de SMS para Amazon SNS.

Ao enviar uma mensagem SMS, especifique o número de telefone usando o formato E.164. E.164 é um padrão para a estrutura de número de telefone usada para telecomunicações internacionais. Os números de telefone que seguem esse formato podem conter 15 dígitos, no máximo, e são prefixados com o caractere de mais (\$1) e o código do país. Por exemplo, um número de telefone dos EUA no formato E.164 seria exibido como \$11001XXX5550100.

Os exemplos a seguir mostram como:
+ Recupere as configurações padrão para o envio de mensagens SMS de sua conta com o [GetSMSAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#getsmsattributes).
+ Atualize as configurações padrão para o envio de mensagens SMS de sua conta com o [SetSMSAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#setsmsattributes).
+ Descubra se um proprietário de número de telefone determinado cancelou o recebimento de mensagens com o [CheckIfPhoneNumberISOptedOut](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#checkifphonenumberisoptedout).
+ Liste os números de telefone para os quais o proprietário desativou o recebimento de mensagens SMS de sua conta com o [ListPhoneNumberOptedOut](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#listphonenumbersoptedout).
+ Envie uma mensagem de texto (SMS) diretamente a um número de telefone com a função [Publicar](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#publish).

Para obter mais informações sobre como usar o Amazon SNS, consulte [Uso do Amazon SNS para notificações ao usuário com um número de celular como assinante (envio por SMS)](https://docs.aws.amazon.com/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Obter atributos de SMS
<a name="get-sms-attributes"></a>

Para recuperar as configurações padrão para mensagens SMS, utilize a operação [GetSMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetSMSAttributes.html).

Este exemplo obtém o atributo `DefaultSMSType`. Este atributo controla se serão enviadas mensagens SMS como `Promotional`, que otimiza a entrega de mensagens para gerar custos mais baixos, ou como `Transactional`, que otimiza a entrega de mensagens para gerar a mais alta confiabilidade.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Definir atributos de SMS
<a name="set-sms-attributes"></a>

Para atualizar as configurações padrão para mensagens SMS, utilize a operação [SetSMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html).

Este exemplo define o atributo `DefaultSMSType` para `Transactional`, que otimiza a entrega de mensagens para gerar a mais alta confiabilidade.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Verificar se um número de telefone cancelou o recebimento
<a name="check-if-a-phone-number-has-opted-out"></a>

Para estabelecer se determinado proprietário de número de telefone cancelou o recebimento de mensagens de sua conta, utilize a operação [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/sns/latest/api/API_CheckIfPhoneNumberIsOptedOut.html).

Neste exemplo, o número de telefone está no formato E.164, um padrão para telecomunicações internacionais.

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Listar números de telefone que saíram
<a name="list-opted-out-phone-numbers"></a>

Para recuperar uma lista de números de telefone para os quais o proprietário desativou o recebimento de mensagens SMS de sua conta, utilize a operação [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/sns/latest/api/API_ListPhoneNumbersOptedOut.html).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

## Publicar em uma mensagem de texto (mensagem SMS)
<a name="publish-to-a-text-message-sms-message"></a>

Para enviar uma mensagem de texto (mensagem SMS) diretamente a um número de telefone, utilize a operação [Publicar](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html).

Neste exemplo, o número de telefone está no formato E.164, um padrão para telecomunicações internacionais.

As mensagens SMS podem conter até 140 bytes. O limite do tamanho de uma única ação de publicação de SMS é de 1.600 bytes.

Para obter mais informações sobre o envio de mensagens SMS, consulte [Como enviar uma mensagem SMS](https://docs.aws.amazon.com/sns/latest/dg/sms_publish-to-phone.html).

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **Código de exemplo** 

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

# Exemplos do Amazon SQS usando o AWS SDK para PHP versão 3
<a name="sqs-examples"></a>

O Amazon Simple Queue Service (SQS) é um serviço de fila de mensagens rápido, confiável, escalável e totalmente gerenciado. O Amazon SQS permite que você desacople os componentes de uma aplicação na nuvem. O Amazon SQS inclui filas padrão com grande throughput e pelo menos um processamento, além de filas FIFO que fornecem entrega FIFO (primeiro a entrar, primeiro a sair) e processamento único.

Todo o código de exemplo do AWS SDK para PHP versão 3 está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

**Topics**
+ [Habilitar a sondagem longa](sqs-examples-enable-long-polling.md)
+ [Gerenciar o tempo limite de visibilidade](sqs-examples-managing-visibility-timeout.md)
+ [Enviar e receber mensagens](sqs-examples-send-receive-messages.md)
+ [Usar filas de mensagens não entregues](sqs-examples-dead-letter-queues.md)
+ [Usar filas](sqs-examples-using-queues.md)

# Habilitar a sondagem longa no Amazon SQS com o AWS SDK para PHP versão 3
<a name="sqs-examples-enable-long-polling"></a>

A sondagem longa reduz o número de respostas vazias ao permitir que o Amazon SQS espere um tempo especificado para que uma mensagem se torne disponível na fila antes de enviar uma resposta. Além disso, a sondagem longa elimina respostas vazias falsas consultando todos os servidores em vez de apenas uma amostragem de servidores. Para habilitar a sondagem longa, especifique um tempo de espera diferente de zero para mensagens recebidas. Para saber mais, consulte [Sondagem longa do SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html).

Os exemplos a seguir mostram como:
+ Definir atributos em uma fila do Amazon SQS para habilitar a sondagem longa usando [SetQueueAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#setqueueattributes).
+ Recuperar uma ou mais mensagens com sondagem longa com o [ReceiveMessage](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#receivemessage).
+ Criar uma fila de sondagem longa com o [CreateQueue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#createqueue).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Definir atributos em uma fila para habilitar a sondagem longa
<a name="set-attributes-on-a-queue-to-enable-long-polling"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

## Recuperar mensagens com sondagem longa
<a name="retrieve-messages-with-long-polling"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

## Criar uma fila com sondagem longa
<a name="create-a-queue-with-long-polling"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

# Gerenciar o tempo limite de visibilidade no Amazon SQS com o AWS SDK para PHP versão 3
<a name="sqs-examples-managing-visibility-timeout"></a>

Um tempo limite de visibilidade é um período durante o qual o Amazon SQS impede que outros componentes consumidores recebam e processem uma mensagem. Para saber mais, consulte [Tempo limite de visibilidade](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html).

O exemplo a seguir mostra como:
+ Altere o tempo limite de visibilidade de mensagens especificadas em uma fila para novos valores com o [ChangeMessageVisibilityBatch](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#changemessagevisibilitybatch).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Alteração do tempo limite de visibilidade de várias mensagens
<a name="change-the-visibility-timeout-of-multiple-messages"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

# Enviar e receber mensagens no Amazon SQS com o AWS SDK para PHP versão 3
<a name="sqs-examples-send-receive-messages"></a>

Para saber mais sobre as mensagens do Amazon SQS, consulte [Envio de uma mensagem a uma fila do SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-send-message.html) e [Recebimento e exclusão de uma mensagem de uma fila do SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-receive-delete-message.html.html) no Guia do usuário do Service Quotas.

Os exemplos a seguir mostram como:
+ Entregue uma mensagem para uma fila específica com o [SendMessage](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#sendmessage).
+ Recupere uma ou mais mensagens (até 10) de uma fila específica com o [ReceiveMessage](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#receivemessage).
+ Exclua uma mensagem de uma fila com o [DeleteMessage](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#deletemessage).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Enviar uma mensagem
<a name="send-a-message"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

## Receber e excluir mensagens
<a name="receive-and-delete-messages"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

# Usar filas de mensagens não entregues no Amazon SQS com o AWS SDK para PHP versão 3
<a name="sqs-examples-dead-letter-queues"></a>

Uma dead letter queue é a fila para a qual outras filas (de origem) podem direcionar mensagens que não podem ser processadas com êxito. Você pode separar e isolar essas mensagens na dead letter queue para determinar por que o processamento não obteve sucesso. Você deve configurar individualmente cada fila de origem que envia mensagens para uma dead letter queue. Várias filas podem visar uma única dead letter queue.

Para saber mais, consulte [Uso das dead letter queues do SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html).

O exemplo a seguir mostra como:
+ Habilite uma dead letter queue com o [SetQueueAttributes](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#setqueueattributes).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Habilitar uma fila de mensagens não entregues
<a name="enable-a-dead-letter-queue"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

# Usar filas no Amazon SQS com o AWS SDK para PHP versão 3
<a name="sqs-examples-using-queues"></a>

Para saber mais sobre filas do Amazon SQS, consulte [Como as filas do Amazon SQS funcionam](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-how-it-works.html).

Os exemplos a seguir mostram como:
+ Obtenha uma lista de suas filas com o [ListQueues](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#listqueues).
+ Crie uma nova fila com o [CreateQueue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#createqueue).
+ Obtenha a URL de uma fila existente com o [GetQueueUrl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#getqueueurl).
+ Exclua uma fila especificada com o [DeleteQueue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#deletequeue).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Retornar uma lista de filas
<a name="return-a-list-of-queues"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

## Criar uma fila
<a name="create-a-queue"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

## Retornar o URL de uma fila
<a name="return-the-url-of-a-queue"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

## Excluir uma fila
<a name="delete-a-queue"></a>

 **Importações** 

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

use Aws\Exception\AwsException;
use Aws\Sqs\SqsClient;
```

 **Código de exemplo** 

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

# Envie eventos para endpoints EventBridge globais da Amazon usando a AWS SDK para PHP versão 3
<a name="eventbridge-examples"></a>

Você pode usar os [endpoints EventBridge globais da Amazon](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-global-endpoints.html) para melhorar a disponibilidade e a confiabilidade de seus aplicativos orientados por eventos.

Depois que o endpoint EventBridge global estiver [configurado](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-global-endpoints.html#eb-ge-create-endpoint), você poderá enviar eventos para ele usando o SDK for PHP.

**Importante**  
Para usar endpoints EventBridge globais com o SDK for PHP, seu ambiente PHP deve ter AWS a extensão [Common Runtime AWS (CRT](guide_crt.md)) instalada.

O exemplo a seguir usa o [PutEvents](https://docs.aws.amazon.com//aws-sdk-php/v3/api/api-eventbridge-2015-10-07.html#putevents)método do `EventBridgeClient` para enviar um único evento para um endpoint EventBridge global.

```
<?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]
]);
```

[Esta postagem do blog](https://aws.amazon.com/blogs//compute/introducing-global-endpoints-for-amazon-eventbridge/) contém mais informações sobre endpoints EventBridge globais.