MEGAZONEブログ

Building infrastructure as code with AWS CloudFormation
AWS CloudFormationでインフラをコードとして構築する
Pulisher : Cloud Technology Center キム・ビョンジュ
Description : CloudFormationのスタック、テンプレート、変更セットなど基本的なことを紹介します
はじめに
IaCは最近本当に人気のあるテーマです。 今回のセッションでは、その中でもAWSの代表的なNative IaCサービスであり、AWS WorkShopでよく見かける大切な友達です。しかし、CloudformationをProductionで使ってみた経験やノウハウを共有してもらいたいと思い、このセッションを申し込みました。
セッションの概要紹介
このセッションでは基本的なCloudFormationの使用パターンとそれをテストする方法、そして追加的な新機能まで公開したセッションでした。まだコンソールでは公開されていませんが、IaC Generatorを使って既存のインフラをyamlファイルに変えてくれる(!)非常に興味深いデモもありました。

アジェンダは以下の通り、IaCの紹介、Cloudformationのessesntials、そして皆さんからの質問の順にさせていただきます。

まず、IaCとは何でしょうか?
ほとんどの方がご存知のことと思いますので、簡単に触れておきます。
IaCとは、ユーザーが設定した現在の状態やリソースの定義をコードとして記録することを意味します。
しかし、多くの人はコンソールでインフラストラクチャを構築するのが好きです。コンソールでインフラストラクチャを展開する経験はそれほど悪くありませんし、私もいつも初めてのお客様には、コンソールでサービスに慣れることを望んでいます。だから、IaCを使う理由は、色んな人がインフラをデプロイして管理して使う時、本当にメリットがあると思います。

そして、常にインフラを分離して構築してください、開発とテスト環境を必ず分離して構築してください、このように構築するのがbest practiceです。

顧客はAWS IaCをどのように利用しているのでしょうか? 顧客の多様な選択肢を満たすために、インフラストラクチャを説明するために使用することもあります。 また、インフラストラクチャを自動的に展開し、スケーリングを容易にするために使用します。 また、コンプライアンス、ガバナンス、セキュリティ、自動化の要件を簡単に確認することができます。 そして、AWSとthird-party resourcesを一緒に管理することができます。

IaCの始まりはManualから(wiki、playbooks)のような手動の”ボブはすべてを知っている”から始まりました。から始まりました。 本当に恐ろしいことに、ボブはすべてを知っていますが、ボブがいなければチームは全て止まるしかありません。
なぜですか?ボブが知っている内容と違うと、後で問題が発生する可能性があるからです。 その後、bash scriptを使って管理していた時代からCloudformation、GoFormationを経由してCDK、Pulumiの時代に移りました。 CDKが一番最近出たからといって必ずしも良いというわけではありません。 皆さんのチームが慣れ親しんだ環境に合わせて使ってください。

CloudFormation template には上の写真のような様々なコンポーネントが存在します。

パラメータはコードでいうところの変数のような情報です。リストでパラメータを制限することもできますし、regexを使って入力するパラメータに制限をかけることもできます。

そして、Ruleを通じてその条件を満たしているかどうかを確認することもできます。

そして、コードのIFのように特定の値と同じ値を探して使うこともできます。

そして最も重要なResourceコンポーネントです。様々なコンポーネントが存在します。

そしてCloudformationの中にbash scriptやpython scriptも一緒に管理が可能です。ここにあるpowershellスクリプトはDBをインストールする関連内容が書いてあります。

Cloudformationコードを作成するbest practicesについて紹介します。 あまりハードコーディングしないでください、secertsはなるべくSystem Manager Parameter StoreやSecrets Managerを使って保管してください、そしてマッピングをうまく活用してください。 あまり多くの条件を入れないでください。読みやすさが悪くなる可能性があります。

そして、CloudFormationでは、変更を確認してキャンセルしたり、事前に確認したり、追加変更を適用することができます。

CloudFormationをテストする様々なツールもあります。代表的なものはCfn-lintであり、AWS内部で自主的に作って公開したCloudFormation Guardもあり、TaskCatもあります。一般的にはCfn-lintをよく使います。一度使ってみてください、本当にコードが書きやすいかもしれません。

私たちは先週、2つの機能を新たに公開しました。 そのうちの一つ、IaC Generatorを新たに紹介します。ユーザは今、簡単に配布されたインフラストラクチャをCloudFormation stackで作成することができます(本当に強力な機能ですが…、残念ながらソウルリージョンでは見れませんでした。)

そして最近追加されたSync from Gitを使ってS3,ファイルをアップロードするのではなく、GitからコードをSyncして実行するオプションも追加されました(!) これで簡単にgitとCloudformationを連携することができます。
セッションを終えて
Cloudformationも想像以上に進化しています。もちろん、一部の顧客はTerraformやCDKを使ってインフラをデプロイすることもありますが、だからといってCloud Formationが遅れているオプションではないということは覚えておいてください。Cloud Formationもチームの状況によって十分に活用できるIaCソリューションであり、今回公開されたGitとの統合はその意見に重きを置いているようです。
この記事の読者はこんな記事も読んでいます
-
Compute re:Invent 2023Apple on AWS: Managing dev environments on Amazon EC2 Mac instances(Apple on AWS:Amazon EC2 Macインスタンスで開発環境を管理する)
-
Compute re:Invent 2023Optimizing for cost and performance with AWS App Runner(AWS App Runnerによるコストとパフォーマンスの最適化)
-
Partner Enablement re:Invent 2023Migration and modernization: Become your customer’s strategic partner