CloudFormation でのパブリック拡張の使用 - AWS CloudFormation

CloudFormation でのパブリック拡張の使用

パブリック拡張は、すべての CloudFormation ユーザーが使用できるようにレジストリに公開されている、リソースタイプやモジュールなどの CloudFormation 拡張です。これには、AWS によって公開されたすべての拡張が含まれます。サードパーティーはパブリック拡張を公開することもできます。

パブリック拡張には 2 種類あります。

  • AWS パブリック拡張 - AWS によって公開される拡張は常に公開されており、デフォルトで有効化されているため、アカウントで使用する前に何もアクションを実行する必要はありません。加えて、AWS は拡張のバージョニング管理を制御するため、常に最新のバージョンを使用しています。

  • サードパーティー拡張 - これらは、AWS 以外のパブリッシャーが一般的に使用できるようになっている拡張です。パブリック拡張を使用するには、まずアカウントとリージョンでアクティブ化する必要があります。

    独自のサードパーティー拡張を公開して、一般的な CloudFormation ユーザーが利用できるようにすることができます。詳細については、「CloudFormation コマンドラインインターフェースユーザーガイド」の「Publishing extensions」(パブリック拡張) を参照してください。

注記

プライベート拡張と同様に、サードパーティーパブリッシャーからのパブリック拡張は、リソースの作成、読み取り、更新、一覧表示、およびスタックの削除オペレーション中に実行されるイベントハンドラーを実装する場合があります。このため、これらの拡張を CloudFormation スタックで使用すると、アカウントに料金が発生する場合があります。これは、作成されたリソースに対して発生した料金に追加されます。詳細については、「AWS CloudFormation 料金表」を参照してください。

AWS アカウント で使用するためのパブリック拡張の有効化

テンプレートでパブリックサードパーティー拡張を使用するには、まず、使用するアカウントとリージョンに対して拡張を有効にする必要があります。拡張を有効にすると、有効化されたアカウントとリージョンのスタックオペレーションで使用できるようになります。パブリックサードパーティーの拡張を有効にすると、CloudFormation はアカウントの拡張レジストリに、有効化された拡張のエントリをプライベート拡張として作成します。    これにより、次の方法で、アカウントで有効化された拡張をカスタマイズできます。

  • パブリックサードパーティーの拡張名ではなく、使用するエイリアスを指定します。これは、サードパーティーの拡張間の名前の衝突を避けるのに役立ちます。

  • 新しいマイナーバージョンまたはパッチバージョンが利用可能になったときに、拡張を自動的に更新するかどうかを指定します。

  • 拡張のログ設定に加えて、CloudFormation が拡張を有効にするために使用する実行ロールを指定します。

パブリックのサードパーティー拡張を有効にすると、拡張に含まれる構成プロパティを設定することもできます。構成プロパティは、拡張を特定のアカウントとリージョンに対して構成する方法を定義します。構成の詳細については、以下を参照してください。

新しいバージョンの拡張を自動的に使用するように CloudFormation を設定する

拡張を有効にするときに、最新のマイナーバージョンを使用するように拡張の種類を指定することもできます。パブリッシャーが有効化された拡張で新しいバージョンをリリースするたびに、拡張の種類によってマイナーバージョンが更新されます。

例えば、次にその拡張を含むテンプレートを使用してスタックの作成、更新などのスタックオペレーションを実行すると、CloudFormation は新しいマイナーバージョンを使用します。

自動または手動で新しい拡張バージョンに更新しても、スタックですでにプロビジョニングされている拡張インスタンスには影響しません。

CloudFormation は、拡張のメジャーバージョン更新を重大な変更を含む可能性があるものとして扱うため、拡張の新しいメジャーバージョンに手動で更新する必要があります。

AWS で公開された拡張は、利用可能なすべてのアカウントとリージョンでデフォルトで有効化され、常に各 AWS リージョン で利用可能な最新バージョンを使用します。

重要

拡張をアカウントの最新バージョンに更新するかどうか、いつ更新するかを制御できるため、異なるアカウントやリージョンに同じ拡張の異なるバージョンがデプロイされる可能性があります。

これにより、その拡張を含む同じテンプレートをそれらのアカウントとリージョン全体で使用すると、予期しない結果につながる可能性があります。

拡張を参照するエイリアスを指定する

特定のアカウントとリージョンにおいて、特定の名前で複数の拡張を有効にすることはできません。異なるパブリッシャーが同じ拡張名でパブリック拡張を提供している場合があるため、CloudFormation では、有効にするサードパーティーのパブリック拡張のエイリアスを指定できます。

拡張にエイリアスを指定すると、CloudFormation はそのエイリアスをこのアカウントとリージョン内の拡張タイプ名として扱います。テンプレート、API 呼び出し、および CloudFormation コンソールで拡張を参照するには、エイリアスを使用する必要があります。

拡張のエイリアスは、特定のアカウントとリージョン内で一意である必要があります。異なるタイプ名のエイリアスを使用して、同じアカウントとリージョン内で同じパブリックリソースを複数回有効にできます。

重要

拡張のエイリアスは、特定のアカウントとリージョンで一意である必要があるだけですが、ユーザーがアカウントとリージョン全体で異なるサードパーティーのパブリック拡張に同じエイリアスを割り当てないことを強くお勧めします。複数のアカウントまたはリージョンにまたがる拡張エイリアスを含むテンプレートを使用すると、予期しない結果が生じる可能性があります。

拡張を有効にするときの実行ロールを指定する

リソースを有効にするときに、アカウントとリージョンでその拡張を呼び出すときに CloudFormation が引き受ける IAM 実行ロールを指定できます。

CloudFormation が実行ロールを引き受けるためには、そのロールに CloudFormation で定義された信頼ポリシーが必要です。さらに、IAM ポリシーを作成して実行ロールにアタッチすることで、オペレーションを実行するアクセス許可が付与されます。必要なアクセス許可は、拡張スキーマのハンドラーセクションで定義されています。

リソースタイプ拡張の IAM ロールの信頼ポリシーの例を次に示します。

{ "Version": "2012-10-17", "Statement":[ { "Effect": "Allow", "Principal":{ "Service": "resources.cloudformation.amazonaws.com" }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"123456789012" }, "StringLike":{ "aws:SourceArn":"arn:aws:cloudformation:us-east-1:123456789012:type/resource/Organization-Service-Resource/*" } } } ] }

フック拡張の IAM ロールの信頼ポリシーの例を次に示します。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal": { "Service": [ "resources.cloudformation.amazonaws.com", "hooks.cloudformation.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"123456789012" }, "StringLike":{ "aws:SourceArn":"arn:aws:cloudformation:us-east-1:123456789012:type/hook/Organization-Service-Hook/*" } } } ] }

詳細については、「AWS Identity and Access Management ユーザーガイド」の「Modifying a role trust policy」(ロールの信頼ポリシーの変更) を参照してください。

レジストリでパブリック拡張を有効にするには

AWS CloudFormation レジストリで拡張を有効にして、使用できるようにします。

CloudFormation コンソールを使用して、アカウントで使用するパブリック拡張を有効にするには

  1. AWS Management Console にサインインし、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

  2. CloudFormation のナビゲーションペインから、[CloudFormation registry] (CloudFormation レジストリ) の下にある [Public extensions] (パブリック拡張) を選択します。

  3. [Filter] (フィルタ) を使用して拡張タイプを選択し、[Third party] (サードパーティー) を選択します。AWS によって発行されている拡張がデフォルトで有効化されています。

  4. 拡張を選択してから、[Activate] (有効化) を選択します。

    注記

    拡張の複数のバージョンが使用可能な場合は、[Version] (バージョン) メニューを使用し、有効にする拡張のバージョンを選択します。デフォルトは最新バージョンです。

  5. [Activate extension] (拡張の有効化) ページのオプションを使用して、このアカウントで拡張を有効化する方法をカスタマイズします。

    • 拡張タイプのエイリアスを使用して拡張を有効にするには、次の手順を実行します。

      1. [Override default] (デフォルトを上書き) 選択する

      2. この拡張で使用する拡張タイプエイリアスを入力します。エイリアスは、拡張タイプの推奨形式に従う必要があります。

      詳細については、「Specifying aliases to refer to extensions」(拡張を参照するエイリアスを指定する) を参照してください。

    • プライベートリソースを有効にしている場合、CloudFormation が拡張を呼び出すときに引き受ける IAM ロールを指定できます。詳細については、「Specifying an execution role when activating extensions」(拡張を有効化するときの実行ロールを指定する) を参照してください。

    • 必要に応じて、[Logging config] (ロギング構成) で、拡張のロギング構成情報を指定します。例:

      { "logRoleArn": "arn:aws:iam::account:role/rolename", "logGroupName": "log-group-name" }

      構成情報のロギングは必須ではありませんが、デバッグの目的で推奨されます。フックでロギング構成を使用するには、指定された実行ロールと同じ信頼ポリシーを追加して、ログロールがロググループにログを書き込めるようにします。

      LogRoleN そして logGroupName キー名では大文字と小文字が区別されます

    • [Versioning] (バージョニング) で、更新の受信方法を指定します。

      • [On] (オン) - 自動的に最新のマイナーバージョンに更新します。メジャーバージョンは手動で更新されます。

      • [Off] (オフ) - 自動的に最新バージョンに更新しません。すべてのバージョンは手動で更新されます。

      詳細については、「Setting CloudFormation to automatically use new versions of extensions」(新しいバージョンの拡張を自動的に使用するように CloudFormation を設定する) を参照してください。

  6. 構成データを指定します。

    注記

    このステップはフックに必要です。TargetStack プロパティには ALL を指定する必要があります。このオペレーションにより、フックのスキーマプロパティセクションで定義されているフックのプロパティが有効になります。

    拡張でアカウントおよびリージョンレベルで追加の構成が必要な場合、CloudFormation は [Activate extension] (拡張の有効化) ページに、[Configuration] (構成) セクションを含みます。構成データを今すぐ指定するか、拡張が有効化された後に指定するかを選択できます。拡張が構成を必要としない場合、「構成」のセクションは表示されません。

    • 拡張を有効にしながら構成データを指定するには次の手順を実行します。

      1. [Configure now] (今すぐ設定) を選択してから、[Activate extension] (拡張の有効化) を選択します。

        CloudFormation は、[Configure extension] (拡張の設定) ページを表示します。拡張の現在の構成スキーマを表示するには、[View configuration schema] (構成スキーマの表示) が有効になっていることを確認してください。

      2. [Configuration JSON] (構成 JSON) テキストボックスに、この拡張に指定する構成スキーマを表す JSON 文字列を入力します。

      3. [Configure extension] (拡張の設定) を選択します。

    • 後で構成データを指定するには:

      • [Configure later] (後で設定) を選択してから、[Activate extension] (拡張の有効化) を選択します。

      すでに有効化されている拡張の構成データを指定するには、有効化された拡張の詳細ページにアクセスします。

    拡張が正常に有効化されると、CloudFormation はその拡張の詳細ページを表示します。

CloudFormation コンソールを使用して、アカウントで有効化されたパブリック拡張を更新するには

AWS CloudFormation レジストリで拡張を更新して、使用できるようにします。

アカウントとリージョンで拡張を有効化したら、その拡張が有効化されたときに、その拡張の次のプロパティを更新できます。

  • 構成スキーマ。

  • 自動バージョン更新を有効にするかどうか。

  • プライベート登録済み拡張の場合、使用する実行ロール。

  • ロギング構成情報。

  1. AWS Management Console にサインインし、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

  2. CloudFormation のナビゲーションペインから、[CloudFormation registry] (CloudFormation レジストリ) の下にある [Public extensions] (パブリック拡張) を選択します。

  3. [Actions] (アクション) メニューから [Edit] (編集) を選択し、次に適切な編集オプションを選択します。

    • 構成スキーマを更新するには、「To specify configuration properties for an extension in the CloudFormation console」(CloudFormation コンソールで拡張の構成プロパティを指定するには) を参照してください。

    • 自動更新を有効または無効にするには:

      1. [Edit automatic updates] (自動更新を編集する) を選択します。

      2. [On] (オン) または [Off] (オフ) を選択してから、[Save] (保存) を選択します。

    • 実行ロールを更新するには、次の手順を実行します。

      1. [Edit execution role] (実行ロールを編集) を選択します。

      2. この拡張を呼び出すときに CloudFormation が使用する IAM ロールの ARN を指定し、次に [Save] (保存) を選択します。

    • ロギング構成を更新するには、次の手順を実行します。

      1. [Edit logging config] (ロギング設定の編集) を選択します。

      2. ログ構成 JSON を編集し、次に [Save] (保存) を選択します。

AWS CLI を使用して、アカウントで使用するパブリック拡張を有効にするには

AWS CLI を介して AWS CloudFormation レジストリで拡張を有効にします。

フックを有効にするには

フックを開発して登録した後、レジストリに公開することで、フックを AWS アカウント で有効にできます。

  • アカウントでフックを有効にするには、SetTypeConfiguration オペレーションを使用します。このオペレーションにより、フックのスキーマ properties セクションで定義されているフックのプロパティが有効になります。

    注記

    アカウントでフックを有効にすることにより、フックが AWS アカウント から定義されたアクセス許可を使用することを認証します。CloudFormation は、アクセス許可をフックに渡す前に、不要なアクセス許可を削除します。CloudFormation は、お客様またはフックユーザーに、フックのアクセス許可を確認し、アカウントでフックを有効にする前に、フックに許可されているアクセス許可を確認することをお勧めします。

    登録したフック拡張の構成データを同じアカウントと AWS リージョン で指定します。

    aws cloudformation --region us-west-2 set-type-configuration \ --configuration "{"CloudFormationConfiguration":{"HookConfiguration":{"TargetStacks": "ALL", "FailureMode": "FAIL", "Properties":{}}}}" \ --type-arn $HOOK_TYPE_ARN
    重要

    フックがスタックの構成をプロアクティブに検査できるようにするには、HookConfiguration セクションで TargetStacksALL に設定する必要があります。

リソースタイプとモジュールを有効にするには
AWS CLI を使用して、アカウントで使用するパブリック拡張を有効にするには
  • activate-type を使用して拡張を有効にし、拡張の新しいマイナーバージョンが公開されるたびに拡張を自動更新するかどうかを指定します。

    以下の例では、このアカウントに対して有効にするパブリック拡張のパブリック Amazon リソースネーム (ARN) を指定します。さらに、新しいマイナーバージョンが公開されるたびに CloudFormation が拡張を更新するように指定しています。

    aws cloudformation activate-type \ --public-type-arn public_extension_ARN \ --auto-update true

    このコマンドは、このアカウントとリージョンに固有の、有効化された拡張の ARN を返します。

    { "Arn": "624af370-311a-11e8-b6b7-500cexample" }
AWS CLI を使用してパブリック拡張のバージョンを更新するには

activate-type を使用して拡張を再度有効にします。

--version-bump パラメータを使用して、拡張を最新の MAJOR バージョン、最新の MINOR バージョンに更新するかどうかを指定します。

aws cloudformation activate-type \ --region us-west-2 \ --type RESOURCE \ --type-name Example::Test::1234567890abcdef0 \ --type-name-alias Example::Test::Alias \ --version-bump MAJOR

アカウントのパブリック拡張を無効にするには

以下のセクションでは、アカウントのパブリック拡張を無効にする方法を説明します。

CloudFormation コンソールを使用して、アカウントで使用するパブリック拡張を無効にするには

  1. CloudFormation レジストリを使用して拡張を検索する。

  2. [Actions] (アクション) メニューから、[Deactivate] (無効化) を選択します。

  3. [Deactivate] (無効化) を選択します。

AWS CLI を使用して、アカウントでパブリック拡張を無効にするには

アカウントのパブリック拡張を無効にするには、deactivate-type を指定します。AWS CLI 無効化コマンドの例を次に示します。

aws cloudformation deactivate-type \ --region us-west-2 \ --type MODULE \ --type-name Example::Test::Type::MODULE

AWS CLI を使用して、アカウントでフックを無効にするには

フックを無効にすると、フックが AWS アカウント を実行できなくなります。

TargetStacksNONE に設定すると、アカウントのフックをオフにするため、スタックオペレーションには適用されません。

set-type-configuration オペレーションを使用し、TargetStacksNONE として指定して、フックを無効にします。

次の例では、無効化されるフックの AWS リージョン と Amazonリソースネーム (ARN) を指定します。

aws cloudformation set-type-configuration \ --region us-west-2 \ --configuration "{"CloudFormationConfiguration":{"HookConfiguration":{"TargetStacks": "NONE", "FailureMode": "FAIL", "Properties":{}}}}" \ --type-arn HOOK_TYPE_ARN