AWS Proton コンポーネント - AWS Proton

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Proton コンポーネント

コンポーネントは AWS Proton リソースの一種です。コンポーネントはサービステンプレートに柔軟性を加えます。コンポーネントによって、プラットフォームチームは、コアインフラストラクチャパターンを拡張し、開発者がアプリケーションインフラストラクチャのさまざまな側面を管理するための保護手段を定義するメカニズムを利用できます。

AWS Proton で、管理者は、開発チームやアプリケーション全体で使用される標準インフラストラクチャを定義します。ただし、特定のユースケースに応じて、開発チームには、Amazon Simple Queue Service (Amazon SQS) キューや Amazon DynamoDB テーブルなど、追加リソースが必要になる場合があります。これらのアプリケーション固有のリソースは、特にアプリケーション開発の初期段階で頻繁に変更される可能性があります。管理者がオーサリングしたテンプレートで、このような頻繁な変化に対応するのは、管理や拡張の面で困難な場合があります。その場合、現実的な付加価値という成果は得られず、管理者には、さらに多くのテンプレートの管理が求められます。アプリケーション開発者に自分達のアプリケーション用のテンプレートを作成させるという代替案も、AWS Fargate タスクなどの主要なアーキテクチャコンポーネントを管理者が標準化できなくなるため、理想的とは言えません。そこで登場するのがコンポーネントです。

コンポーネントを利用すると、開発者は管理者が環境やサービステンプレートに定義したリソースをはるかに越えて、自分達が開発するアプリケーションを補うリソースを追加できます。開発者はコンポーネントをサービスインスタンスにアタッチします。コンポーネントによって環境やサービスインスタンスのためのリソースがプロビジョニングされるのと同じように、コンポーネントによって定義されたインフラストラクチャリソースは、AWS Proton によってプロビジョニングされます。

コンポーネントはサービスインスタンスの入力を読み取り、サービスインスタンスに出力を提供し、完全に統合されたエクスペリエンスが実現されます。例えば、サービスインスタンスが使用するための Amazon Simple Storage Service (Amazon S3) バケットがコンポーネントによって追加されると、バケット命名の際に、コンポーネントテンプレートは環境名とサービスインスタンス名を考慮することができます。AWS Proton によってサービステンプレートがレンダリングされ、サービスインスタンスがプロビジョニングされると、そのサービスインスタンスはバケットを参照して使用できます。

AWS Proton で現在サポートしているコンポーネントは直接定義されているコンポーネントです。コンポーネントのインフラストラクチャを定義する Infrastructure as Code (IaC)ファイルは、あなたが AWS Proton API またはコンソールに直接渡します。これは、テンプレートバンドルで IaC を定義し、そのバンドルをテンプレートリソースとして登録し、テンプレートリソースを使用して環境またはサービスを作成する環境やサービスの場合とは異なります。

注記

直接定義のコンポーネントでは、開発者は追加のインフラストラクチャを定義してそれをプロビジョニングできます。AWS Proton では、同じ AWS Identity and Access Management(IAM) ロールで、同じ環境で実行されるすべての直接定義済みコンポーネントがプロビジョニングされます。

管理者は、開発者がコンポーネントでできる作業を次の 2 通りの方法で制御できます。

  • サポート対象のコンポーネントソース — AWS Proton サービステンプレートバージョンのプロパティに従ってコンポーネントをサービスインスタンスにアタッチすることを管理者は許可できます。デフォルトでは、開発者はサービスインスタンスにコンポーネントをアタッチできません。

    このプロパティの詳細については、『AWS Proton API リファレンス』の CreateServiceTemplateVersion API アクションの SupportedComponentSources パラメータを参照してください。

    注記

    あなたがテンプレート同期を使用すると、リポジトリ内のサービステンプレートバンドルに変更をコミットしたときに、AWS Proton によってサービステンプレートバージョンが暗黙的に作成されます。その場合、サポートされているコンポーネントソースをサービステンプレートバージョンの作成時に指定する代わりに、各サービステンプレートメジャーバージョンに関連付けられたファイルにこのプロパティを指定してください。詳細については、「サービステンプレートを同期する」を参照してください。

  • コンポーネントロール — 管理者はコンポーネントロールを環境に割り当てることができます。環境内で直接定義のコンポーネントで定義されたインフラストラクチャをプロビジョニングするときに、AWS Proton が、このロールを引き受けます。したがって、環境内で直接定義のコンポーネントを開発者が使用して追加できるインフラストラクチャの範囲は、このコンポーネントロールによって絞り込まれます。コンポーネントロールがないと、開発者は直接定義のコンポーネントを環境内に作成できません。

    コンポーネントロールの割り当ての詳細については、『AWS Proton API リファレンス』の CreateEnvironment API アクションの ComponentRolArn パラメータを参照してください。

    注記

    コンポーネントロールは セルフマネージド型のプロビジョニング 環境では使用されません。

他の AWS Proton リソースと比べたコンポーネントはの特徴は?

コンポーネントは多くの点で他の AWS Proton リソースに似ています。そのインフラストラクチャは、AWS CloudFormation YAML 形式や Terraform HCL 形式でオーサリングした IaC テンプレートファイルで定義します。AWS Proton では、AWS マネージドプロビジョニングまたはセルフマネージドプロビジョニングのいずれかでコンポーネントインフラストラクチャをプロビジョニングできます。

ただし、コンポーネントは他の AWS Proton リソースといくつかの点で異なります。

  • デタッチ状態 — コンポーネントは、サービスインスタンスにアタッチしてそのインフラストラクチャを拡張するように設計されていますが、どのサービスインスタンスにもアタッチされていないデタッチ状態も可能です。コンポーネントのステータスの詳細については、「コンポーネントの状態」を参照してください。

  • スキーマなし — コンポーネントには、テンプレートバンドルにあるような関連スキーマはありません。コンポーネント入力はサービスによって定義されます。コンポーネントは、サービスインスタンスにアタッチされると入力を消費できます。

  • カスタマー管理のコンポーネントなし — AWS Proton では、常に管理者に代わってコンポーネントインフラストラクチャのプロビジョニングが行われます。コンポーネントにはあなた自身のリソースを持ち込むバージョンはありません。お客様による管理環境の詳細については、「環境の作成」を参照してください。

  • テンプレートリソースなし — 直接定義のコンポーネントには、環境やサービステンプレートと同様、関連テンプレートリソースはありません。IaC テンプレートファイルは、あなたがコンポーネントに直接提供します。同様に、コンポーネントのインフラストラクチャをプロビジョニングするためのテンプレート言語とレンダリングエンジンを定義するマニフェストはあなたが直接提供します。テンプレートファイルとマニフェストは、テンプレートバンドルのオーサリングと同様の方法であなたがオーサリングします。ただし、直接定義のコンポーネントでは、特定のロケーションにIaC ファイルをバンドルとして保存する必要はなく、あなたが、IaC ファイルからテンプレートリソースを AWS Proton で作成することはありません。

  • CodeBuild ベースのプロビジョニングなしCodeBuild ベースのプロビジョニングと呼ばれるあなた自身のカスタムプロビジョニングスクリプトで、あなたが直接定義のコンポーネントをプロビジョニングすることはできません。詳細については、「CodeBuild プロビジョニングの働き」を参照してください。

AWS Protonコンソールのコンポーネント

コンポーネントのAWS Proton 作成、更新、表示、使用は、AWS Protonコンソールで行います。

次のコンソールページはコンポーネントに関連があります。ここには、トップレベルのコンソールページまでの直接リンクがあります。

  • コンポーネント — あなたの AWS アカウント内のコンポーネントのリストを表示できます。新しいコンポーネントの作成や、既存のコンポーネントの更新、または削除ができます。コンポーネントの詳細ページを表示するには、コンポーネント名を選択します。

    [環境の詳細] ページと [サービスインスタンスの詳細] ページにも同様のリストがあります。これらのリストには、現在表示されているリソースに関連するコンポーネントのみが表示されます。これらのリストのどれかからコンポーネントを作成するとき、[コンポーネントを作成] ページでは、関連する環境が AWS Proton によってあらかじめ選択されています。

  • コンポーネントの詳細 — コンポーネントの詳細ページを表示するには、[コンポーネント] リストでコンポーネント名を選択します。

    詳細ページで、コンポーネントの詳細とステータスを表示し、コンポーネントを更新するか、削除します。出力 (例、プロビジョニングされたリソース ARN など)、プロビジョニングされた AWS CloudFormation スタック、割り当てられたタグのリストの表示や管理ができます。

  • コンポーネントを作成 — コンポーネントを作成します。コンポーネント名と説明を入力し、関連するリソースを選択し、コンポーネントソース IaC ファイルを指定して、タグを割り当てます。

  • コンポーネントの更新 — コンポーネントを更新するには、[コンポーネント] リストでそのコンポーネントを選択し、[アクション] メニューで [コンポーネントの更新] を選択します。または、[コンポーネント詳細] ページで [更新] を選択します。

    あなたはリージョンを更新できません。あなたはリージョンは更新できません。また、更新が成功した後にコンポーネントを再デプロイするかどうかはあなたが選択できます。

  • 環境設定 — 環境の作成時や更新時には、コンポーネントロールを指定できます。このロールは、環境内で直接定義のコンポーネントを実行する機能を制御します。またそれらの機能をプロビジョニングするための権限がこのロールで与えられます。

  • 新しいサービステンプレートバージョンの作成 — サービステンプレートバージョンの作成時に、そのテンプレートバージョンの「サポート対象のコンポーネントソース」を指定できます。これにより、サービスのサービスインスタンスにコンポーネントをアタッチする機能が、このテンプレートバージョンに基づいて制御されます。

AWS Proton API と AWS CLI のコンポーネント

AWS Proton API または AWS CLI で、AWS Proton コンポーネントの作成、更新、表示、使用を行います。

次の API アクションは AWS Proton コンポーネントリソースを直接管理します。

  • CreateComponent — AWS Proton コンポーネントを作成します。

  • DeleteComponent — AWS Proton コンポーネントを削除します。

  • GetComponent — コンポーネントの詳細データを取得します。

  • ListComponentOutputs — コンポーネントのコードとしてのインフラストラクチャ (IaC) 出力のリストを取得します。

  • ListComponentProvisionedResources — コンポーネントにプロビジョニングされたリソースを詳細とともに一覧表示します。

  • ListComponents — コンポーネントをサマリーデータと共に一覧表示します。結果リストは、環境やサービスごとに、または 1 つのサービスインスタンスでフィルタリングできます。

他の AWS Proton リソースの次の API アクションには、コンポーネントに関連する機能がいくつかあります。

  • CreateEnvironmentUpdateEnvironment — 直接定義のコンポーネントを AWS Proton でこの環境でプロビジョニングするときに使用する IAM サービスロールの Amazon リソースネーム (ARN) は、componentRoleArn で指定します。直接定義のコンポーネントでプロビジョニングできるインフラストラクチャの範囲がこれで決定します。

  • CreateServiceTemplateVersion — サポートされるコンポーネントソースは、supportedComponentSources で指定します。サポートされるソースがあるコンポーネントは、このサービステンプレートバージョンに基づいてサービスインスタンスにアタッチできます。

コンポーネントに関するよくある質問

コンポーネントのライフサイクルはどのようになっていますか?

コンポーネントはアタッチされた状態でもデタッチされた状態でもかまいません。コンポーネントは、ほとんどの時間、サービスインスタンスにアタッチしてインフラストラクチャを強化する設計になっています。切り離されたコンポーネントは移行状態なので、制御された安全な方法で、コンポーネントの削除や、別のサービスインスタンスへのアタッチができます。詳細については、「コンポーネントの状態」を参照してください。

アタッチしたコンポーネントを削除できないのはなぜですか?

解決策:アタッチされているコンポーネントを削除するには、コンポーネントを更新してサービスインスタンスから切り離し、サービスインスタンスの安定性を確認してから、コンポーネントを削除します。

なぜこれが必要なのですか? アタッチされたコンポーネントは、あなたのアプリケーションがランタイム機能を実行するのに必要な追加のインフラストラクチャを提供します。サービスインスタンスがコンポーネント出力を使用して、このインフラストラクチャのリソースを検出して使用している可能性があります。コンポーネントを削除して、そのインフラストラクチャリソースを削除すると、アタッチされているサービスインスタンスに影響が及ぶおそれがあります。

追加の安全対策として、AWS Proton では、削除する前にコンポーネントを更新してサービスインスタンスからデタッチする必要があります。その後、あなたのサービスインスタンスを検証すれば、引き続き適切にデプロイされて機能することを確認できます。問題が見つかった場合は、すぐにコンポーネントをサービスインスタンスに再アタッチすれば、問題の修正に取り組むことができます。あなたのサービスインスタンスがコンポーネントに依存していないことが確認できたら、コンポーネントを安全に削除できます。

コンポーネントにアタッチされているサービスインスタンスを直接変更できないのはなぜですか?

解決策:アタッチメントを変更するには、コンポーネントを更新してサービスインスタンスからデタッチし、コンポーネントとサービスインスタンスの安定性を確認してから、コンポーネントを新しいサービスインスタンスにアタッチします。

なぜこれが必要なのですか? コンポーネントはサービスインスタンスにアタッチされる設計になっています。インフラストラクチャリソースの命名と設定にサービスインスタンス入力が、あなたのコンポーネントによって使用される場合があります。アタッチされているサービスインスタンスを変更すると、コンポーネントが破壊されるおそれがあります (前の FAQ「アタッチしたコンポーネントを削除できないのはなぜですか?」で説明したように、サービスインスタンスの破壊と併せて)。アタッチされた状態では、たとえば、コンポーネントの IaC テンプレートで定義されているリソースの名前が変更され、場合によっては置き換えられるおそれがあります。

追加の安全対策として、AWS Proton ではコンポーネントを更新してサービスインスタンスからデタッチしてからでないと、別のサービスインスタンスにアタッチできないようになっています。そのため、コンポーネントを新しいサービスインスタンスにアタッチする前に、コンポーネントとサービスインスタンスの両方の安定性を検証できます。