CloudFormationによるWordPressの自動構築 -概要編-

はじめに

本連載では、AWSが提供するInfrastructure as Code(以後 IaC)の機能である「AWS CloudFormation」について取り扱う。
CloudFormationを用いることでコード(JSON or YAML)を用いたITインフラの管理が可能となり、「作業の信頼性向上」「環境の再現性確保」「属人化からの開放」などのメリットが得られる。
連載中では、CloudFormationを用いてCMSのWordPressを自動構築する。「説明は後で読むから、とりあえず試してみたい」という方はWordPressの自動構築リンクをクリックして頂きたい。AWSへのログイン後にCloudFormationのスタックの作成画面が表示されるだろう。
※ AWSの利用料(従量課金)が発生するためコスト管理に注意すること。

連載

本連載の想定読者

本連載では以下の読者を想定している。

  • これからCloudFormationを使い始める方
  • 本連載で取り扱う各種AWSリソースの基礎知識を保有している方

本連載の目標

本連載の目標は以下の通りである。

  • CloudFormationの基本的な記法(YAML)を理解できること
  • CloudFormationを用いて簡単なシステムの構築ができるようになること
  • CloudFormationのスタック間の連携を理解できるようになること

CloudFormationとは

CloudFormationは2011年2月にリリースされた、AWS上でIaCを実現するためのサービスである。
CloudFormationを用いた環境構築では、はじめにテンプレート(Template)と呼ばれるコードを作成する。その後、テンプレートをCloudFormationにアップロードすることにより、CloudFormationがコードの記述にしたがってAWS上にスタック(Stack)を自動構築する。スタックはさまざまなAWSリソースを含みサービスを提供する
執筆時点(2018年10月)では、テンプレートの記法としてJSONおよびYAMLをサポートしている。本連載では可読性の観点からYAMLを用いたテンプレートを採用する。
CloudFormationでは複数のテンプレート(もしくはスタック)を結合するネスト(Nest)機能が存在する。本連載ではこのネスト機能を用いて、AWSリソースのカテゴリ毎にテンプレートを分割する。テンプレートを分割することによりコードのモジュール化が可能となるためテンプレートの再利用性が向上する。また、Gitなどのバージョン管理ツールを用いることで、スタック毎に環境の更新、ロールバックが可能となる。
AWSではさまざまなサービスが従量課金で提供されているが、CloudFormationは無償で利用可能なサービスである。CloudFormation自体は無償であり、CloudFormationによりデプロイされた各種AWSリソースに対して課金が発生する料金体系となっている。加えて、システムを破棄する際にはCloudFormationのスタックを削除することにより、CloudFormationによりデプロイされたサービスを漏れなく削除することが可能である。AWSを用いたシステム開発では、トライアルアンドエラーなどにより「設定変更の内容が引き継がれない」「何のリソースを作成したか忘れてしまい従量課金が継続する」などのトラブルに悩む組織も多いのではないだろうか。CloudFormationを活用することで、このような問題にも対処することが可能だろう。

本連載で構築するシステム

本連載ではCMSであるWordPressを自動構築する。シンプルなWordPress環境であれば数行~数十行のテンプレートで構築することが可能であるが、本システムでは複数のAZを活用した可用性の高いWordPress環境を題材とする。本システムであれば、単一のデータセンター故障が発生した場合においてもシステムを継続稼働させる事が可能である。連載中に例示するテンプレートを多少変更して頂ければ、同様のアーキテクチャを採用するシステムに流用可能だろう。

スタックの概要

前述の通り、本連載ではCloudFormationのスタックをAWSリソースのカテゴリ毎に分割する。スタックの全体構成は次のとおりだ。以下のイメージはCloudFormation Designerを用いて生成したものである。
※ イメージの生成に際して、TemplateのMetadataを一部修正している

各スタックによりデプロイされるリソースは以下の通りである。
※ スタック名のリンクは、それぞれのテンプレートとなる。

スタック名リソース連載予定回
NetworkAmazon Virtual Private Cloud第2回
SecuritySecurity Group第3回
RDSAmazon Relational Database Service第4回
EFSAmazon Elastic File System第5回
ASGAWS Auto Scaling, Elastic Load Balancing第6回
WordPressNetwork~ASGスタックをラップする第7回

おわりに

連載の第1回ということで、本記事の全体像を示させて頂いた。
筆者は普段コードを書いておらず、実践的なIaCは本連載がはじめてである。専門分野外の記事であるため、技術的に疎い部分の内容も含まれているが、お付き合い頂ければ幸いである。