CloudFormation でのプライベート拡張の使用 - AWS CloudFormation

CloudFormation でのプライベート拡張の使用

プライベート拡張は、AWS アカウント で使用するために明示的に許可した拡張です。

プライベート拡張には 2 種類あります。

  • アクティブ化されたプライベート拡張 - アカウントとリージョンに対してアクティブ化したサードパーティの拡張のローカルコピーです。サードパーティーのパブリック拡張をアクティブ化すると、CloudFormation はその拡張のローカルコピーをアカウントのレジストリに作成します。

  • 登録されているプライベート拡張 - パブリック CloudFormation レジストリにリストされていないプライベート拡張をアクティブ化することもできます。これらは、ご自身で作成された拡張、または組織やその他のサードパーティーから共有された拡張である場合があります。アカウントでこのようなプライベート拡張を使用するには、必ず先に登録しておく必要があります。拡張を登録すると、そのコピーがアカウントの CloudFormation レジストリにアップロードされ、アクティブ化されます。

アカウントでプライベート拡張を使用することは、サンドボックス環境での使用と似ています。これは、拡張がバージョン管理されており、プロビジョニングの動作がバージョン固有であるためです。つまり、プライベート拡張は公開されたかのように動作します。

注記

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

独自のプライベート拡張の開発については、「CloudFormation Command Line Interface User Guide」(CloudFormation コマンドラインインターフェースユーザーガイド) を参照してください。

プライベート拡張の登録。

CloudFormation のレジストリにリストされていないプライベート拡張 (自分で開発したもの、または共有されているもの) を使用するには、まずそれらを使用するアカウントとリージョンで CloudFormation に登録する必要があります。拡張を登録すると、そのコピーがアカウントの CloudFormation レジストリにアップロードされ、アクティブ化されます。プライベート拡張を登録すると、そのアカウントとリージョンの CloudFormation レジストリに表示され、スタックテンプレートで使用できます。

拡張は、AWS CLI の register-type コマンドを使用するか、CloudFormation CLI の submit コマンドを使用して登録できます。

CloudFormation CLI を使用して拡張を登録する方法については、「CloudFormation CLI ユーザーガイド」の「Registering extensions」(拡張の登録) を参照してください。

プライベート拡張の登録のための IAM アクセス許可

プライベート拡張の登録の一環として、拡張の登録の一環として、拡張のプロジェクトパッケージを含む Amazon S3 バケットを指定します。このパッケージには、登録する拡張に必要なソースファイルが含まれています。拡張を登録するユーザーは、Amazon S3 バケット内のプロジェクトパッケージにアクセスできる必要があります。つまり、ユーザーは、拡張パッケージに対する GetObject アクセス許可を持っている必要があります。

これは、AWS CLI の register-type コマンドを使用している場合でも、CloudFormation CLI の submit コマンドを使用している場合でも当てはまります。

詳細については、AWS Identity and Access Management ユーザーガイドの Amazon S3 のアクション、リソース、および条件キーを参照してください。

拡張の登録

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

AWS CLI を使用してフックを登録するには

フックを CloudFormation に登録して、AWS CloudFormation レジストリで使用できるようにします。

  1. (オプション) configure オペレーションを送信して、デフォルトの AWS リージョン を us-west-2 に構成します。

    aws configure AWS Access Key ID [None]: <Your Access Key ID> AWS Secret Access Key [None]: <Your Secret Key> Default region name [None]: us-west-2 Default output format [None]: json
  2. (オプション) 次のコマンドは、フックプロジェクトを登録せずにビルドしてパッケージ化します。

    $ cfn submit --dry-run
  3. CloudFormation CLI cfn submit を使用してフックを登録します。

    cfn submit --set-default

    このコマンドは以下のコマンドを返します。

    {‘ProgressStatus’: ‘COMPLETE’}

    結果: フックを正常に登録しました。

AWS CLI を使用してリソースタイプを登録するには

ソースタイプを CloudFormation に登録して、AWS CloudFormation レジストリで使用できるようにします。

  1. アカウントに登録するプライベート拡張のプロジェクトパッケージを含む Amazon S3 バケットを見つけます。

  2. register-type コマンドを使用して、拡張をアカウントに登録します。

    RegisterType は非同期オペレーションであり、登録リクエストの進行状況を追跡するために使用できる登録トークンを返します。

    注記

    拡張がその機能の一部として AWS API を呼び出す場合は、これらの AWS API を呼び出すために必要なアクセス許可を含む IAM 実行ロールを作成し、アカウントにその実行ロールをプロビジョニングする必要があります。その後、--execution-role-arn パラメータを使用してこの実行ロールを指定できます。CloudFormation は、その実行ロールを引き受け、リソースタイプに適切な認証情報を提供します。

    例えば、次のコマンドは、現在の AWS アカウント に My::Resource::Example リソースタイプを登録します。

    aws cloudformation register-type --type-name My::Resource::Example --schema-handler-package [s3 object path] --type RESOURCE { "RegistrationToken": "f5525280-104e-4d35-bef5-8f1fexample" }
  3. オプション: 登録トークンを describe-type-registration コマンドとともに使用して、登録リクエストの進行状況を追跡します。

    CloudFormation が登録リクエストを完了すると、リクエストの進捗ステータスが COMPLETE に設定されます。

    次の例では、上記の describe-type-registration コマンドによって返された登録トークンを使用して、登録ステータス情報を返します。

    aws cloudformation describe-type-registration --registration-token f5525280-104e-4d35-bef5-8f1fexample { "ProgressStatus": "COMPLETE", "TypeArn": "arn:aws:cloudformation:us-east-1:012345678910:type/resource/My-Resource-Example", "Description": "Deployment is currently in DEPLOY_STAGE of status COMPLETED; ", "TypeVersionArn": "arn:aws:cloudformation:us-east-1:111122223333:type/resource/My-Resource-Example/00000001" }

アカウントレベルでの拡張の設定

拡張には、特定のアカウントとリージョンの拡張のすべてのインスタンスに適用するための構成プロパティを含めることができます。拡張の作成者はこれらを拡張の定義構成で定義します。拡張の構成定義に必要なプロパティがある場合、アカウントとリージョンで拡張を使用する前に、それらのプロパティを指定する必要があります。

注記

型設定に、AWS Systems Manager または AWS Secrets Manager に格納されている値への動的参照が含まれている場合では、タイプをプロビジョニングするために使用されるロール (スタックの作成や更新など) には、その値を取得するための適切なアクセス許可が必要です。具体的には次のとおりです。

  • 型設定に AWS Systems Manager Parameter Store に格納されたパラメータが含まれている場合、タイプをプロビジョニングするために使用されるユーザーまたはロールには、GetParameter を呼び出すための許可が必要です。

  • タイプ設定が AWS Secrets Manager に格納されたシークレットが含まれている場合、タイプをプロビジョニングするために使用されるユーザーまたはロールには、GetSecretValue を呼び出すための許可が必要です。

動的な参照の詳細については、「動的な参照を使用してテンプレート値を指定する」を参照してください。

拡張の開発中に構成定義を定義する方法の詳細については、「拡張の開発のための CloudFormation ユーザーガイド」の「Defining the account-level configuration of an extension」(拡張のアカウントレベルの構成を定義する) を参照してください。

CloudFormation コンソールで拡張の現在の構成データを表示するには
  1. CloudFormation レジストリを使用して拡張を検索する。

  2. 拡張を選択して、拡張の詳細を表示します。

  3. [extension details] (拡張の詳細) ページで、[Configuration] (構成) タブを選択します。

  4. [Configuration schema] (構成スキーマ) タブを展開して、拡張に定義されている構成スキーマを確認します。

  5. [Configuration] (構成) タブを展開して、この拡張に設定した現在の構成を確認します。

AWS CLI で拡張の現在の構成データを表示するには
  • describe-type コマンドを使用して、拡張の詳細情報を返します。出力の ConfigurationSchema 要素には、指定されたリージョンの拡張の現在の構成定義が含まれます。

    または、batch-describe-type-configurations コマンドを使用して、複数の拡張に関する構成データを返します。

拡張タイプの構成プロパティを指定するには

CloudFormation コンソールを使用して拡張の構成プロパティを指定するには

  1. CloudFormation レジストリを使用して、アカウントのアクティブ化された拡張で拡張を検索します。

  2. 拡張を選択して、拡張の詳細を表示します。

  3. 拡張の詳細ページで、[Configuration] (構成) タブから [Edit configuration] (構成を編集する) を選択します。

    または、[Actions] (アクション) から、[Edit] (編集) を選択し、次に [Edit configuration] (構成を編集する) を選択します。

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

  4. [Configuration JSON] (構成 JSON) テキストボックスに、この拡張に設定する構成スキーマを表す JSON 文字列を入力します。[Configuration schema] (構成スキーマ) で定義されたスキーマに対して検証する必要があります

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

AWS CLI を使用して拡張の構成プロパティを指定するには

  • set-type-configuration コマンドを使用して、アカウントとリージョンの拡張で使用する構成を指定します。

    --configuration に渡す JSON は、拡張の構成定義スキーマに対して検証する必要があります。以下は、構成を指定する set-type-configuration コマンドの例です。

    aws cloudformation set-type-configuration \ --region us-west-2 \ --type RESOURCE \ --type-name My::Resource::Example \ --configuration-alias default \ --configuration "{"CredentialKey": "testUserCredential"}"

AWS CLI を使用して使用するプライベート拡張のバージョンを指定する

時間が経つと、同じ拡張の複数のバージョンを登録している可能性があります。CloudFormation オペレーションに使用する拡張のバージョンを指定できます。

拡張のバージョンを指定するには

set-type-default-version コマンドを使用して、アカウントの CloudFormation オペレーションに使用する拡張のバージョンを指定します。

たとえば、次のコマンドは、現在のアカウントの My::Resource::Example リソースタイプのデフォルトバージョンを 00000003 に設定します。

aws cloudformation set-type-default-version \ --type RESOURCE \ --type-name My::Resource::Example \ --version-id 00000003

デフォルトのフックバージョンを指定するには

アカウントでフックのデフォルトバージョンを指定するには、set-type-default-version コマンドを使用し、タイプ、タイプ名、バージョン ID を指定します。

aws cloudformation set-type-default-version \ --type HOOK \ --type-name MyCompany::Testing::MyTestHook \ --version-id 00000003