[クラウド活用パターン辞典〜Amazon Web Servicesを使い倒す!〜]

AWSでの環境構築の自動化と開発環境の管理【第8回】

2017年6月19日(月)清野 剛史(クラスメソッドAWS事業部ソリューションアーキテクト)

本連載ではこれまで、AWS(Amazon Web Services)を使って実用的なシステムを構築するためのアーキテクチャーなどを中心に考察してきた。そして前回は、構築したシステムに対する認証について考えた。今回は、実際にシステムを構築し運用に携わるエンジニアの作業効率に関わる自動化や管理の仕組みについて考えていこう。

 システムを構築し運用するためには、例え小規模なシステムであっても、一定の手順を踏み確実に実施していかなければならない。こうした手順の効率を高めるための手段が「自動化」だ。だが、自動化のメリットは単に手間を減らすことだけではない。むしろ「ノウハウを引き継ぐ」というメリットのほうが大きい。

 昨今のシステムは短期構築と同時に可用性が求められる(関連記事『AWSでシステムの可用性を高める』)。だが、実際に稼働しているシステムほど安定しているものはない。そのシステムのために考えたセキュリティ設定やリソース同士の連携方法、アクセス手段やネットワーク経路などにはエンジニアのノウハウが詰まっている。それらをメモに残すのではなく、コードとして残せれば、設定情報などを余すことなく次のシステムに引き継げる。システム管理者は次に構築する新しいシステムならではの機能に注力できることになる。

「テンプレート」で設定を自動化するCloudFormation

 設定情報などの引き継ぎをAWSでは「CloudFormation」を使って実現する。以下では、CloudFormationの余り知られていない機能を含めて紹介していく。

 まずはAWSリソースを使ったクラウドアーキテクチャー構築の自動化である。CloudFormationは、AWSのリソース設定や各リソースの相関関係、権限設定、ポリシーをかなり細かな単位のブロックに分けて、JSON形式またはYAML形式で記述できる。これを「テンプレート」と呼ぶ。

 記述したテンプレートを直接アップロード、またはS3に保管してからアップロードして「STACK」と呼ぶ単位にまとめる。STACKをCloudFormationに流し込めば、個別のリソースに触れることなくAWSソリューションを作成できる。これを「CREATE STACK」という。リソースの変更や削除、設定の変更があれば、JSON/YAMLの値を書き換えて再度アップロードし、同じSTACKを更新する。「UPDATE STACK」である。設定情報はコードに残るのでgit等のバージョン管理ツールで管理すれば、変更の軌跡が記録されて後々の証跡になる。

 CloudFormationの便利な点の1つに、STACKを削除する処理「DELETE STACK」がある。DELETE STACKを実行すると、CloudFormationのSTACKにて構築されたリソースがすべて消える。「エンジニアのノウハウだといったSTACKをすべて消す必要があるのか」と思われるかもしれないが、その便利さは、実際にAWSを使用しているユーザーであれば、身をもって分かるはずだ。

 AWSには現在、90を超えるサービスがあり、各サービスの管理はリージョンごとに違っている。そのため、利用しなくなった「EC2」など、マネージメントコンソールだけではついつい見落としてしまうリソースが少なくなく、そこから無駄な課金が発生するパターンが多い。CloudFormationで構築しておけば、DELETE STACKを実行することで、すべてのリソースが確実に消えるため、無駄な課金につながる「消し忘れ」をなくせる。

 逆にS3や「RDS」などデータを扱うリソースは、DELETE STACKで消えてしまっては困るケースもある。その場合は「Deletion Policy属性」により、「データを残す」「スナップショットを取る」といった設定ができる。必要な場合は、Deletion Policy属性を設定しておこう。

 ここで1つTipsを書いておく。S3には「Bucketname」という属性があり、バケット名を設定できる。だが、S3のバケット名は、すべてのAWSの中で一意でなければならない。そのためCloudFormationのテンプレートにBucketnameを設定すると、そのテンプレートを他の環境に使う際には、必ず設定を変えなければならない。

 ところが実は、Bucketnameを設定しないとバケット名は「『リソースを定義しているリソース名』 + 『-』 + 『任意の乱数文字列』」というルールで自動作成される。当然、最後の乱数は毎回変わるので、同じテンプレートを使いまわしてもバケット名は重複しない。ただ、乱数を後ろに付けることがプログラム上、困る場合がある。固定されていないとデータをアップロードできないなどだ。要件によって切り分ける必要がある。

 AWSリソースを扱う上でCloudFormationを使う利点は多い。まずCloudFormationのテンプレートはネストすることができる。つまり、テンプレートからテンプレートを呼び出せる。これにより、テンプレートは小さなかたまりに分けられる。例えば、VPCを扱うネットワーク部、データを扱うデータストア部、Webやロードバランサー、NATなどを入れるフロントエンド部といった具合だ。このように切り分けることで使いまわしが容易になる。ネスト機能は後述する「ブルーグリーンデプロイメント」に重要な役割を果たすので、是非覚えていてほしい。

バックナンバー
クラウド活用パターン辞典〜Amazon Web Servicesを使い倒す!〜一覧へ
関連記事

Special

-PR-

AWSでの環境構築の自動化と開発環境の管理【第8回】本連載ではこれまで、AWS(Amazon Web Services)を使って実用的なシステムを構築するためのアーキテクチャーなどを中心に考察してきた。そして前回は、構築したシステムに対する認証について考えた。今回は、実際にシステムを構築し運用に携わるエンジニアの作業効率に関わる自動化や管理の仕組みについて考えていこう。

PAGE TOP