AWS CloudFormation 言語サーバー - AWS CloudFormation

AWS CloudFormation 言語サーバー

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

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

AWS Toolkit 拡張機能は、CloudFormation 言語サーバーを統合して、オーサリングエクスペリエンスを向上させます。この統合は現在、以下を含む VS Code ベースの IDE でサポートされています。

開始方法

前提条件

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

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

  • IDE 用の AWS Toolkit の最新バージョンをインストールまたはアップグレードしている。

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

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

  • IDE の拡張機能またはプラグインマネージャを開きます。

  • 「AWS Toolkit」を検索します。

  • IDE 用の Toolkit AWS のバージョン 3.85.0 以降をインストールまたは更新します。

  • インストール後に IDE を再起動します。

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

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

IDE で、アクティビティバーから AWS Toolkit パネルを開きます。AWS Toolkit で、CLOUDFORMATION を選択します。

パネルセクション:

  • [リージョン]: 現在の AWS リージョン を表示します。リージョン名を選択するか、コマンドパレットから [AWS CloudFormation: リージョンを選択する] コマンドを使用して変更できます。

  • [環境]: CFN init 中に選択した環境 (dev、test、prod など) を示します。この値は、環境選択ステップを完了した後にのみ表示されます。

  • [スタック]: アカウントの CloudFormation スタックのページ分割されたリストを表示します。

    • 更新アイコンをクリックして、スタックのリストを更新します。

    • [+] アイコンを使用して、新しいテンプレートをスタックとしてデプロイします。

    • 各スタックエントリには以下が含まれます:

      • [概要]: スタックの概要とステータスを表示します

      • スタック ID

      • 説明

      • [作成時刻][更新時刻]

      • [ステータス][ステータスの理由]

      • [イベント][出力]、および [リソース]

    • [変更セット]

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

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

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

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

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

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

  • CloudFormation リソースパネルを展開する: AWS Toolkit サイドパネルで CloudFormation を展開してから、[リソース][Add +] アイコンをクリックします。

  • リソースタイプを検索する: 特定の AWS リソースタイプを検索するには、検索バーで、追加する特定の AWS リソースタイプを入力します。例:

    • AWS::S3::Bucket

    • AWS::Lambda::Function

    コマンドパレットで [AWS CloudFormation: リソースタイプを追加する] を使用して、リソースタイプを選択できます。

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

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

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

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

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

ヒント

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

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

  • リソースがすでに CloudFormation によって管理されているかどうかを確認するには、リソース名の横にある [i] (情報) アイコンをクリックします。

  • または、コマンド [AWS CloudFormation: スタック管理情報を取得する] を使用して、リソースがスタックに属しているかどうかを確認できます。

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

静的検証

CloudFormation IDE は、[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] を開き、追加の Guard ルールパックを選択またはアップロードします。

ヒント: 波形の線のインジケータを理解する

  • 青の波形: ベストプラクティスのヒントまたは最適化の推奨事項。

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

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

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

Explorer でテンプレートファイルをクリックすると、[概要] パネルに CloudFormation テンプレートの構造化された階層ビューが自動的に表示されます。テンプレートを ParametersResourcesOutputsMappings などのセクションに整理し、各リソースタイプと論理 ID を表示します。これにより、大きなテンプレート内の特定のリソースやパラメータをすばやく見つけてナビゲートすることが容易になります。

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

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

CloudFormation テンプレートをデプロイする準備ができたら、コマンドパレットを開き、[AWS CloudFormation: 検証してデプロイする] を実行します。コマンドはテンプレートを検証し、ブロッキングエラーが見つからない場合は、デプロイフェーズに進みます。確認する前に、IDE に [リフト対応変更セット] の概要と差分ビューが表示されるので、提案されたすべての変更を確認できます。

検証の仕組み

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

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

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

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

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

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

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

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

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

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

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

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

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

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

このパネルからスタックの [リソース][出力] を表示することもできます。AWS マネジメントコンソール でスタックを開く場合は、スタック名の横にある外部リンクアイコンを使用します。[スタックイベント] ビューは、デプロイの進行状況を追跡し、潜在的な問題を特定し、スタックが正常に完了したことを確認するのに役立ちます。

IDE で CloudFormation プロジェクトを初期化する

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

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

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

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

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

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

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

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

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

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

  • 環境をセットアップします

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

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

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

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

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

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

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

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

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

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

オープンソース

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

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

サポートが必要ですか?

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