Cloud Service
AWS Proton
プラットフォームチームがコンテナやサーバーレスのデプロイ基盤をテンプレート化し、開発者にセルフサービスで提供できるマネージドなアプリ配信サービス。
- 1.インフラとCI/CDのひな形をテンプレート化し、開発者にセルフサービスのデプロイ基盤を提供する
- 2.環境テンプレートとサービステンプレートを分離し、共有基盤の上に各アプリをデプロイする
- 3.テンプレートを更新すると、それを使う全サービスへ標準化された構成を一括反映できる
AWS Proton は、プラットフォームチームがコンテナやサーバーレスアプリケーションのインフラとデプロイパイプラインを「テンプレート」として定義し、開発者がそのテンプレートを使ってセルフサービスでアプリをデプロイできるようにするマネージドサービスです。標準化された基盤を組織全体で共有しつつ、各チームがインフラの詳細を意識せずにデプロイできる点が特徴です。
解決する課題
- アプリごとにインフラ定義やパイプラインを個別に書き起こすため、構成がチームごとにバラバラになる → 標準テンプレートで統一したい
- 開発者がネットワーク・権限・CI/CD の詳細まで把握しないとデプロイできない → 基盤の複雑さを隠蔽してセルフサービス化したい
- ベストプラクティスやセキュリティ要件を更新しても、全アプリに反映するのが手作業で漏れやすい → テンプレート更新で一括展開したい
- プラットフォームチームと開発チームの責任境界があいまいで、どちらが何を管理するか不明確 → 役割を分けて運用したい
- 新しいマイクロサービスを立ち上げるたびに環境構築に時間がかかる → ひな形から短時間で起動したい
主要概念と用語
- 環境テンプレート(Environment Template): ネットワーク・クラスター・共有リソースなど、複数のサービスが土台として使う共有インフラを定義するテンプレート
- 環境(Environment): 環境テンプレートを実体化したもの。VPC やクラスターなど、その上に各サービスがデプロイされる基盤となる
- サービステンプレート(Service Template): 個々のアプリケーションのインフラとデプロイパイプラインを定義するテンプレート。環境の上で動く前提で記述する
- サービス(Service): サービステンプレートを実体化したアプリのデプロイ単位。1つ以上のサービスインスタンスを持つ
- サービスインスタンス(Service Instance): あるサービスを特定の環境にデプロイした実体。同じサービスを複数環境に展開できる
- テンプレートバンドル(Template Bundle): テンプレートの実体。インフラを記述する IaC(CloudFormation または Terraform)と、入力値を定義するスキーマをまとめたもの
- スキーマ(Schema): テンプレートが受け取るパラメータの定義。開発者が入力する値の型や必須項目を規定する
- テンプレートバージョン: メジャー/マイナーで管理される版。マイナー更新は後方互換、メジャー更新は互換性のない変更を表す
- プロビジョニング方式: AWS マネージド(Proton が CloudFormation を実行)と、セルフマネージド(pull request 方式で Terraform 等を外部実行)の2方式がある
仕様・制限・クォータ
- テンプレートの IaC は CloudFormation と Terraform に対応し、入力スキーマは OpenAPI 形式で記述する
- プロビジョニングには、Proton 自身が CloudFormation を実行するAWS マネージドプロビジョニングと、Git リポジトリへの pull request を通じて外部ツールが実行するセルフマネージドプロビジョニングがある
- テンプレートはメジャー/マイナーのバージョンで管理され、サービスインスタンスを新しいバージョンへ更新して構成を反映できる
- 環境・サービス・サービスインスタンス・テンプレートなどの数にはアカウント単位のクォータがあり、必要に応じて上限緩和を申請できる
- テンプレートバンドルは S3 に配置するか、Git リポジトリと同期させて管理できる
- AWS Proton が利用できるリージョンには制限があるため、利用前に対応リージョンを確認する
内部の仕組み
Proton では、まずプラットフォームチームが環境テンプレートとサービステンプレートを作成します。環境テンプレートには VPC やクラスターなど共有基盤の IaC を、サービステンプレートには個々のアプリのインフラとデプロイパイプラインの IaC を、それぞれ入力スキーマとともにテンプレートバンドルとして登録します。
プラットフォームチームが環境テンプレートから環境をプロビジョニングすると、共有インフラが構築されます。次に開発者がサービステンプレートを選び、必要なパラメータ(コンテナイメージのリポジトリやポートなど)をスキーマに沿って入力してサービスを作成すると、Proton は指定した環境の上にサービスインスタンスをデプロイします。
プロビジョニング方式が AWS マネージドの場合、Proton が裏側で CloudFormation スタックを作成・更新してリソースを構築します。セルフマネージドの場合、Proton はレンダリング済みの IaC を Git リポジトリへ pull request として送り、CodeBuild や外部の Terraform 実行基盤が適用します。テンプレートを新しいバージョンへ更新すると、それを使う各サービスインスタンスを順次新バージョンへ移行でき、標準化された構成変更を組織全体へ展開できます。
共有インフラ(環境)とアプリ個別のインフラ(サービス)をテンプレートで分けることで、プラットフォームチームは土台を、開発チームはアプリを、それぞれ独立して管理できます。1つの環境の上に複数のサービスインスタンスを載せられるため、ネットワークやクラスターの重複構築を避けられます。
設計パターン / ベストプラクティス
- 責任境界をテンプレートで分ける: プラットフォームチームが環境・サービステンプレートを管理し、開発者は入力スキーマ経由でのみインフラに触れるようにする
- 共有基盤は環境テンプレートに寄せる: VPC・クラスター・共有のデータストアなどは環境側にまとめ、サービスは環境の出力を参照する
- スキーマで入力を絞る: 開発者が指定できる項目を入力スキーマで限定し、ガードレールを効かせて逸脱を防ぐ
- バージョン更新で標準を展開: セキュリティやベストプラクティスの変更はテンプレートのマイナー/メジャー更新として配り、各サービスインスタンスへ反映する
- IaC ツールを統一する: 組織の方針に合わせて CloudFormation か Terraform を選び、プロビジョニング方式(AWS マネージド/セルフマネージド)を揃える
- テンプレートを Git で管理: テンプレートバンドルを Git 同期させ、レビューとバージョン管理のプロセスに乗せる
運用・監視
- 各サービスインスタンスが現在どのテンプレートバージョンで動いているかを一覧で把握し、古いバージョンを順次更新する
- デプロイの状態(進行中・成功・失敗)をコンソールや CLI で確認し、失敗時は基盤となる CloudFormation スタックのイベントで原因を追跡する
- すべての API 操作は CloudTrail に記録されるため、誰がテンプレートを更新し、どのサービスをデプロイしたかを監査できる
- AWS マネージドプロビジョニングでは、実体は CloudFormation スタックなので、ドリフトやスタックの状態を CloudFormation 側でも監視する
- テンプレートのメジャー更新時は、互換性のない変更が含まれるため、サービスインスタンスへの適用を段階的に行う
コスト
AWS Proton 自体には追加の利用料金はかからず、Proton を通じてプロビジョニングした実際の AWS リソース(ECS・Fargate・Lambda・VPC・ロードバランサーなど)と、デプロイに用いる CodePipeline・CodeBuild・S3 などにそれぞれのサービス料金が発生します。つまりコストは「テンプレートが生成するリソースの構成」に依存します。テンプレート設計の段階で、不要に高価なリソースを既定値にしないよう配慮することがコスト最適化につながります。最新の料金は公式の料金ページで確認してください。
セキュリティ
- テンプレートの作成・更新やサービスのデプロイ権限は IAM で制御し、プラットフォームチームと開発者でロールを分離する
- Proton がリソースをプロビジョニングする際に引き受ける サービスロールには、必要なリソースの作成権限だけを与える最小権限を設計する
- 入力スキーマで開発者が指定できる値を制限することで、意図しない権限や公開設定を防ぐガードレールとして機能させる
- セルフマネージドプロビジョニングでは、IaC を適用する Git リポジトリと実行基盤のアクセス制御を適切に行う
- テンプレートの更新を通じてセキュリティ設定を一括で配布できるため、脆弱な構成の是正を組織全体へ素早く展開できる
関連サービス・比較
| 観点 | AWS Proton | AWS CloudFormation |
|---|---|---|
| 主目的 | テンプレート化した配信基盤のセルフサービス提供 | IaCによるリソースのプロビジョニング |
| 抽象度 | 環境とサービスを分けた高レベルの枠組み | リソース単位の低レベルな記述 |
| 対象利用者 | プラットフォームチームと開発者を分離 | インフラを記述する担当者 |
| CI/CD | デプロイパイプラインをテンプレートに内包 | パイプラインは別途構築が必要 |
| IaCツール | CloudFormationまたはTerraformを利用 | CloudFormation本体として動作 |
ハンズオン / CLI例
# 環境テンプレートを作成
aws proton create-environment-template \
--name my-env-template \
--display-name "Shared VPC and Cluster"
# 環境テンプレートのメジャーバージョンを作成(バンドルはS3に配置)
aws proton create-environment-template-version \
--template-name my-env-template \
--source s3="{bucket=my-bucket,key=env-template.tar.gz}"
# サービステンプレートを作成
aws proton create-service-template \
--name my-service-template \
--display-name "Fargate Service with Pipeline"
# 環境を作成(テンプレートを実体化)
aws proton create-environment \
--name production \
--template-name my-env-template \
--template-major-version 1 \
--proton-service-role-arn arn:aws:iam::111122223333:role/ProtonServiceRole \
--spec file://env-spec.yaml
# サービスを作成して環境上にデプロイ
aws proton create-service \
--name my-app \
--template-name my-service-template \
--template-major-version 1 \
--repository-connection-arn arn:aws:codestar-connections:us-east-1:111122223333:connection/EXAMPLE \
--repository-id my-org/my-app \
--branch-name main \
--spec file://service-spec.yaml
AWS Service
AWS Protonを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
管理・ガバナンス
比較で見る軸
クラウド: AWS / カテゴリ: 管理・ガバナンス / 難易度: intermediate
導入後に効く点
環境テンプレートとサービステンプレートを分離し、共有基盤の上に各アプリをデプロイする
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- 管理・ガバナンス
- 難易度
- intermediate
- 関連資格
- DOP-C02 / DVA-C02 / SAP-C02
- 設計柱
- operational / security / reliability
判断チェックリスト
- 自社の用途が「管理・ガバナンス / operational」に近いか確認する。
- 強みである「インフラとCI/CDのひな形をテンプレート化し、開発者にセルフサービスのデプロイ基盤を提供する」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。