web-dev-qa-db-ja.com

CloudFormationテンプレートを迅速かつ効果的にデバッグするにはどうすればよいですか?

CloudFormationは、 アプリケーションのウェブ層 a 高性能コンピューティングクラスター または などのAWSリソーススタックのプログラムによる作成を可能にする強力なAWS製品です。アプリケーションスタック全体、 単一のAPI呼び出し。それは非常に強力です。特に Chef、Puppet、 または cloud-init。 と組み合わせた場合、それを使用することは、AWSの優れたプラクティスと見なされます。副。

生産の例を見てみましょう:在庫 mongodbクラスターテンプレート は機能しません。理由は特にわかりません。ほぼいつものように、それはシンプルなものだと確信しています。私の問題は、何が悪いのかわからないということではありません。スタックに障害が発生するまでに20〜30分かかり、それからリソースを適切に削除すると仮定すると、さらに3〜4分かかります。

私は何が欠けていますか? --disable-rollbackフラグについて知っており、酸素のように使用します。出口メッセージをcfn-signalでラップし、沈む船からバラストのように投げることをずっと前に学びました。どうすればテンプレートのデバッグプロセスを高速化できますか、それとも作成してから30分後に間違いに気付いて永遠に立ち往生していますか?

68
Christopher

使用 - aws cloudformation validate-template AWS CLIツールのコマンド。テンプレートが有効なJSONまたはYAMLであるかどうかのみ検証し、キーと値が正しいかどうかは検証しません(たとえば、キーのタイプミスをチェックしません)

38
Luciano Issoe

1年後の別のオプションは、これらのテンプレートを troposphere などのサードパーティライブラリに抽象化することです。そのライブラリはJSONペイロードを構築し、その過程で多くの検証を行います。これにより、「わざわざ1000行のJSONファイルを管理するのは悲しいことです」問題も解決します。

21
Christopher

どうすればテンプレートのデバッグプロセスを高速化できますか、それとも作成してから30分後に間違いに気付いて永遠に立ち往生していますか?

複雑なCloudFormationテンプレート開発の反復速度の改善に特に焦点を当てたベストプラクティスの提案を次に示します。

CloudFormationツールを使用してテンプレートを検証し、更新をスタックする

AWSは既にこれらの概要を独自の Best Practices ドキュメントで説明しているので、繰り返しません。

このステップのポイントは、スタックの作成/更新を実際に実行する前に、明白な構文または論理エラーをキャッチすることです。

リソースを分離してテストする

複雑なスタックで個々のCloudFormationリソースを使用する前に、より小さなスタンドアロンスタックで動作をテストして、使用量の制限や一般的な起動/ティアダウン時間を含む、リソースの作成/更新/削除動作の完全な範囲を十分に理解してください最初。

  • サードパーティのカスタムリソースを開発または使用している場合は、言語プラットフォームに適したライブラリを使用して単体テストを記述し、アプリケーションロジックがすべてのユースケースで期待どおりに動作することを確認します。
  • 個々のリソースの作成/更新/削除にかかる時間は、基になるAPI呼び出しの動作に応じて、リソースタイプ間で大きく異なる可能性があることに注意してください。たとえば、複雑な AWS::CloudFront::Distribution リソースは、作成/更新/削除に30〜60分かかりますが、 AWS::EC2::SecurityGroup 数秒で更新します。
  • 個々のリソースには、実装にバグ/問題/制限がある場合があります。これは、はるかに大きなスタック内ではなく、単独でテストした場合のデバッグと回避策の開発がはるかに簡単です。 AWSサービスの制限 個々のAWSアカウント設定に応じて、または サービスのリージョン可用性 スタックを作成するリージョンに応じてなどの制限に留意してください。

少しずつ複雑なスタックを構築する

スタックの作成/更新を実行するとき、単一のリソースで障害が発生すると、スタックはリソースの変更セット全体をロールバックし、他の正常に作成されたリソースを不必要に破壊し、長い複雑なスタックを構築するときに非常に長い時間がかかる可能性があります関連リソースの依存グラフ。

これに対する解決策は、一度に1つ(または数個)のリソースを追加して、より小さな更新バッチでスタックを段階的に構築することです。このように、リソースの作成/更新で障害が発生した場合、ロールバックによってスタックのリソース全体が破壊されることはなく、最新の更新でリソースのセットのみが変更されます。

スタック更新の進行状況を監視する

作成/更新の実行中にスタックのイベントを表示して、 スタック更新の進行状況を監視する を確認してください。これは、個々のリソースの問題をさらにデバッグするための出発点になります。

9
wjordan

AWS Toolkit for Eclipse に含まれているAWS CloudFormationテンプレートエディターを見ましたか?構文の強調表示、ステートメントの完成、AWS CloudFormationへのデプロイがあります。

9
Wade Matveyenko

パーティーに遅れましたが、エディターの構成と学習に少し時間を費やす価値があることも付け加えるかもしれません。私はそれが答えとして笑いのように基本的に聞こえますが、試してみてください。

私の場合、vimを使用すると、json構文プラグインのインストールに少し時間をかけるとパフォーマンスが向上し、(最終的に)折りたたみ手法を理解して大きなCFファイルを簡単にナビゲートできました。私は現在、タイプミス(コンマなど)を提案しており、色の強調表示により多くの時間を節約し、明確な視覚的手がかりを与えています。

これは構文エラーの軽減に役立つ場合がありますが、テンプレート内の論理エラーは他のツールで修正する方が適切です。いつかCFで「プレビュー」モードが利用できることを願っています。

5
Aitch

JetBrains IDEの場合(IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio)、 AWS CloudFormation プラグインJSONおよびYAML CFNテンプレートの詳細なチェックをサポートします

4
Jason

EC2マシンを扱っている場合は、EC2マシンにログインし、boot.logファイル(RHEL6/Centosの/var/log/boot.log)を末尾に追加することをお勧めします。このファイルは、シェルのすべてのアクティビティ(インストール、ファイルのダウンロード、ファイルのコピーなどのアクティビティ)で更新されます。

また、 http://www.jsoneditoronline.org/ のようなエディターを使用して、JSONのTREE表現を取得します。これは、JSON要素の順序を確認するのに役立ちます。

ファイルを更新するときは、常に http://www.git-tower.com/blog/diff-tools-mac/ のようなツールまたは実際のバージョン管理システムを使用して、誤って変更しないようにしてくださいあなたのスクリプトを壊すかもしれない何か。

2
ChaitanyaBhatt

AWS CLIに加えて aws cloudformation validate-template コマンドノードベースの cfn-check コマンドがあり、より詳細な検証を行います。

2
Jason

この12月にCloudformationに追加された最近の新機能は、 追加のパラメータータイプ の追加です。これらの新しいタイプにより、テンプレートでより強力なデータチェックを実行でき、リソースおよびネストされたCloudformationスタックを作成するときに「フェイルファースト」することもできます。また、新しい ConstraintDescription attribute を使用して無効な値が渡された場合に、人間が読めるより優れたカスタムエラーメッセージを提供することもできます。

新しいタイプは、さまざまなVPCリソースを扱うときに特に役立ちます。テンプレートのパラメーターが正しいタイプであり、リストに対して単一の値を期待していることを明示することができます。

例えば:

"Parameters" : {
  "SingleGroup": { "Type": "AWS::EC2::SecurityGroup::Id", ...},
  "GroupList": {"Type": "List<AWS::EC2::SecurityGroup::Id>", ...}
}
1
Mikelax

AWS CloudFormationリンターcfn-python-lintは、aws cloudformation validate-templateを超える追加の静的分析を提供します。

https://github.com/aws-cloudformation/cfn-python-lint/

https://aws.Amazon.com/blogs/mt/git-pre-commit-validation-of-aws-cloudformation-templates-with-cfn-lint/

1
Pat Myron

https://pypi.org/project/cloudformation-validator/ でcloudformationバリデーターをチェックアウトしてください

これにより、スキーマが検証され、ルールのリストが再度検証され、カスタムルールが許可されます。また、展開ツールと簡単に統合することもできます。

0
WillRubel

また、AmazonからCloudFormation Designerを利用することもできます: https://console.aws.Amazon.com/cloudformation/designer/home?region=us-east-1

テンプレート(JSON)を[テンプレート]ペインに貼り付け、チェックマークをクリックしてテンプレートを検証します。エラーは[エラー]ペインに表示されます。

お役に立てれば。

0
VictorPro