AWS CloudFormationに、Amazon DymamoDBとAmazon CloudFrontの動的コンテンツのサポートを追加いたしました。これにより、EC2インスタンスやAmazon DynamoDBのテーブル、Amazon CloudFrontのディストリビューションのような関連するAWSのリソースをCloudFormationのテンプレートを使って定義できるようになりました。 これらのテンプレートを使うことで、AWS上でアプリケーションを運用する際に必要なリソースを完全にカプセル化することができます。そして、アプリケーションのソースのバージョン管理をすることもできます。
Amazon DynamoDB
CloudFormationを使うことで、簡単にAmazon DynamoDBのテーブルをセットアップ、管理できるようになります。例えば、もしAmazon DynamoDBにアプリケーションのセッション情報を保存しているならば、以下のようなCloudFormationのスニペットを使って、テーブルを作成することができます。
"Type" : "AWS::DynamoDB::Table",
"Properties" : {
"KeySchema" : {
"HashKeyElement": {
"AttributeName" : "id",
"AttributeType" : "AmazonDynamoDB::TYPE_STRING"
}
},
"ProvisionedThroughput" : {
"ReadCapacityUnits" : "5",
"WriteCapacityUnits" : "10"
}
}
}
CloudFormationテンプレートのフォーマットを使えば、すばやく複数の同じようなスタックを起動でき、与えるパラメータによって、それぞれをカスタマイズできます。アプリケーションにさらなるプロビジョンドスループットが必要になったら、単純に運用中のCloudFormationのスタックを更新し、異なるパラメータを入力するだけでOKです。
Amazon CloudFront Dynamic Content
以前の記事で、Amazon CloudFrontで静的なコンテンツだけでなく、動的コンテンツやストリーミングコンテンツの配信が可能になったことをお知らせいたしました。これらもCloudFormationのテンプレートを使って、セットアップしたり更新したりできるようになりました。これにはマルチオリジンと動的コンテンツのサポートが含まれます。はじめるのは簡単です。
- Amazon CloudFrontディストリビューション用に複数のオリジンサーバーを設定できます。以下の例では、S3に置いた全ての写真をホストし、動的コンテンツはElastic Load Balncerに送ります。
"app-distribution" : {
"Type" : "AWS::CloudFront::Distribution",
"Properties" : {
"DistributionConfig" : {
"DefaultRootObject" : "index.php",
"Origins" : [ {
"Id" : "S3 Origin",
"DomainName" : { "Fn::GetAtt" : [ "S3OriginBucket", "DomainName" ] },
"S3OriginConfig" : {}
}, {
"Id" : "Dynamic Origin",
"DomainName" : { "Fn::GetAtt" : [ "WebServer", "PublicDnsName" ]},
"CustomOriginConfig" : {
"OriginProtocolPolicy" : "match-viewer"
}
}
],
"DefaultCacheBehavior" : {
"TargetOriginId" : "Dynamic Origin",
"ForwardedValues" : {
"QueryString" : "true"
},
"ViewerProtocolPolicy" : "allow-all"
},
"CacheBehaviors" : [ {
"TargetOriginId" : "S3 Origin",
"ForwardedValues" : {
"QueryString" : "false"
},
"ViewerProtocolPolicy" : "allow-all",
"MinTTL" : "500",
"PathPattern" : "*.jpg"
},
{
"TargetOriginId" : "Dynamic Origin",
"ForwardedValues" : {
"QueryString" : "true"
},
"ViewerProtocolPolicy" : "allow-all",
"MinTTL" : "500",
"PathPattern" : "*.php"
}
],
"Comment" : "Sample multi-origin CloudFront distribution created using CloudFormation.",
"Logging" : {
"Bucket" : { "Fn::GetAtt" : [ "S3LoggingBucket", "DomainName"] },
"Prefix" : "CloudFrontDistributionSampleLogs"
},
"Enabled" : "true"
}
}
}
- ページをカスタマイズするのにクエリストリングパラメータも使えます。下の例では、クエリストリングパラメータをPHPのオリジンにフォワードしています。
"CacheBehaviors" : [{
"TargetOriginId" : "Dynamic Origin",
"ForwardedValues" : {
"QueryString" : "true"
},
"ViewerProtocolPolicy" : "allow-all",
"PathPattern" : "*.php"
}
]
- ウェブサイトの一部に対するキャッシュの振舞いを設定することもできます。下の例では静的コンテンツに対して、より小さいminTTLを設定しています。
{
"TargetOriginId" : "S3 Origin",
"ForwardedValues" : {
"QueryString" : "false"
},
"ViewerProtocolPolicy" : "allow-all",
"MinTTL" : "500",
"PathPattern" : "*.jpg"
}
もちろん、上記の設定を調整する必要があるならば、単純にテンプレートを修正して、運用中のCloudFormationのスタックを更新するだけです。後はCloudFormationが面倒を見てくれます。
いつものように、サンプルテンプレートのリストも更新し、Amazon DynamoDBとCloudFrontの動的コンテンツを扱った例をいくつか追加しています。また、CloudFormationをこれから使ってみたいという方にはAWS CloudFormation User Guideも参考になると思います。