CloudFormationは、 アプリケーションのウェブ層 a 高性能コンピューティングクラスター または などのAWSリソーススタックのプログラムによる作成を可能にする強力なAWS製品です。アプリケーションスタック全体、 単一のAPI呼び出し。それは非常に強力です。特に Chef、Puppet、 または cloud-init。 と組み合わせた場合、それを使用することは、AWSの優れたプラクティスと見なされます。副。
生産の例を見てみましょう:在庫 mongodbクラスターテンプレート は機能しません。理由は特にわかりません。ほぼいつものように、それはシンプルなものだと確信しています。私の問題は、何が悪いのかわからないということではありません。スタックに障害が発生するまでに20〜30分かかり、それからリソースを適切に削除すると仮定すると、さらに3〜4分かかります。
私は何が欠けていますか? --disable-rollback
フラグについて知っており、酸素のように使用します。出口メッセージをcfn-signal
でラップし、沈む船からバラストのように投げることをずっと前に学びました。どうすればテンプレートのデバッグプロセスを高速化できますか、それとも作成してから30分後に間違いに気付いて永遠に立ち往生していますか?
使用 - aws cloudformation validate-template
AWS CLIツールのコマンド。テンプレートが有効なJSONまたはYAMLであるかどうかのみ検証し、キーと値が正しいかどうかは検証しません(たとえば、キーのタイプミスをチェックしません)
1年後の別のオプションは、これらのテンプレートを troposphere などのサードパーティライブラリに抽象化することです。そのライブラリはJSONペイロードを構築し、その過程で多くの検証を行います。これにより、「わざわざ1000行のJSONファイルを管理するのは悲しいことです」問題も解決します。
どうすればテンプレートのデバッグプロセスを高速化できますか、それとも作成してから30分後に間違いに気付いて永遠に立ち往生していますか?
複雑なCloudFormationテンプレート開発の反復速度の改善に特に焦点を当てたベストプラクティスの提案を次に示します。
AWSは既にこれらの概要を独自の Best Practices ドキュメントで説明しているので、繰り返しません。
このステップのポイントは、スタックの作成/更新を実際に実行する前に、明白な構文または論理エラーをキャッチすることです。
複雑なスタックで個々のCloudFormationリソースを使用する前に、より小さなスタンドアロンスタックで動作をテストして、使用量の制限や一般的な起動/ティアダウン時間を含む、リソースの作成/更新/削除動作の完全な範囲を十分に理解してください最初。
AWS::CloudFront::Distribution
リソースは、作成/更新/削除に30〜60分かかりますが、 AWS::EC2::SecurityGroup
数秒で更新します。スタックの作成/更新を実行するとき、単一のリソースで障害が発生すると、スタックはリソースの変更セット全体をロールバックし、他の正常に作成されたリソースを不必要に破壊し、長い複雑なスタックを構築するときに非常に長い時間がかかる可能性があります関連リソースの依存グラフ。
これに対する解決策は、一度に1つ(または数個)のリソースを追加して、より小さな更新バッチでスタックを段階的に構築することです。このように、リソースの作成/更新で障害が発生した場合、ロールバックによってスタックのリソース全体が破壊されることはなく、最新の更新でリソースのセットのみが変更されます。
作成/更新の実行中にスタックのイベントを表示して、 スタック更新の進行状況を監視する を確認してください。これは、個々のリソースの問題をさらにデバッグするための出発点になります。
AWS Toolkit for Eclipse に含まれているAWS CloudFormationテンプレートエディターを見ましたか?構文の強調表示、ステートメントの完成、AWS CloudFormationへのデプロイがあります。
パーティーに遅れましたが、エディターの構成と学習に少し時間を費やす価値があることも付け加えるかもしれません。私はそれが答えとして笑いのように基本的に聞こえますが、試してみてください。
私の場合、vimを使用すると、json構文プラグインのインストールに少し時間をかけるとパフォーマンスが向上し、(最終的に)折りたたみ手法を理解して大きなCFファイルを簡単にナビゲートできました。私は現在、タイプミス(コンマなど)を提案しており、色の強調表示により多くの時間を節約し、明確な視覚的手がかりを与えています。
これは構文エラーの軽減に役立つ場合がありますが、テンプレート内の論理エラーは他のツールで修正する方が適切です。いつかCFで「プレビュー」モードが利用できることを願っています。
JetBrains IDEの場合(IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio)、 AWS CloudFormation プラグインJSONおよびYAML CFNテンプレートの詳細なチェックをサポートします
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/ のようなツールまたは実際のバージョン管理システムを使用して、誤って変更しないようにしてくださいあなたのスクリプトを壊すかもしれない何か。
AWS CLIに加えて aws cloudformation validate-template
コマンドノードベースの cfn-check コマンドがあり、より詳細な検証を行います。
この12月にCloudformationに追加された最近の新機能は、 追加のパラメータータイプ の追加です。これらの新しいタイプにより、テンプレートでより強力なデータチェックを実行でき、リソースおよびネストされたCloudformationスタックを作成するときに「フェイルファースト」することもできます。また、新しい ConstraintDescription attribute を使用して無効な値が渡された場合に、人間が読めるより優れたカスタムエラーメッセージを提供することもできます。
新しいタイプは、さまざまなVPCリソースを扱うときに特に役立ちます。テンプレートのパラメーターが正しいタイプであり、リストに対して単一の値を期待していることを明示することができます。
例えば:
"Parameters" : {
"SingleGroup": { "Type": "AWS::EC2::SecurityGroup::Id", ...},
"GroupList": {"Type": "List<AWS::EC2::SecurityGroup::Id>", ...}
}
AWS CloudFormationリンターcfn-python-lint
は、aws cloudformation validate-template
を超える追加の静的分析を提供します。
https://pypi.org/project/cloudformation-validator/ でcloudformationバリデーターをチェックアウトしてください
これにより、スキーマが検証され、ルールのリストが再度検証され、カスタムルールが許可されます。また、展開ツールと簡単に統合することもできます。
また、AmazonからCloudFormation Designerを利用することもできます: https://console.aws.Amazon.com/cloudformation/designer/home?region=us-east-1
テンプレート(JSON)を[テンプレート]ペインに貼り付け、チェックマークをクリックしてテンプレートを検証します。エラーは[エラー]ペインに表示されます。
お役に立てれば。