Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Administrar distribuciones de Amazon CloudFront con la API CloudFront y la versión 3 de AWS SDK para PHP
Amazon CloudFront almacena en caché contenido de ubicaciones periféricas de todo el mundo para acelerar la distribución de archivos estáticos y dinámicos que almacene en su propio servidor o en un servicio de Amazon como Amazon S3 y Amazon EC2. Cuando los usuarios solicitan contenido de su sitio web, CloudFront lo envía desde la ubicación periférica más cercana, si el archivo está almacenado en caché en ella. De lo contrario, CloudFront recupera una copia del archivo, lo envía y, a continuación, lo almacena en caché para la siguiente solicitud. El almacenamiento en caché de contenido en una ubicación periférica reduce la latencia de las solicitudes similares de los usuarios de dicha área.
Para cada distribución de CloudFront que se crea, es preciso especificar dónde se guarda el contenido y cómo distribuirlo cuando los usuarios lo solicitan. Este tema se centra en las distribuciones de archivos estáticos y dinámicos como HTML, CSS, JSON y archivos de imágenes. Para obtener información acerca de cómo utilizar CloudFront con vídeo bajo demanda, consulte Video bajo demanda y streaming de video en directo con CloudFront.
Los siguientes ejemplos muestran cómo:
-
Crear una distribución con CreateDistribution.
-
Obtener una distribución con GetDistribution.
-
Obtener una lista de distribuciones con ListDistributions.
-
Actualizar distribuciones con UpdateDistributions.
-
Deshabilitar distribuciones con DisableDistribution.
-
Eliminar distribuciones con DeleteDistributions.
Todo el código de ejemplo de AWS SDK para PHP está disponible aquí en GitHub
Credenciales
Antes de ejecutar el código de ejemplo, configure sus credenciales de AWS, como se indica en Autenticación AWS con la AWS SDK para PHP versión 3. A continuación, importe AWS SDK para PHP, como se indica en Instalación del AWS SDK para PHP versión 3.
Para obtener más información sobre el uso de Amazon CloudFront, consulte la guía para desarrolladores de Amazon CloudFront.
Crear una distribución de CloudFront
Cree una distribución a partir de un bucket de Amazon S3. En el siguiente ejemplo, los parámetros opcionales están comentados, pero se muestran los valores predeterminados. Para añadir personalizaciones a la distribución, anule el comentario del valor y del parámetro dentro de $distribution.
Para crear una distribución de CloudFront, utilice la operación CreateDistribution.
Importaciones
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
Código de muestra
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 una distribución de CloudFront
Para recuperar el estado y los detalles de una distribución de CloudFront determinada, utilice la operación GetDistribution.
Importaciones
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
Código de muestra
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();
Obtener una lista de las distribuciones de CloudFront
Puede obtener una lista de las distribuciones de CloudFront existentes en la región de AWS especificada desde su cuenta actual con la operación ListDistributions.
Importaciones
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
Código de muestra
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();
Actualizar una distribución de CloudFront
El proceso para actualizar una distribución de CloudFront es similar al que se reailza para crear una distribución. Sin embargo, cuando se actualiza una distribución, se necesitan más campos y deben incluirse todos los valores. Para realizar cambios en una distribución existente, le recomendamos que primero recupere la distribución y que actualice los valores que desee cambiar en la matriz $distribution.
Para actualizar una distribución de CloudFront determinada, utilice la operación UpdateDistribution.
Importaciones
require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;
Código de muestra
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();
Desactivar una distribución de CloudFront
Para desactivar o eliminar una distribución, cambie su estado de implementada a deshabilitada.
Para desactivar una distribución de CloudFront determinada, utilice la operación DisableDistribution.
Importaciones
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
Código de muestra
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();
Eliminar una distribución de CloudFront
Después de deshabilitar una distribución, puede eliminarla.
Para eliminar una distribución de CloudFront determinada, utilice la operación DeleteDistribution.
Importaciones
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
Código de muestra
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();