2023年8月3日

AWSのIaCについて

目次

Contents

 

はじめに

近年ではAWSを利用してインフラ環境を構築・運用する機会が多いかと思いますが、
作成するリソースの数や要件が複雑な場合はコンソールでの操作が煩雑になり、お困りの方もいらっしゃるのではないでしょうか。
今回はそのような課題を解消する手段の1つとしてAWSのIaCについてご紹介致します。
IaCとは「Infrastructure as Code」の略称で、システムインフラの構築や運用についてコードを用いて自動化する手法のことです。
今回はAWSで利用できるIaC関連サービスをご紹介致します。

IaCを利用することのメリット

実際にIaCを利用した感想として、作業工数を削減しながらも品質を担保したインフラ環境を構築出来るという部分が一番大きなメリットだと感じています。
上記も含めて私が感じたメリットを簡単にまとめました。
(メリット)
1. 品質を担保したインフラ環境を構築することが可能
2. 自動化することで作業工数を削減
3. 汎用的な環境構成はコードをテンプレート化して効率UP
4. 構築・設定変更時のヒューマンエラーや設定漏れを防止

●AWSで利用できるIaC関連サービスとその比較

IaCを実現するためのツールは多数あり、オープンソースのツールも存在しています。
今回はAWSにて利用できるIaC関連サービスについてご説明します。

・AWS CloudFormation
AWS CloudFormationはテンプレートを作成し、スタックという単位でAWSリソースの構築を自動化するサービスです。
テンプレートはYAML形式で作成することが可能です。
YAMLは理解しやすい文法になっていますので、プログラミング言語の経験が少ない場合でも取り組みやすいかと思います。
AWS CloudFormationもAWS CDKと同様で、使用する際に料金は発生しません。
ですが、テンプレートにて作成したAWSリソースには従量課金での利用料金が発生しますので注意が必要です。
参考URL)AWS CloudFormation:https://aws.amazon.com/jp/cloudformation/

・AWS Cloud Development Kit (CDK)
AWS Cloud Development Kit (CDK)はPythonなどの一般的なプログラミング言語を使用してIaCを実現するサービスです。
TypeScript、Python、JavaScript、Java、C#といったプログラミング言語をサポートしていますので、該当する言語での開発経験がある場合はおすすめです。
AWS CDKの費用についてですが、使用する際には料金が発生しません。
しかし、AWS CDKを使用して作成したAWSリソース(EC2インスタンスやロードバランサー)には、従量課金での利用料金が発生しますので注意が必要です。
参考URL)AWS Cloud Development Kit (CDK):https://aws.amazon.com/jp/cdk/

CloudFormationについて

ある企業のシステム開発のプロジェクトにおいて、IaCを用いてAWS上へインフラ環境を構築することになりました。
しかし、プログラム開発経験のあるメンバーが少なかったため特定のプログラム言語ではなくメンバーが理解しやすい方法にてIaCを実現する必要がありました。
そこで、AWS上のサービスであり、特定のプログラム言語に依存しないYAML形式でテンプレートを記載することが出来るCloudFormationを使用することとなりました。

それでは、CloudFormationについて詳しくご紹介させていただきます。

CloudFormationを使用してAWSリソースを構築するためには、初めにテンプレートを作成する必要があります。
テンプレートはAWSに用意してあるサンプルテンプレートを使用することもできますし、YAML形式やJSON形式にて作成することも出来ます。
作成したテンプレートはCloudFormationに読み込ませます。
テンプレートはローカル環境からAWSマネージメントコンソールに直接アップロードすることも可能ですが、AWS CLIを使用してS3バケットにオブジェクトとして配置することも可能です。

CloudFormationにテンプレートを読み込ませて実行すると、「スタック」という単位でAWSリソースが作成されます。

CloudFormationではテンプレートさえ作成出来てしまえば比較的簡単にAWSリソースを作成することが出来ます。
AWSに用意してあるサンプルテンプレートを使用すれば、15分程度でCloudFormationでのIaCを検証することが可能です。

CloudFormationを利用する上での注意点

筆者にてCloudFormationでのIaCを検証した際に注意する点がありましたのでご紹介します。
参考にしていただければ幸いです。

・1つのテンプレートが肥大化してしまう。
1つのテンプレートにて様々なAWSリソースを作成しようとした際に、テンプレートが肥大化してしまいメンテナンス性や可読性が低下してしまいました。
肥大化を防ぐためにはテンプレートの分割について考慮しておく必要があります。
CloudFormationには「クロススタック参照」や「ネストスタック」という仕組みがありますので、積極的に活用していただければと思います。

・スタック時には変更セットを作成する。
検証環境でのスタック更新時にAWSリソースの意図しない置き換えが発生してしまいました。
置き換えとは既存のAWSリソースが削除され、別のAWSリソースが新規で起動してしまう事象のことです。
この時は置き換えにより、既存のEC2インスタンスが削除されたためインスタンス内部に保管していたログファイルやデータが喪失するという事故が発生してしまいました。
このような事故を防ぐためにはスタック更新時に変更セットを作成する必要があります。
変更セットとはスタックの更新前にAWSリソースの削除や更新、置き換えといった影響を確認出来る機能です。
変更セットを作成しただけではスタックの更新は実行されませんので、意図した通りの更新内容になっていることを確認した上でスタックの更新を実行出来ます。
スタック更新時に変更セットを作成することはCloudFormationのベストプラクティスにもなっていますので、ぜひ活用していただければと思います。

・テンプレートを作成する際にはエディタやプラグインを積極的に使用する。
最初は通常のテキストエディタにてテンプレートを作成していましたが、誤字脱字を見つけられなかったり文法チェックが出来なかったりと作成時の効率が上がりませんでした。
このような事象を防ぎ、効率を上げるためには使用するエディタやプラグインを意識して活用する必要があります。
筆者も使用していますが、エディタは「Visual Studio Code」がおすすめです。
Visual Studio Codeはプラグインも豊富で、中でも文法の補完をしてくれる「CloudFormation」とコードの誤りを指摘してくれる「CloudFormation Linter」が有名です。
自分にとって使用しやすいエディタやプラグインを見つけていただき、ぜひ活用していただければと思います。

おわりに

AWSのIaCについて事例を交えながらご紹介致しましたが、いかがでしたでしょうか?
弊社ではAWS CloudFormationやAWS CDKを使用したシステム開発や運用保守の実績がございます。
ITインフラ・AWSの構築運用をご検討されておられましたら、お気軽にご相談いただけますと幸いです。

記事 : Y.M

「再春館システム AWS導入・運用サービス」はこちら