みなさん。こんにちは。今日はIaCをテーマにお伝えいたします。

こんな方におすすめ

・IaCってなに?
・CloudFormationってなに?
・メリットわからないし。
・別に手作業でもいいじゃん。

こう思っている方にCloudFormationやってみてもいいかも!と思っていただければうれしいです。

IaCで運用しないリスク

アプリケーションはコードで管理するのにインフラストラクチャはそうしないのでしょうか。
なぜなら、インフラストラクチャの構築は、手作業でもできてしまうからです。
IaCを使わないリスクを考えてみましょう。

・資料通りに構築されたか保証できない(手作業で構築する = 操作ミス)→転記するときに記載ミスをする
・資料が最新か保証できない(実リソースを変更したのに、資料を変更し忘れる)
・開発 本番環境の一致を保証できない(2回手作業している)
・前任者から引継ぎを受けて、構成図などドキュメントが見つかったものの、構築後の設定変更が反映されておらず、各サービスを目視で確認する必要がある

あるべき姿に近づけよう
・資料にどう構築されるべきかが書かれている
・資料通りに構築されることが保証されている
・資料からは何回でも同じように構築できる

そんな理想を実現するのが「Infrastructure as Code」です。

Infrastructure as Codeとは

IaC (Infrastructure as Code) は、手動の作業ではなく、コードを使用してインフラストラクチャの管理とプロビジョニングを行うことを言います。
上述したような、インフラ構築をGUIによるクリックや入力、コマンドの実行など、人の手で行っていたやり方から、サーバー、オペレーティングシステム、ストレージ、およびその他のインフラストラクチャ・コンポーネントを自動的に管理しプロビジョニングします。

AWSにおけるInfrastructure as Codeの概要

AWS provides a DevOps-focused way of creating and maintaining infrastructure. Similar to the way software developers write application code, AWS provides services that enable the creation, deployment and maintenance of infrastructure in a programmatic, descriptive, and declarative way. These services provide rigor, clarity, and reliability. The AWS services discussed in this paper are core to a DevOps methodology and form the underpinnings of numerous higher-level AWS DevOps principles and practices.

https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html

AWSでは、DevOpsに焦点を当てたインフラストラクチャの作成と保守の方法を提供します。ソフトウェア開発者がアプリケーションコードを記述する方法と同様に、AWS はプログラム的、記述的、宣言的な方法でインフラストラクチャの作成、デプロイ、メンテナンスを可能にするサービスを提供しています。このサービスによりコードの厳密さ、明確さ、信頼性が実現できます。
IacのAWS サービスは、DevOpsの中核であり、高い水準でAWS DevOps 原則と実践の基礎をなすものです。

また、AWSでのIaCサービスは以下が提供されています。
・AWS CloudFormation
・AWS Cloud Development Kit (AWS CDK)
・AWS Cloud Development Kit for Kubernetes
・AWS Cloud Development Kit for Terraform
・AWS Cloud Control API

AWS CloudFormationの概要について

AWS CloudFormationを使っている方は多くいると思います。
ここでは使われていることが多いサービスCloudFormationにフォーカスを当てて、概要を説明します。
CloudFormation は、開発者が秩序正しく予測可能な方法で AWS リソースを作成できるようにするサービスです。
JSON または YAML 形式を使用してテキスト ファイルに書き込んでいきます。テンプレートには、作成および管理されるリソースの種類に応じた特定の構文と構造が決まっています。
AWS Cloud9 などのコードエディターを使用してリソースを JSON または YAMLでファイルを作成し、それをバージョン管理システムにチェックインすると、CloudFormation が指定されたサービスを安全かつ誰が何回やっても再現性のある方法で構築できます。

CloudFormation テンプレートは、スタックとして AWS 環境にデプロイされます。スタックは、AWS マネジメントコンソール、AWS コマンドラインインターフェイス、または AWS CloudFormation APIで管理できます。
スタック内で実行中のリソースに変更を加える必要がある場合は、スタックを更新します。リソースに変更を加える前に、変更の概要である変更セットを生成できます。変更セットを使用すると、変更を実装する前に、実行中のリソース、特に重要なリソースに変更がどのような影響を与えるかを確認できます。

まとめ

今日は、IaCって何?という方向けに概要をお伝えさせていただきました。

改めて、おさらいです。IaCを利用したデプロイでは、コードを使用し、インフラストラクチャの仕様を定義する設定ファイル (通常は JSON または YAML ファイル) を作成することで、IT インフラストラクチャリソースのプロビジョニングと管理を行うことができます。ぜひ、この記事を読んで、IaC始めようって方がいらっしゃれば幸いです。