AWS CloudFormation 言語サーバー - AWS CloudFormation

AWS CloudFormation 言語サーバー

AWS CloudFormation 言語サーバーは、Infrastructure as Code (IaC) の作成と AWS リソースのデプロイを安全かつ確実に高速化する機能を提供します。言語サーバープロトコル (LSP) に従って、ホバー、自動補完、静的検証による診断、定義およびコードアクションの参照に関するドキュメントを提供します。これらの従来の言語サーバー機能に加えて、サーバーは CloudFormation を介して AWS リソースを探索およびデプロイするためのオンライン機能を追加しています。これには、変更セットを使用してテンプレートを検証してデプロイする機能、スタック差分、イベント、リソース、および出力を表示する機能、タイプ別にスタックを一覧表示してリソースを参照する機能、ライブリソースの状態を CloudFormation テンプレートに直接挿入する機能などが含まれます。

AWS CloudFormation 言語サーバーと統合している IDE

AWS は、次の IDE の AWS Toolkit を介して CloudFormation 言語サーバーとの既成統合を提供します。

次の IDE も CloudFormation 言語サーバーをサポートします。

  • Kiro

  • カーソル

  • ほとんどの VS Code フォークとディストリビューション

CloudFormation 言語サーバーは Language Server Protocol (LSP) に準拠しているため、他の統合も設定できます。言語サーバーを他のエディタと統合する手順については、インストールガイドを参照してください。

開始方法

前提条件

開始する前に、以下を確認してください。

  • サポートされている IDE をサポートされているオペレーティングシステム (macOS、Windows、または Linux) でを使用している。

  • 目的の IDE 用の AWS Toolkit の最新バージョンをインストールしている (最新バージョンにアップグレードしている)。

AWS CloudFormation 言語サーバーの一部の機能には、アクティブな AWS アカウント と設定済みの認証情報が必要です。有効な認証情報を使用して、AWS Toolkit を通じて AWS アカウント にサインインする必要があります。

ステップ 1: AWS Toolkit をインストールまたはアップグレードする

IDE の拡張機能またはプラグインマネージャーから最新バージョンの AWS Toolkit のインストールまたは最新バージョンへの更新を行い、IDE を再起動します。

インストール後、AWS Toolkit は自動的に CloudFormation IDE のサポートを有効にします。AWS CloudFormation 言語サーバーともに AWS Toolkit を初めてインストールまたはアップグレードすると、匿名の使用状況データを収集するために AWS のアクセス許可を付与するよう求められます。このデータは、AWS が CloudFormation 言語サーバーを改善し、オーサリングエクスペリエンスを向上させるのに役立ちます。機密情報は収集されず、AWS はテンプレートコンテンツ、リソース設定、または識別可能な顧客データを記録したり保存したりしません。IDE 設定からテレメトリ設定は、いつでも変更できます。変更を有効にするには、IDE を再起動します。収集された使用状況データは、機能インタラクションとパフォーマンスメトリクスのみに焦点を当てています。これらのインサイトは、AWS が検証の迅速化、オートコンプリートの強化、エラー診断の改良など、改善点を特定して優先順位を付けるのに役立ちます。

ステップ 2: AWS Toolkit で CloudFormation にアクセスする

AWS Toolkit をインストールした後、IDE で CloudFormation パネルを開きます。VS Code で、アクティビティバーから AWS Toolkit パネルを開き、[CLOUDFORMATION] を選択します。JetBrains IDE で、サイドバーから AWS Toolkit ツールウィンドウを開き、[CloudFormation] タブを選択します。

CloudFormation パネルには、以下のセクションが含まれています。

  • [リージョン]: 現在の AWS リージョン を表示します。VS Code では、リージョン名を選択するか、コマンドパレットから [AWS CloudFormation: Select Region] コマンドを使用して変更できます。JetBrains IDE では、リージョンは AWS Toolkit 接続設定を使用して設定されます。

  • [スタック]: アカウントの CloudFormation スタックのページ分割されたリストを表示します。スタックを展開して、そのスタックに関連付けられた変更セットを一覧表示する [Change Sets] ノードを表示します。[View Stack Detail] アクションを使用して、スタックの概要、イベント、出力、リソースが表示されるスタックの詳細ビューを開きます。

  • [Resources]: リソースタイプを追加すると、パネルにアカウントのそのタイプの AWS リソースが表示されます。テンプレートを表示、更新、コピー、またはテンプレートにインポートできます。

JetBrains IDE では、ツリーの上にあるツールバーから、[Validate and Deploy][Rerun Validate and Deploy]Add Resource Type][Refresh] などの一般的なアクションにすばやくアクセスできます。アクションには、ツリーノードの右クリックコンテキストメニューからもアクセスできます。

ステップ 3: テンプレートを検証、テスト、および改善する

CloudFormation テンプレートを作成すると、IDE はインテリジェントオーサリング支援を提供し、正確で準拠したインフラストラクチャをより迅速に作成できるようにします。CloudFormation 言語サーバーは、バックグラウンドで実行され、次のオーサリング機能を提供します。

  • コード補完: CloudFormation スキーマに基づいてリソースタイプ、パラメータ、およびプロパティを提案します。

  • 既存の AWS リソースの追加: AWS アカウント からテンプレートに既存のリソースをインポートできます。IDE は、AWS クラウドコントロール API (CCAPI) を使用してリソースのライブ設定とプロパティを取得し、テンプレート内の既存のインフラストラクチャのクローンを作成または再利用するのを支援します。

  • パラメータに抽出する: カーソルがテンプレートのリテラル値 (t2.micro などの文字列) にある場合、IDE は、値を Parameters セクションに抽出してリテラルを新しいパラメータへの !Ref でリテラルを置き換えるリファクタリングアクションを提供します。同じリテラル値が複数の場所に表示されている場合は、すべてのインスタンスを一度に抽出することができます。

リソースをテンプレートに追加するには

  • リソースタイプを追加する: AWS Toolkit CloudFormation パネルの [リソース] で、参照するリソースタイプを追加します。VS Code では、[Add +] アイコンをクリックするか、コマンドパレットから [AWS CloudFormation: Add Resource Types] コマンドを使用します。JetBrains では、ツールバーの [Add Resource Type] ボタンをクリックするか、[Resources] ノードを右クリックします。

  • リソースタイプを検索する: 検索ダイアログで、追加する AWS リソースタイプを入力します。例:

    • AWS::S3::Bucket

    • AWS::Lambda::Function

  • リソースを参照する: [リソース] セクションには、アカウントで検出された AWS リソースのページ分割されたリストが表示されます。多くのリソースがある場合は、最初のページのみが表示されます。追加のページ間を移動し、使用可能なすべてのリソースを表示するには、ナビゲーションコントロールを使用します。

  • テンプレートに含めるリソースを選択します。

  • リソースをテンプレートに挿入するには、目標に応じて、2 つの方法があります。

    • 既存のリソースのクローンを作成する: 既存の AWS リソースのライブ設定とプロパティを使用して、テンプレートに新しいリソースを作成します。

    • 既存のリソースをインポートする: ライブの状態を使用して実際のリソースをテンプレートに追加することで、そのリソースをスタックに挿入します。

ヒント

  • [リソース] セクションはいつでも更新して、アカウントまたはリージョンで利用可能なリソースの最新リストを表示できます。

  • リソースをインポートしている場合は、同じアカウントの既存の CloudFormation スタックに既に属しているリソースを追加しないでください。

  • リソースが既に CloudFormation によって管理されているかどうかを確認するには、リソースの横にある情報アクションを使用します。VS Code では、[i] アイコンをクリックします。JetBrains IDE では、リソースを右クリックして [Get Stack Management Info] を選択します。

VS Code では、コマンド [AWS CloudFormation: Add Related Resources by Type] を使用して、関連リソースを選択したリソースに追加できます。テンプレートで既に定義されているリソースタイプから選択すると、IDE には、通常そのタイプに関連付けられているか、そのタイプに依存するリソースのリストが表示されます。例えば、AWS::EC2::Instance を選択した場合、IDE は AWS::EC2::SecurityGroupAWS::EC2::Subnet などの関連リソースの追加を提案する場合があります。この機能は、互換性のあるリソースタイプを手作業で検索することなく、接続されたインフラストラクチャコンポーネントをすばやく構築するのに役立ちます。現在、この機能は JetBrains IDE ではサポートされていません。

静的検証

CloudFormation 言語サーバーは、AWS CloudFormation Linter (cfn-lint)AWS CloudFormation Guard による組み込みの静的検証を提供します。これらの検証は、テンプレートを作成したときにバックグラウンドで実行され、デプロイ前に構文エラー、コンプライアンスギャップ、ベストプラクティスの問題を特定するのに役立ちます。

静的検証の概要

IDE には 2 種類のリアルタイム静的検証が示されます。

  • CloudFormation Linter (cfn-lint): CloudFormation リソース仕様とスキーマルールに対してテンプレートを検証します。

  • Guard (cfn-guard): コンプライアンスルールと組織ポリシーパックに対してテンプレートを検証します。

CloudFormation Linter (cfn-lint)

CloudFormation Linter は、IDE に統合されており、入力時にテンプレートの構文と構造を自動的にチェックします。

  • スキーマの検証: 構文とスキーマのエラーを検出して、テンプレートが CloudFormation リソーススキーマに準拠していることを確認します。

  • エラーの強調表示: デプロイのブロッカーまたは警告を表すインラインマーカーが問題の下に表示されます。

  • マウスホバーのヘルプ: エラーの上にマウスを置くと、その問題に関連する診断メッセージが IDE に表示されます。利用可能な場合は、クイック修正も提供されます。

Guard 統合

Guard は、コンプライアンスポリシーとセキュリティポリシーを定義するルールセットに対してテンプレートを検証します。IDE は CloudFormation 言語サーバーを介してリアルタイムで Guard 検証を実行し、テンプレートの作成中にすぐにフィードバックを提供します。

  • デフォルトルールパック: IDE には、リソースのセキュリティと設定の健全性に関する基本的なベストプラクティスに焦点を当てた、事前登録済みの一連の Guard ルールが含まれています。詳細については、Guard ルールレジストリを参照してください。

  • ルールパックの追加: ルールセットを追加または変更するには、IDE 設定を開いて Guard 設定セクションにナビゲートし、追加の Guard ルールパックを選択またはアップロードします。

ヒント: 診断インジケーターの理解

  • 青のインジケーター: ベストプラクティスのヒントまたは最適化の推奨事項。

  • 黄色のインジケーター: ノンブロッキングの問題 (タグやパラメータの欠落など) に関する警告。

  • 赤のインジケーター: 無効なプロパティ名、必須フィールドの欠落、スキーマの不一致などのデプロイブロッカー。

ステップ 4: テンプレート内をナビゲートする

IDE は、ParametersResourcesOutputsMappings などのセクションに整理された CloudFormation テンプレートの構造化された階層ビューを提供し、各リソースタイプと論理 ID を示します。これにより、大きなテンプレート内の特定のリソースやパラメータをすばやく見つけてナビゲートすることが容易になります。VS Code では、この構造は [Explorer] サイドバーの [Outline] パネルに表示されます。JetBrains IDE では、[Structure] ツールウィンドウを開くと現在開いているファイルのテンプレート構造が表示されます。

GetAttRef などの組み込み関数用に [定義に進む] を使用して、テンプレート内の参照されるリソースやパラメータに直接ジャンプすることができます。これは、依存関係を追跡し、リソースの関係を理解し、編集をより効率的に行うことに役立ちます。

ステップ 5: 検証してデプロイする

CloudFormation テンプレートをデプロイする準備ができたら、検証とデプロイ機能を使用して変更セットを作成します。テンプレートが IDE によって検証されます。ブロッキングエラーが見つからない場合は、ドリフト対応変更セットの作成に進みます。次に、IDE に差分ビューが表示されるので、変更セットを実行する前に、提案されたすべての変更を確認できます。

VS Code では、コマンドパレットを開き、[AWS CloudFormation: Validate and Deploy] を実行します。テンプレート、スタック名、パラメータ、機能、その他のデプロイオプションの選択がコマンドパレットでステップごとにガイドされます。JetBrains IDE では、ツールバー [Validate and Deploy] ボタンを使用するか、エディタでテンプレートファイルを右クリックするか、ツリーでスタックを右クリックします。JetBrains でウィザードダイアログが表示され、テンプレートの選択、スタック名、パラメータ、機能、タグ、詳細オプションなど、すべてのデプロイオプションを設定できます。

検証の仕組み

IDE はデプロイ前の検証チェックを自動的に実行し、次のような一般的な障害の原因に対してテンプレートを検証します。

  • 無効なプロパティ構文またはスキーマの不一致: これらの問題は通常、オーサリング中に cfn-lint によって検出されますが、それらに対処せずにデプロイを進めた場合、CloudFormation のデプロイ時の検証で、スタックが作成または更新される前に同じエラーが表示されます。

  • リソース名が、アカウント内の既存のリソースと競合しています。

  • S3 バケット名の競合や暗号化の欠落など、サービス固有の制約。

検証でエラーが検出された場合、IDE では問題が直接テンプレート内で強調表示され、診断パネルにエラーが一覧表示されます。各問題には、推奨される修正とともに、障害の原因となった特定のプロパティまたはリソースが含まれます。ブロックエラーがない場合は、デプロイフェーズに進むことができます。

警告が見つかった場合 (ノンブロッキングの問題)、ダイアログが表示され、デプロイを続行するか、キャンセルして修正することができます。

IDE で [ドリフト対応変更セット] が開き、現在のテンプレートとデプロイされたスタック設定の違いが表示されます。これにより、実行前に変更セットを確認、確認、またはキャンセルできます。デプロイをキャンセルすると、変更セットが削除されます。

ドリフト対応変更セットは、スタックドリフトを安全に処理できるようにすることで、CloudFormation のデプロイプロセスを強化します。スタックドリフトは、リソースの実際の状態が CloudFormation テンプレートで定義されているものと異なる場合に発生します。これは多くの場合、AWS マネジメントコンソール、CLI、または SDK を介して行われた手動による変更が原因です。CloudFormation のドリフト対応変更セット は、処理されたスタック設定をライブのリソースの状態と比較し、IDE はこれらの違いを明らかにするので、デプロイ前にリソースをコンプライアンス状態に戻すことができます。

スタックイベントを表示する

デプロイが開始されたら、進捗状況を CloudFormation パネルからリアルタイムでモニタリングできます。[スタックイベント] には、デプロイ中に実行されたオペレーションのリストが表示されます。各イベントには、次のような詳細が含まれます:

  • [タイムスタンプ] — イベントが発生した時刻

  • [リソース]: 作成、更新、または削除される特定の AWS リソース

  • [ステータス]: オペレーションの現在の状態 (CREATE_IN_PROGRESSUPDATE_COMPLETEROLLBACK_IN_PROGRESS など)

  • [理由]: 該当する場合、追加のコンテキストまたはエラーメッセージ

このパネルからスタックの [リソース][出力] を表示することもできます。[スタックイベント] ビューは、デプロイの進行状況を追跡し、潜在的な問題を特定し、スタックが正常に完了したことを確認するのに役立ちます。

IDE で CloudFormation プロジェクトを初期化する (VS Code のみ)

IDE で CloudFormation プロジェクトを初期化すると、正しいフォルダ、環境設定、および AWS 認証情報を使用して構造化ワークスペースをセットアップできるため、テンプレートを確実に検証してデプロイできます。IDE から直接新しい CloudFormation プロジェクトを初期化して、この推奨セットアップを作成できます。現在、この機能は VS Code でのみ使用可能で、JetBrains IDE ではサポートされていません。

CloudFormation プロジェクトを初期化するには:

  • コマンドパレットを開きます

    • VS Code から、コマンドパレット (macOS の Ctrl+Shift+P または Cmd+Shift+P) を開きます。

    • [AWS CloudFormation: CFN Init: プロジェクトを初期化する] を選択します。

  • プロジェクトディレクトリを選択する

    • デフォルト: IDE は現在の作業ディレクトリを使用します。

    • このパスを CloudFormation テンプレートを保存する任意のフォルダに変更することができます。

  • AWS 認証情報プロファイルを選択する

    • AWS 認証情報プロファイルを選択するように求められます。選択したプロファイルは、環境の検出、検証、デプロイに使用されます。

  • 環境をセットアップする

    • 環境を作成または選択するように求められます。

    • 環境は、テンプレートをデプロイまたは検証する場所と方法 (開発、ベータ、本番稼働など) を定義します。[AWS CloudFormation: CFN Init: 環境を追加する] を使用して、環境を選択または変更できます。

    • [AWS CloudFormation: CFN Init: Remove Environment] を使用して、選択した環境を削除できます。

  • (オプション) パラメータファイルをインポートする

    • 既存のパラメータファイルが既にある場合、IDE は初期化中にそれらをインポートすることを許可します。

    • IDE は互換性のあるファイルを自動的に検出し、テンプレートの検証とデプロイで使用するためにそれらをプロジェクトにリンクします。

  • プロジェクトを命名して確定する

    • ベータ環境などのプロジェクト名を提供し、セットアップを完了します。

    • IDE は、最初のプロジェクト構造と設定ファイルを作成します。

IDE から直接、検証を実行したり、デプロイをプレビューしたり、環境を切り替えたりできます。

オープンソース

AWS CloudFormation 言語サーバーは、Apache-2.0 ライセンスでオープンソース化されているため、テンプレート診断、スキーマ検証、および静的分析の実行方法に対する完全な透明性を提供します。これにより、ツールを採用する前にソースレベルの可視性を必要とする顧客のセキュリティとコンプライアンスの摩擦が軽減されます。

コードベースは GitHub で一般公開されています: https://github.com/aws-cloudformation/cloudformation-languageserver/

サポートが必要ですか?

AWS re:Post で CloudFormation コミュニティをお試しください。