AWS Proton ではどのようにしてインフラストラクチャがプロビジョニングされるのか - AWS Proton

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

AWS Proton ではどのようにしてインフラストラクチャがプロビジョニングされるのか

AWS Proton では、いくつかの方法のいずれかでインフラストラクチャがプロビジョニングされます。

  • AWS マネージドプロビジョニング — AWS Proton があなたに代わってプロビジョニングエンジンを呼び出します。この方法は AWS CloudFormation テンプレートバンドルのみをサポートします。詳細については、「AWS CloudFormation IaC ファイル」を参照してください。

  • CodeBuild プロビジョニング — AWS Proton は、あなたが提供したシェルコマンドの実行に AWS CodeBuild を使用します。あなたのコマンドで、AWS Proton が提供する入力を読み取ることができます。その場合、それれらのコマンドで、インフラのプロビジョニングやデプロビジョニングを行い、出力値を生成します。この方法のテンプレートバンドルには、マニフェストファイル内のあなたのコマンドと、これらのコマンドで必要になるプログラム、スクリプト、またはその他のファイルが含まれます。

    CodeBuild プロビジョニングの使用例として、AWS Cloud Development Kit (AWS CDK) を使用して AWS リソースをプロビジョニングするコードと、CDK をインストールして CDK コードを実行するマニフェストを含めることができます。

    詳細については、「CodeBuild プロビジョニングテンプレートバンドル」を参照してください。

    注記

    CodeBuild プロビジョニングは環境とサービスで使用できます。現時点では、この方法でコンポーネントをプロビジョニングすることはできません。

  • セルフマネージドプロビジョニング — AWS Proton はあなたが提供したリポジトリにプルリクエスト (PR) を発行し、そこであなた自身のインフラストラクチャデプロイメントシステムがプロビジョニングプロセスを実行します。この方法は Terraform テンプレートバンドルのみをサポートします。詳細については、「Terraform IaC ファイル」を参照してください。

AWS Proton は環境やサービスごとにプロビジョニング方法を個別に決定して設定します。環境またはサービスを作成または更新するとき、AWS Proton はあなたが提供したテンプレートバンドルを調べ、テンプレートバンドルが示すプロビジョニング方法を決定します。環境レベルでは、AWS Identity and Access Management (IAM) ロール、環境アカウント接続、またはインフラストラクチャリポジトリなど、環境とその潜在サービスでプロビジョニング方法に必要になる可能性があるパラメータを指定します。

AWS Proton をサービスのプロビジョニングに利用する開発者は、プロビジョニング方法に関係なく同じ経験をします。開発者はプロビジョニング方法を意識する必要はなく、サービスのプロビジョニングプロセスのいかなる要素も変更する必要はありません。サービステンプレートはプロビジョニング方法を設定します。また、開発者がサービスをデプロイする各環境は、サービスインスタンスのプロビジョニングに必要なパラメータを提供します。

次の図は、さまざまなプロビジョニング方法の主な特徴をまとめたものです。表の後のセクションでは、各方法の詳細を説明します。

プロビジョニング方法 テンプレート プロビジョニング実行者 ステータス追跡者

AWS による管理

マニフェスト、スキーマ、IaC ファイル (CloudFormation)

AWS Proton (CloudFormation を通じて)

AWS Proton (CloudFormation を通じて)

CodeBuild

マニフェスト (コマンド付き)、スキーマ、コマンド依存関係 (AWS CDK コードなど)

AWS Proton (CodeBuild 経由)

AWS Proton (コマンドは CodeBuild を介してステータスを返します)

self-managed

マニフェスト、スキーマ、IaC ファイル (Terraform)

コード (Git アクション経由)

コード (API 呼び出しを通じて AWS に伝達)

AWS マネージドプロビジョニングの働き

環境またはサービスで AWS マネージドプロビジョニングが使用される場合、インフラストラクチャは次のようにプロビジョニングされます。

  1. AWS Proton カスタマー (管理者または開発者) は AWS Proton リソース (環境またはサービス) を作成します。カスタマーはリソースのテンプレートを選択し、必要なパラメータを指定します。詳細については、次の「AWS マネージドプロビジョニングに関する考慮事項」セクションを参照してください。

  2. AWS Proton では、リソースをプロビジョニングするための AWS CloudFormation テンプレート一式がレンダリングされます。

  3. AWS Proton は、レンダリングされたテンプレートでプロビジョニングを開始するよう AWS CloudFormation を呼び出します。

  4. AWS Proton は、AWS CloudFormation デプロイメントを継続的に監視します。

  5. プロビジョニングが完了すると、失敗した場合、AWS Proton はエラーを報告し、成功した場合はAmazon VPC IDなどのプロビジョニング出力を取得します。

次の図は、これらのステップのほとんどが、AWS Proton によって直接処理されることを示しています。

AWS Proton における AWS マネージドプロビジョニングを示す図

AWS マネージドプロビジョニングに関する考慮事項

  • インフラストラクチャプロビジョニングロール — 環境またはそこで実行されるサービスインスタンスのいずれかで AWS マネージドプロビジョニングが使用される可能性がある場合、管理者は IAM ロールを (AWS Proton 直接または環境アカウント接続の一部として) 設定する必要があります。AWS Proton はこのロールを使用して、AWS マネージドプロビジョニングリソースのインフラストラクチャをプロビジョニングします。ロールには、これらのリソースのテンプレートに含まれるすべてのリソースを作成するために AWS CloudFormation を使用する権限が必要です。

    詳細については、「IAM ロール」および「AWS Proton IAM サービスロールポリシーの例」を参照してください。

  • サービスプロビジョニング — 開発者がAWSマネージドプロビジョニングを使用するサービスインスタンスを環境にデプロイすると、AWS Proton はその環境に提供されたロールでサービスインスタンスのインフラストラクチャをプロビジョニングします。開発者にはこのロールは表示されず、変更することもできません。

  • パイプライン付きサービス — AWS マネージドプロビジョニングを使用するサービステンプレートには、AWS CloudFormation YAML スキーマに記述されたパイプライン定義が含まれる場合があります。 また AWS Proton は AWS CloudFormation を呼び出してパイプラインを作成します。AWS Proton がパイプラインの作成に使用するロールは、個々の環境のロールからは切り離されています。このロールは AWS アカウントレベルで 1 回だけ個別に AWS Proton に提供され、AWS すべてのマネージドパイプラインのプロビジョニングと管理に使用されます。このロールには、パイプラインに必要なパイプラインやその他のリソースを作成する権限が必要です。

    次の手順では、AWS Proton にパイプラインロールを指定する方法を示します。

    AWS Proton console
    パイプラインロールを提供する
    1. AWS Proton コンソールのナビゲーションペインで、[設定] > [アカウント設定] を選択し、[設定] を選択します。

    2. [パイプライン AWS マネージドロール] セクションを使用して、新規または既存のパイプラインロールを AWS マネージドプロビジョニング用に設定します。

    AWS Proton API
    パイプラインロールを提供するには
    1. UpdateAccountSettings API アクションを使用してください。

    2. pipelineServiceRoleArnパラメータでパイプラインサービスロールの Amazon リソースネーム (ARN) を指定します。

    AWS CLI

    パイプラインロールを指定する

    次のコマンドを実行します。

    $ aws proton update-account-settings \ --pipeline-service-role-arn \ "arn:aws:iam::123456789012:role/my-pipeline-role"

CodeBuild プロビジョニングの働き

環境またはサービスで CodeBuild プロビジョニングが使用される場合、インフラストラクチャは次のようにプロビジョニングされます。

  1. AWS Proton カスタマー (管理者または開発者) は AWS Proton リソース (環境またはサービス) を作成します。カスタマーは、リソースのテンプレートを選択し、必要なパラメータを指定します。詳細については、次の「CodeBuild プロビジョニングに関する考慮事項」セクションを参照してください。

  2. AWS Proton では、リソースをプロビジョニングするための入力パラメータ値がある入力ファイルがレンダリングされます。

  3. AWS Proton は CodeBuild を呼び出してジョブを開始します。CodeBuild ジョブは、テンプレートで指定されたカスタマーシェルコマンドを実行します。これらのコマンドは必要なインフラストラクチャをプロビジョニングし、オプションで入力値を読み取ります。

  4. プロビジョニングが完了すると、最後のカスタマーコマンドはプロビジョニングステータスを CodeBuild に返し、NotifyResourceDeploymentStatusChange AWS Proton API アクションを呼び出して、Amazon VPC ID (存在する場合) などの出力を提供します。

    重要

    コマンドでプロビジョニングステータスが正しく CodeBuild に返り、出力が提供されたことを確認してください。そうしないと、AWS Proton はプロビジョニングステータスを適切に追跡できず、サービスインスタンスに正しい出力を提供できません。

次の図は、AWS Proton が実行するステップと、CodeBuildジョブ内でコマンドが実行するステップを示したものです。

AWS Proton の CodeBuild ベースのプロビジョニングを示す図

CodeBuild プロビジョニングに関する考慮事項

  • インフラストラクチャプロビジョニングロール — 環境またはそこで実行されているサービスインスタンスが CodeBuild ベースのプロビジョニングを使用する可能性がある場合、管理者は IAM ロールを (直接または AWS Proton 環境アカウント接続の一部として) 設定する必要があります。 AWS Proton はこのロールで、これらの CodeBuild プロビジョニングリソースのインフラストラクチャをプロビジョニングします。ロールには、CodeBuild を使用して、これらのリソースのテンプレート内のコマンドによって提供されるすべてのリソースを作成するための権限が必要です。

    詳細については、IAM ロール および AWS Proton IAM サービスロールポリシーの例 を参照してください。

  • サービスプロビジョニング — 開発者がCodeBuildプロビジョニングを使用するサービスインスタンスを環境にデプロイすると、AWS Proton はその環境に提供されたロールでサービスインスタンスのインフラストラクチャをプロビジョニングします。開発者にはこのロールは表示されず、変更することもできません。

  • パイプライン付きサービス — CodeBuild プロビジョニングを使用するサービステンプレートには、パイプラインをプロビジョニングするコマンドが含まれる場合があります。 AWS Proton もCodeBuild を呼び出してパイプラインを作成します。AWS Proton がパイプラインの作成に使用するロールは、各環境のロールからは切り離されています。このロールは AWS アカウントレベルで一度だけ個別に AWS Proton に提供され、CodeBuild ベースのパイプラインのプロビジョニングと管理に使用されます。このロールには、パイプラインやパイプラインに必要なその他のリソースを作成する権限が必要です。

    次の手順では、AWS Proton にパイプラインロールを指定する方法を示します。

    AWS Proton console
    パイプラインロールを提供する
    1. AWS Proton コンソールのナビゲーションペインで、[設定] > [アカウント設定] を選択し、[設定] を選択します。

    2. Codebuild パイプラインプロビジョニングロールセクションを使用して、CodeBuild プロビジョニング用の新規または既存のパイプラインロールを設定します。

    AWS Proton API
    パイプラインロールを提供するには
    1. UpdateAccountSettings API アクションを使用してください。

    2. pipelineCodebuildRoleArn パラメータでパイプラインサービスロールの Amazon リソースネーム (ARN) を指定します。

    AWS CLI

    パイプラインロールを指定する

    次のコマンドを実行します。

    $ aws proton update-account-settings \ --pipeline-codebuild-role-arn \ "arn:aws:iam::123456789012:role/my-pipeline-role"

セルフマネージド型のプロビジョニングの働き

セルフマネージド型プロビジョニングを使用するように環境を設定すると、インフラストラクチャは次のようにプロビジョニングされます。

  1. AWS Proton カスタマー (管理者または開発者) AWS Proton はリソース (環境またはサービス) を作成します。カスタマーはリソースのテンプレートを選択し、必要なパラメータを指定します。環境については、カスタマーはリンクされたインフラストラクチャリポジトリも提供します。詳細については、次の「セルフマネージドプロビジョニングに関する考慮事項」セクションを参照してください。

  2. AWS Proton は Terraform テンプレート一式をレンダリングします。1 つ以上の Terraform ファイル (複数のフォルダーに分散する場合もあります) と 1 つの .tfvars 変数ファイルで構成されます。AWS Proton はリソース作成呼び出しで指定されたパラメータ値をこの変数ファイルに書き込みます。

  3. AWS Proton はレンダリングされた Terraform テンプレートとともに PR をインフラストラクチャリポジトリに送信します。

  4. カスタマー (管理者または開発者) が PR をマージすると、カスタマーの自動化コードによってプロビジョニングエンジンがトリガーされ、マージされたテンプレートでインフラストラクチャのプロビジョニングが開始されます。

    注記

    カスタマー (管理者または開発者) が PR を終了すると、AWS Proton はその PR は終了したと認識し、デプロイをキャンセル済みとしてマークします。

  5. プロビジョニングが完了すると、カスタマーの自動化コードは NotifyResourceDeploymentStatusChange AWS Proton API アクションを呼び出して、完了を通知し、ステータス (成功または失敗) を提示し、Amazon VPC ID (存在する場合) などの出力を提供します。

    重要

    自動化コードは必ず、プロビジョニングステータスと出力とともに AWS Proton にコールバックするようにしてください。そうでないと、プロビジョニングが必要以上に保留中であると見なされ、AWS Proton に [進行中] ステータスが表示され続けるおそれがあります。

以下の図は、AWS Proton が実行するステップと、独自のプロビジョニングシステムが実行するス テップです。

AWS Proton におけるセルフマネージドプロビジョニングを示す図

セルフマネージドプロビジョニングに関する考慮事項

  • インフラストラクチャリポジトリ — 管理者がセルフマネージドプロビジョニング用の環境を設定するとき、リンクされたインフラストラクチャリポジトリを用意する必要があります。 AWS Proton は PR をこのリポジトリに送信して、環境のインフラストラクチャとそこにデプロイされるすべてのサービスインスタンスをプロビジョニングします。リポジトリ内のカスタマー所有の自動化アクションは、環境とサービステンプレートに含まれるすべてのリソースを作成する権限を持つ IAM ロールと、宛先 AWS アカウントを反映した ID を引き受ける必要があります。ロールを引き受ける GitHub アクションの例については、『GitHub アクションの AWS 認証情報を設定アクション』ドキュメントの「ロールを引き受ける」を参照してください。

  • 権限 — プロビジョニングコードは、必要に応じてアカウントで認証 (たとえば、AWS アカウントの認証) を行い、リソースのプロビジョニングを許可する (たとえば、ロールを提供する) 必要があります。

  • サービスプロビジョニング — 開発者がセルフマネージドプロビジョニングを使用するサービスインスタンスを環境にデプロイすると、AWS Proton は、その環境に関連付けられたリポジトリに PR を送信して、サービスインスタンスのインフラストラクチャをプロビジョニングします。開発者にはこのリポジトリは表示されず、変更することもできません。

    注記

    サービスを作成する開発者は、プロビジョニング方法に関係なく同じプロセスを使用するため、違いは取り除かれています。ただし、セルフマネージドプロビジョニングでは、誰か (自分ではない場合もある) がインフラストラクチャリポジトリ内の PR をマージするまでプロビジョニングの開始を待たなければならないため、開発者への応答が遅くなるおそれがあります。

  • パイプライン付きサービス — セルフマネージドプロビジョニングを使用する環境のサービステンプレートには、Terraform HCL で記述されたパイプライン定義 (AWS CodePipeline パイプラインなど) が含まれる場合があります。AWS Proton でこれらのパイプラインをプロビジョニングできるように、管理者はリンクされたパイプラインリポジトリを AWS Proton に提供します。パイプラインをプロビジョニングするとき、リポジトリ内のカスタマー所有の自動化アクションは、パイプラインをプロビジョニングする権限と、宛先 AWS アカウントを反映する ID を持つ IAM ロールを引き受ける必要があります。パイプラインのリポジトリとロールは、個々の環境で使用されるロールからは切り離されています。リンクされたリポジトリは、AWS アカウントレベルで 1 回だけ個別に AWS Proton に提供され、すべてのパイプラインのプロビジョニングと管理に使用されます。ロールには、パイプラインやパイプラインに必要なその他のリソースを作成する権限が必要です。

    次の手順では、AWS Proton にパイプラインリポジトリとロールを提供する方法を示します。

    AWS Proton console
    パイプラインロールを提供する
    1. AWS Proton コンソールのナビゲーションペインで、[設定] > [アカウント設定] を選択し、[設定] を選択します。

    2. CI/CD パイプラインリポジトリセクションを使用して、新規または既存のリポジトリリンクを設定します。

    AWS Proton API
    パイプラインロールを提供する
    1. UpdateAccountSettings API アクションを使用してください。

    2. pipelineProvisioningRepository パラメータには、パイプラインリポジトリのプロバイダー、名前、ブランチを指定します。

    AWS CLI

    パイプラインロールを指定する

    次のコマンドを実行します。

    $ aws proton update-account-settings \ --pipeline-provisioning-repository \ "provider=GITHUB,name=my-pipeline-repo-name,branch=my-branch"
  • セルフマネージドプロビジョニング済みリソースの削除 — Terraform モジュールには、リソース定義に加えて、Terraform の運用に必要な設定要素が含まれる場合があります。そのため、AWS Proton は環境またはサービスインスタンスのすべての Terraform ファイルを削除することはできません。代わりに、AWS Proton はファイルに削除対象としてマークを付け、PR メタデータのフラグを更新します。あなたの自動化機能はそのフラグを読み取り、そのフラグで terraform destroy コマンドをトリガーできます。