AWS CloudFormationは、システム管理者がAWSリソースのコレクション全体(構成、依存関係、リソース間の相互関係など)を1つのステートメントでセットアップおよび管理できるようにするサービスです。また、その上で実行されているアプリケーションを停止または再デプロイすることなく、既存のインフラストラクチャに変更を加えることもできます。
AWS Cloudformationを使用すると、インフラストラクチャをコードとして設定できます。これは基本的に、クラウドで機能し、ユーザーがコンピューティング、ストレージ、およびその他のリソースをプロビジョニングおよび管理するのに役立つコードエンジンとしてのインフラストラクチャです。 CloudFormationテンプレートは、AWSリソースを作成または更新する方法に関するディレクティブを含むJSONファイルです。 AWS CLI、boto3などのAWS SDK、またはAWSCloudFormationサービスを使用してテンプレートを作成できます。
CloudFormationには、次のような多くの利点があります。
- 使いやすさ:CloudFormationは、AWSリソースのすべての属性と関係を1か所で記述できるテンプレート形式を使用しています。
- 市場投入の俊敏性:CloudFormationを使用すると、AWSリソースをコードとしてビルドおよびデプロイできます。
- 高レベルの自動化:CloudFormationは、高レベルのコードを、AWSリソースの作成または更新に使用できる一連のシンプルなテンプレートに変換します。
AWSでのワークロードのデプロイを自動化することを検討している場合、CloudFormationを使用することがそれを行うための最良の方法の1つです。
この記事では、CloudFormationの簡単な紹介と、CloudFormationを使用してAWSリソースを自動化する方法を紹介します。このガイドでは、S3リソースを使用してデモンストレーションを行います。このチュートリアルの後、CloudFormationを使用して多数のAWSリソースを作成、更新、および削除できるようになります。独自のCloudFormationテンプレートの作成を開始する方法も学ぶことができます。
このチュートリアルに従うには、次の前提条件が必要です。
- AWS CLIは、バージョン1.6.1以降のバージョンでローカルマシンにインストールされ、デフォルトのリージョンで設定されています。同じバージョンをPython2.6または3以降にも構成する必要があります。
- AWSサービスの基本的な理解とAWSコンソールでの経験。
前提条件の準備ができたので、最初のスタックを構成して作成することから始めましょう。
1.お気に入りのブラウザを開きます。このGitHubリポジトリに移動し、3つのファイルをローカルハードディスクドライブにダウンロードします。
- createstack.json
- updatestack1.json
- updatestack2.json
2.次に、AWSコンソールに移動します ---> CloudFormation 。
3.次の画面が表示されます。 スタックの作成をクリックします --->新しいリソースを使用 。
4.次の画面が表示されます。 テンプレートの準備ができましたをクリックします --->テンプレートファイルをアップロード --->ファイルを選択 ----> cr eatestack.jsonを選択します 以前にダウンロードしたファイル--->次へ 。
新しいスタックを作成するときは、スタックのテンプレートを提供する必要があります。これは次の3つの方法で実行できます。
- テンプレートの準備ができました :テンプレートがすでに手元にある場合は、このオプションを選択してください。そうでない場合は、次のオプションに進みます。
- サンプルテンプレートを使用する :このオプションを使用すると、テンプレートの作成をすぐに開始できます。 AWSユーザーガイドには、CloudFormationテンプレートのいくつかの例が記載されています。
- CDesignerでテンプレートを作成する :AWS CloudFormation Designerは、スタックを作成するための最新の方法です。これは、Sharepointなどの他の一般的なツールと同様に、ドラッグアンドドロップインターフェイスを使用して、テンプレートの作成を支援します。
このデモでは、最初のオプションである「テンプレートの準備ができました」を使用します。これは、テンプレート(ディスクにダウンロードしたファイル)がすでに手元にあるためです。
createstack.jsonを開くことができます エディターでファイルを作成して確認します。 createstack.jsonに次の行が表示されます。 ファイル。
- 「リソース」:{はAWSCloudFormationが作成するセクションです。これは、作成するすべての物理リソースのグループです。
- "catpics":論理リソースであり、そのタイプはS3バケットです。
- "Type": "AWS ::S3 ::Bucket"は、AWSCloudFormationが作成する物理リソースです。
5.次の画面で、スタックの名前を入力します( htf )そして次へをクリックします 。すべてのスタックには、AWSリージョン内で一意の名前が必要です。これにより、スタックを区別できます。ここでは特殊文字を使用できません。文字、数字、アンダースコアのみを使用できます(スペースは使用できません)。 AWSは、簡単に識別できるように一意のスタックIDを自動的に生成します。
6.次の画面で、デフォルトのままにして、[次へ]をクリックします。
7.次の画面で、デフォルトのままにして、[スタックの作成]をクリックします 。
この時点で、AWS CloudFormationはテンプレートをロードし、スタックを作成します。 CloudFormationは、テンプレートのすべてのセクションを調べ、それに対応する物理リソースを作成します。場合によっては、AWS CloudFormationはテンプレートに対していくつかのチェックを行い、すべてが適切に配置されていることを確認します。何か問題が見つかった場合は、問題の内容と修正方法を説明するエラーメッセージが表示されます。
作成プロセスには、作成に約4〜5分かかります。以下に示すように、CloudFormationダッシュボードでスタックのステータスを確認することで、何が起こっているかを確認できます。 catpicsを見ることができます 左側の論理リソース、およびこれらの各リソースで、AWS CloudFormationがそれらのために作成している物理リソースを確認できます( CREATE_IN_PROGRESS 。
[リソース]タブに移動して、このスタック用に作成されている物理リソースを確認できます。この場合、それは catpicsという名前のS3バケットです。 物理リソースID of htf-catpics-1roqn54xwm3of、 以下に示すように。
8.次に、S3ダッシュボードに移動します。 S3ダッシュボードで、バケットに作成されているオブジェクトを確認できます。この場合、S3バケットのスタック名は htf-catpics-1roqn54xwm3ofです。 、以下に示すように。
バケットの名前が次のパターンに従っていることがわかります:スタック名( htf )-論理スタック名( catpics )-ランダムな文字列( 1roqn54xwm3of )。このパターンはあなたが知るために非常に重要です。テンプレートで物理リソースのIDを指定しない場合、AWSCloudFormationはこのパターンを使用してリソースの名前を作成します。これの利点は、同じテンプレートを使用して複数のスタックを作成できることです。 AWS CloudFormationは、それらに一意の名前を付けることを自動的に処理します!
S3のようなサービスの場合、一意の名前が非常に重要です。バケットにデータを保存するには、バケットの名前がグローバルに一意である必要があります。バケット名を同じにすることはできません。同じ名前でオブジェクトに名前を付けようとすると、オブジェクトをバケットにプッシュできなくなります。
これが重要である理由を理解することが重要です。 CloudFormationでは、テンプレートで物理リソースのIDに明示的に名前を付けないことをお勧めします。代わりに、AWSCloudFormationに自動的に作成させてください。これは、名前の競合を心配することなく、テンプレートを再利用して、異なるリソースで複数のスタックを作成できることを意味します。テンプレートは1回、10回、または100回使用でき、CloudFormationはそれに応じて名前の変更を処理します。
スタックの更新
AWS CloudFormationを使用して最初のスタックを作成したので、スタックを更新する方法を調べてみましょう。スタックを更新する方法は、本番環境での使用でも試験でも、理解するための非常に重要な概念です。おそらく、試験でテンプレートの何かを変更するように求められるか、スタックの何かを更新する必要があります。
このセクションでは、いくつかのテンプレートを変更し、それらの更新されたテンプレートを使用してスタックを更新し、リソースに加えられた変更を評価します。
一般的に、CloudFormationでスタックを更新する場合。スタックの作成に使用したテンプレートを使用して、新しいリソースを追加するか、既存のリソースを更新するか、既存のリソースを削除します。
1. updatestack1.jsonを開きます 以前にエディターでダウンロードしたファイルには、次のコードブロックが表示されます。このテンプレートをcreatestack.jsonと比較してみましょう 以前に使用したテンプレート。 dogpicsという名前の論理リソースが追加されることがわかります。 。さらに重要なことに、既存の catpicsである既存の論理リソースに変更が加えられていません。 。 catpicsリソースは変更または削除されていません。 ドッグピックである追加の論理リソースのみを追加します 。
2.CloudFormationダッシュボードに移動します。スタックを選択します( htf )そして更新をクリックします 。
3.次の画面で、[現在のテンプレートを置き換える]を選択します --->テンプレートファイルをアップロードします---> ファイルを選択--->updatestack1.jsonを選択します ファイル--->次へ 。
4.次の画面で、[次へ]をクリックします --->次へ --->更新 スタック、 以下に示すように。 CloudFormationに、行われる変更が表示されていることがわかります。この場合、dogpicsという名前の論理IDを追加しました。 CloudFormationには、実行されるアクションも表示されます(追加 )、および論理リソースタイプ(AWS ::S3 ::Bucket)。 交換 列が空白です。
スタックを作成するときと同じように、スタックページから更新イベントを確認できます。すべての更新はCloudFormationから行われています。この場合、追加の論理リソースID( dogpics )が渡されます。 。
更新プロセスが完了すると、以下に両方の catpicsがあることがわかります。 とdogpics スタック内のリソース。
S3ダッシュボードに移動すると、 htf-dogpics-4qesklu84ugqという名前の追加のdogpicsバケットが表示されます。 作成されました。同じパターンを使用したバケットの命名は、スタック名-論理スタック名-ランダム文字列に従っていることがわかります。
この時点では、リソースに新しい論理リソースを追加するだけです。これは非常にシンプルでリスクが低いです。次に、スタックからリソースを削除する方法を説明します。
dogpicsリソースをスタックから削除します。リソースを削除するとスタックが破損する可能性があるため、これは追加するよりもリスクが高くなります。まだ学習中なので、dogpicsリソースを削除して、何が起こるかを確認して練習しましょう。
5.CloudFormationダッシュボードに移動します。 htfを選択します スタックし、更新をクリックします --->現在のテンプレートを置き換える --->選択 ファイル --->今回はcreatestack.jsonを選択します もう一度ファイル--->次へ--->次へ--->次へ
6.次の画面で、[スタックの更新]をクリックします 。 チェンジセットプレビューの下 、アクションが表示されます 現在の列は次のとおりです:削除 。この場合、CloudFormationはドッグピックを削除します リソースと対応する物理リソース( htf-dogpics-4qesklu84ugq 。
S3ダッシュボードに移動すると、dogpicsバケットがS3ダッシュボードから削除されていることがわかります。
DELETE_COMPLETEになります Stackイベントのイベント。
論理リソースを削除すると、物事が削除される可能性があるため、少しリスクがありますが、そのリスクは、テンプレートから削除した論理リソース(dogpicsリソース)にのみ関連しています。これまでのところ、catpicsリソースなどの他の既存の論理リソースには変更を加えていません。したがって、catpicsの物理リソースはスタックの更新の影響を受けません。スタックを更新する別のオプションがあります。このオプションを使用すると、既存の論理リソースの構成を変更できます。
7. updatestack2.jsonを開きます 以前にエディターでダウンロードしたファイルには、次のコードブロックが表示されます。
updatestack2.jsonファイルは、2つの大きな違いを除いて、前に使用したcreatestack.jsonテンプレートと非常によく似ています。 2番目の論理リソースであるdogpicsを再度追加します。ただし、catpicsにも変更を加えました。
プロパティと呼ばれる構成のセクションを追加しました。このセクションでは、特定の論理リソースに追加のプロパティを定義できます。この場合、S3バケットを作成します。物理リソースのバケット名をcatsareawesomeとして明示的に設定します -ハウツーフォージ 。
8.CloudFormationダッシュボードに移動します。 htfを選択します スタックして、更新をクリックします ---> 現在のテンプレートを置き換える ---> 選択 ファイル --->今回は、 updatestack2.json を選択します ファイル--->
9.次の画面で、[スタックの更新]をクリックします 。 チェンジセットプレビューに注目してください パネルでは、この更新の効果を確認できます。
最初の変更はおなじみのようです。 ドッグピック用の論理リソースを追加します 、S3バケットになります。ただし、変更も表示されます アクション。そして、変更は実際にはCloudFormationスタックに対して実行できる最もリスクの高いことです。
その理由は、既存のリソースが配置されており、他の環境で使用されている可能性があるため、スタックの更新によって変更される可能性があるためです。したがって、既存の論理リソースを変更すると、使用するのが危険になる可能性があります。
この方法でスタックを更新すると、物理リソースが影響を受ける可能性が3つあります。最初の可能性は、サービスを中断することなくリソースが更新されることです。
2番目の可能性は、リソースが更新され、サービスがある程度の中断によって中断されていることです。たとえば、EC2インスタンスサイズを変更するためにスタックを更新する場合です。これを行うときは、EC2インスタンスを手動で再起動する必要があります。新しいAMIがリリースされ、ダウンタイムが発生する可能性があります。ただし、新しいAMIがリリースされると、サービスはすぐに利用できるようになります。
最後の可能性は、更新によって既存の物理リソース全体が削除され、新しいリソースに置き換えられることです(置き換え )。これは、CloudFormationスタックを更新するときに最も危険な可能性です。これを行うときは、本当に注意を払う必要があります。この種の交換が行われると、交換になります 列は真です 、下のスクリーンショットに示すように。
CloudFormation Stacksダッシュボードで、「要求された更新には新しい物理リソースの作成が必要です。したがって、新しい物理リソースを作成する必要があります」と表示されていることがわかります。そのため、CloudFormationは既存のリソースを削除し、新しいリソースを作成します。
S3ダッシュボードに移動すると、catpicsバケットがなくなり、新しい catsareawesomeが表示されます。 -ハウツーフォージ 、作成されました。 CloudFormationテンプレート内のリソースの物理名(catsareawesome-howtoforge)を明示的に指定していることに注意してください。リソース名にランダムな文字は適用されません。
このテンプレートを使用して別のCloudFormationスタックを作成すると、まったく同じ名前の別のバケットを作成しようとするため、失敗するという問題があります。また、AWSアカウントに同じ名前のバケットを2つ含めることはできません。まったく同じ名前で別のバケットを作成しようとすると、次のエラーが発生します。
CloudFormationスタックの削除
テンプレートを変更してスタックを更新したので、作業が完了したら必ずスタックを削除する必要があります。未使用のスタックを削除しない場合、CloudFormationスタックダッシュボードに無期限に残ります。手動でそこに移動して削除する必要があります。
CloudFormationダッシュボードからスタックを選択し、削除を選択します 。 CloudFormationがスタックを削除すると、そのスタック内のすべてのリソースも削除されます。 S3バケットやEC2インスタンスなどの1つのリソースを削除する方法はありません。このアクションは設計により行われます。
このガイドでは、CloudFormationスタックがどのように作成および変更されるかについて説明しました。テンプレートを変更する方法と、既存のスタックを更新する方法をいくつか見てきました。次に、スタックの更新に関連する可能性のいくつかを調べました。最後に、作業が終了した後にCloudFormationスタックを削除する方法について説明しました。
ご質問やご提案がございましたら、以下にコメントを残してください。読んでくれてありがとう!