翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CloudFront API と AWS SDK for PHP バージョン 3 を使用した Amazon CloudFront ディストリビューションの管理
Amazon は、世界中のエッジロケーションにコンテンツを CloudFront キャッシュして、独自のサーバー、または Amazon S3 や Amazon EC2 などの Amazon サービスに保存する静的ファイルと動的ファイルの配信を高速化します。ユーザーがウェブサイトからコンテンツをリクエストすると、ファイルがキャッシュされている場合、 は最も近いエッジロケーションからコンテンツを CloudFront 供給します。それ以外の場合は、ファイルのコピー CloudFront を取得して配信し、次のリクエストに備えてキャッシュします。エッジロケーションでコンテンツをキャッシュすることにより、そのエリアでの類似したユーザーリクエストのレイテンシーが減ります。
作成する CloudFront ディストリビューションごとに、コンテンツの場所と、ユーザーがリクエストを行ったときにコンテンツを配信する方法を指定します。このトピックでは、HTML、CSS、JSON、イメージファイルなどの静的ファイルおよび動的ファイルの配信について説明します。ビデオオンデマンド CloudFront で を使用する方法については、「 を使用したオンデマンドおよびライブストリーミングビデオ CloudFront」を参照してください。
以下の例では、次の方法を示しています。
-
を使用してディストリビューションを作成しますCreateDistribution。
-
を使用してディストリビューションを取得しますGetDistribution。
-
を使用してディストリビューションを一覧表示しますListDistributions。
-
を使用してディストリビューションを更新しますUpdateDistributions。
-
を使用してディストリビューションを無効にしますDisableDistribution。
-
を使用してディストリビューションを削除しますDeleteDistributions。
のすべてのサンプルコードAWS SDK for PHPは、 にあります GitHub
認証情報
サンプルコードを実行する前に、AWS の認証情報を設定します (認証情報 を参照)。AWS SDK for PHP からのインポート (基本的な使用法 を参照)。
Amazon の使用の詳細については CloudFront、「Amazon CloudFront デベロッパーガイド」を参照してください。
CloudFront ディストリビューションを作成する
Amazon S3 バケットからディストリビューションを作成します。次の例では、オプションのパラメータはコメントアウトされていますが、デフォルト値は表示されています。ディストリビューションをカスタマイズするには、$distribution
内の値とパラメータの両方をコメント解除します。
CloudFront ディストリビューションを作成するには、 CreateDistributionオペレーションを使用します。
インポート
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
サンプルコード
function createS3Distribution($cloudFrontClient, $distribution) { try { $result = $cloudFrontClient->createDistribution([ 'DistributionConfig' => $distribution ]); $message = ''; if (isset($result['Distribution']['Id'])) { $message = 'Distribution created with the ID of ' . $result['Distribution']['Id']; } $message .= ' and an effective URI of ' . $result['@metadata']['effectiveUri'] . '.'; return $message; } catch (AwsException $e) { return 'Error: ' . $e['message']; } } function createsTheS3Distribution() { $originName = 'my-unique-origin-name'; $s3BucketURL = 'my-bucket-name.s3.amazonaws.com'; $callerReference = 'my-unique-caller-reference'; $comment = 'my-comment-about-this-distribution'; $defaultCacheBehavior = [ 'AllowedMethods' => [ 'CachedMethods' => [ 'Items' => ['HEAD', 'GET'], 'Quantity' => 2 ], 'Items' => ['HEAD', 'GET'], 'Quantity' => 2 ], 'Compress' => false, 'DefaultTTL' => 0, 'FieldLevelEncryptionId' => '', 'ForwardedValues' => [ 'Cookies' => [ 'Forward' => 'none' ], 'Headers' => [ 'Quantity' => 0 ], 'QueryString' => false, 'QueryStringCacheKeys' => [ 'Quantity' => 0 ] ], 'LambdaFunctionAssociations' => ['Quantity' => 0], 'MaxTTL' => 0, 'MinTTL' => 0, 'SmoothStreaming' => false, 'TargetOriginId' => $originName, 'TrustedSigners' => [ 'Enabled' => false, 'Quantity' => 0 ], 'ViewerProtocolPolicy' => 'allow-all' ]; $enabled = false; $origin = [ 'Items' => [ [ 'DomainName' => $s3BucketURL, 'Id' => $originName, 'OriginPath' => '', 'CustomHeaders' => ['Quantity' => 0], 'S3OriginConfig' => ['OriginAccessIdentity' => ''] ] ], 'Quantity' => 1 ]; $distribution = [ 'CallerReference' => $callerReference, 'Comment' => $comment, 'DefaultCacheBehavior' => $defaultCacheBehavior, 'Enabled' => $enabled, 'Origins' => $origin ]; $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-1' ]); echo createS3Distribution($cloudFrontClient, $distribution); } // Uncomment the following line to run this code in an AWS account. // createsTheS3Distribution();
CloudFront ディストリビューションを取得する
指定された CloudFront ディストリビューションのステータスと詳細を取得するには、 GetDistributionオペレーションを使用します。
インポート
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
サンプルコード
function getDistribution($cloudFrontClient, $distributionId) { try { $result = $cloudFrontClient->getDistribution([ 'Id' => $distributionId ]); $message = ''; if (isset($result['Distribution']['Status'])) { $message = 'The status of the distribution with the ID of ' . $result['Distribution']['Id'] . ' is currently ' . $result['Distribution']['Status']; } if (isset($result['@metadata']['effectiveUri'])) { $message .= ', and the effective URI is ' . $result['@metadata']['effectiveUri'] . '.'; } else { $message = 'Error: Could not get the specified distribution. ' . 'The distribution\'s status is not available.'; } return $message; } catch (AwsException $e) { return 'Error: ' . $e->getAwsErrorMessage(); } } function getsADistribution() { $distributionId = 'E1BTGP2EXAMPLE'; $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-1' ]); echo getDistribution($cloudFrontClient, $distributionId); } // Uncomment the following line to run this code in an AWS account. // getsADistribution();
CloudFront ディストリビューションを一覧表示する
ListDistributions オペレーションを使用して、現在のアカウントから指定したAWSリージョンの既存の CloudFront ディストリビューションのリストを取得します。
インポート
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
サンプルコード
function listDistributions($cloudFrontClient) { try { $result = $cloudFrontClient->listDistributions([]); return $result; } catch (AwsException $e) { exit('Error: ' . $e->getAwsErrorMessage()); } } function listTheDistributions() { $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-2' ]); $distributions = listDistributions($cloudFrontClient); if (count($distributions) == 0) { echo 'Could not find any distributions.'; } else { foreach ($distributions['DistributionList']['Items'] as $distribution) { echo 'The distribution with the ID of ' . $distribution['Id'] . ' has the status of ' . $distribution['Status'] . '.' . "\n"; } } } // Uncomment the following line to run this code in an AWS account. // listTheDistributions();
CloudFront ディストリビューションを更新する
CloudFront ディストリビューションの更新は、ディストリビューションの作成と似ています。ただし、ディストリビューションを更新するときに、より多くのフィールドが必要になり、すべての値が含まれている必要があります。既存のディストリビューションを変更するには、最初に既存のディストリビューションを取得し、$distribution
配列内で変更する値を更新することをお勧めします。
指定された CloudFront ディストリビューションを更新するには、 UpdateDistributionオペレーションを使用します。
インポート
require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;
サンプルコード
function updateDistribution( $cloudFrontClient, $distributionId, $distributionConfig, $eTag ) { try { $result = $cloudFrontClient->updateDistribution([ 'DistributionConfig' => $distributionConfig, 'Id' => $distributionId, 'IfMatch' => $eTag ]); return 'The distribution with the following effective URI has ' . 'been updated: ' . $result['@metadata']['effectiveUri']; } catch (AwsException $e) { return 'Error: ' . $e->getAwsErrorMessage(); } } function getDistributionConfig($cloudFrontClient, $distributionId) { try { $result = $cloudFrontClient->getDistribution([ 'Id' => $distributionId, ]); if (isset($result['Distribution']['DistributionConfig'])) { return [ 'DistributionConfig' => $result['Distribution']['DistributionConfig'], 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } else { return [ 'Error' => 'Error: Cannot find distribution configuration details.', 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } } catch (AwsException $e) { return [ 'Error' => 'Error: ' . $e->getAwsErrorMessage() ]; } } function getDistributionETag($cloudFrontClient, $distributionId) { try { $result = $cloudFrontClient->getDistribution([ 'Id' => $distributionId, ]); if (isset($result['ETag'])) { return [ 'ETag' => $result['ETag'], 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } else { return [ 'Error' => 'Error: Cannot find distribution ETag header value.', 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } } catch (AwsException $e) { return [ 'Error' => 'Error: ' . $e->getAwsErrorMessage() ]; } } function updateADistribution() { // $distributionId = 'E1BTGP2EXAMPLE'; $distributionId = 'E1X3BKQ569KEMH'; $cloudFrontClient = new CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-1' ]); // To change a distribution, you must first get the distribution's // ETag header value. $eTag = getDistributionETag($cloudFrontClient, $distributionId); if (array_key_exists('Error', $eTag)) { exit($eTag['Error']); } // To change a distribution, you must also first get information about // the distribution's current configuration. Then you must use that // information to build a new configuration. $currentConfig = getDistributionConfig($cloudFrontClient, $distributionId); if (array_key_exists('Error', $currentConfig)) { exit($currentConfig['Error']); } // To change a distribution's configuration, you can set the // distribution's related configuration value as part of a change request, // for example: // 'Enabled' => true // Some configuration values are required to be specified as part of a change // request, even if you don't plan to change their values. For ones you // don't want to change but are required to be specified, you can just reuse // their current values, as follows. $distributionConfig = [ 'CallerReference' => $currentConfig['DistributionConfig']["CallerReference"], 'Comment' => $currentConfig['DistributionConfig']["Comment"], 'DefaultCacheBehavior' => $currentConfig['DistributionConfig']["DefaultCacheBehavior"], 'DefaultRootObject' => $currentConfig['DistributionConfig']["DefaultRootObject"], 'Enabled' => $currentConfig['DistributionConfig']["Enabled"], 'Origins' => $currentConfig['DistributionConfig']["Origins"], 'Aliases' => $currentConfig['DistributionConfig']["Aliases"], 'CustomErrorResponses' => $currentConfig['DistributionConfig']["CustomErrorResponses"], 'HttpVersion' => $currentConfig['DistributionConfig']["HttpVersion"], 'CacheBehaviors' => $currentConfig['DistributionConfig']["CacheBehaviors"], 'Logging' => $currentConfig['DistributionConfig']["Logging"], 'PriceClass' => $currentConfig['DistributionConfig']["PriceClass"], 'Restrictions' => $currentConfig['DistributionConfig']["Restrictions"], 'ViewerCertificate' => $currentConfig['DistributionConfig']["ViewerCertificate"], 'WebACLId' => $currentConfig['DistributionConfig']["WebACLId"] ]; echo updateDistribution( $cloudFrontClient, $distributionId, $distributionConfig, $eTag['ETag'] ); } // Uncomment the following line to run this code in an AWS account. // updateADistribution();
CloudFront ディストリビューションを無効にする
ディストリビューションを無効化または削除するには、そのステータスをデプロイ済みから無効に変更します。
指定された CloudFront ディストリビューションを無効にするには、 DisableDistributionオペレーションを使用します。
インポート
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
サンプルコード
function disableDistribution( $cloudFrontClient, $distributionId, $distributionConfig, $eTag ) { try { $result = $cloudFrontClient->updateDistribution([ 'DistributionConfig' => $distributionConfig, 'Id' => $distributionId, 'IfMatch' => $eTag ]); return 'The distribution with the following effective URI has ' . 'been disabled: ' . $result['@metadata']['effectiveUri']; } catch (AwsException $e) { return 'Error: ' . $e->getAwsErrorMessage(); } } function getDistributionConfig($cloudFrontClient, $distributionId) { try { $result = $cloudFrontClient->getDistribution([ 'Id' => $distributionId, ]); if (isset($result['Distribution']['DistributionConfig'])) { return [ 'DistributionConfig' => $result['Distribution']['DistributionConfig'], 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } else { return [ 'Error' => 'Error: Cannot find distribution configuration details.', 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } } catch (AwsException $e) { return [ 'Error' => 'Error: ' . $e->getAwsErrorMessage() ]; } } function getDistributionETag($cloudFrontClient, $distributionId) { try { $result = $cloudFrontClient->getDistribution([ 'Id' => $distributionId, ]); if (isset($result['ETag'])) { return [ 'ETag' => $result['ETag'], 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } else { return [ 'Error' => 'Error: Cannot find distribution ETag header value.', 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } } catch (AwsException $e) { return [ 'Error' => 'Error: ' . $e->getAwsErrorMessage() ]; } } function disableADistribution() { $distributionId = 'E1BTGP2EXAMPLE'; $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-1' ]); // To disable a distribution, you must first get the distribution's // ETag header value. $eTag = getDistributionETag($cloudFrontClient, $distributionId); if (array_key_exists('Error', $eTag)) { exit($eTag['Error']); } // To delete a distribution, you must also first get information about // the distribution's current configuration. Then you must use that // information to build a new configuration, including setting the new // configuration to "disabled". $currentConfig = getDistributionConfig($cloudFrontClient, $distributionId); if (array_key_exists('Error', $currentConfig)) { exit($currentConfig['Error']); } $distributionConfig = [ 'CacheBehaviors' => $currentConfig['DistributionConfig']["CacheBehaviors"], 'CallerReference' => $currentConfig['DistributionConfig']["CallerReference"], 'Comment' => $currentConfig['DistributionConfig']["Comment"], 'DefaultCacheBehavior' => $currentConfig['DistributionConfig']["DefaultCacheBehavior"], 'DefaultRootObject' => $currentConfig['DistributionConfig']["DefaultRootObject"], 'Enabled' => false, 'Origins' => $currentConfig['DistributionConfig']["Origins"], 'Aliases' => $currentConfig['DistributionConfig']["Aliases"], 'CustomErrorResponses' => $currentConfig['DistributionConfig']["CustomErrorResponses"], 'HttpVersion' => $currentConfig['DistributionConfig']["HttpVersion"], 'Logging' => $currentConfig['DistributionConfig']["Logging"], 'PriceClass' => $currentConfig['DistributionConfig']["PriceClass"], 'Restrictions' => $currentConfig['DistributionConfig']["Restrictions"], 'ViewerCertificate' => $currentConfig['DistributionConfig']["ViewerCertificate"], 'WebACLId' => $currentConfig['DistributionConfig']["WebACLId"] ]; echo disableDistribution( $cloudFrontClient, $distributionId, $distributionConfig, $eTag['ETag'] ); } // Uncomment the following line to run this code in an AWS account. // disableADistribution();
CloudFront ディストリビューションを削除する
ディストリビューションのステータスが「無効」になったら、ディストリビューションを削除できます。
指定した CloudFront ディストリビューションを削除するには、 DeleteDistributionオペレーションを使用します。
インポート
require 'vendor/autoload.php'; use Aws\Exception\AwsException;
サンプルコード
function deleteDistribution($cloudFrontClient, $distributionId, $eTag) { try { $result = $cloudFrontClient->deleteDistribution([ 'Id' => $distributionId, 'IfMatch' => $eTag ]); return 'The distribution at the following effective URI has ' . 'been deleted: ' . $result['@metadata']['effectiveUri']; } catch (AwsException $e) { return 'Error: ' . $e->getAwsErrorMessage(); } } function getDistributionETag($cloudFrontClient, $distributionId) { try { $result = $cloudFrontClient->getDistribution([ 'Id' => $distributionId, ]); if (isset($result['ETag'])) { return [ 'ETag' => $result['ETag'], 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } else { return [ 'Error' => 'Error: Cannot find distribution ETag header value.', 'effectiveUri' => $result['@metadata']['effectiveUri'] ]; } } catch (AwsException $e) { return [ 'Error' => 'Error: ' . $e->getAwsErrorMessage() ]; } } function deleteADistribution() { $distributionId = 'E17G7YNEXAMPLE'; $cloudFrontClient = new Aws\CloudFront\CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-1' ]); // To delete a distribution, you must first get the distribution's // ETag header value. $eTag = getDistributionETag($cloudFrontClient, $distributionId); if (array_key_exists('Error', $eTag)) { exit($eTag['Error']); } else { echo deleteDistribution( $cloudFrontClient, $distributionId, $eTag['ETag'] ); } } // Uncomment the following line to run this code in an AWS account. // deleteADistribution();