[レポート] AWS ProtonとGitを介したコードとアーキテクチャの配信 #CON202 #reinvent

2022.01.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

AWS re:Invent 2021で行われた、「Delivering code and architectures through AWS Proton and Git」のセッションレポートです。

この記事では、要点・見どころ・ポイントについてまとめてみました。

セッション概要

DESCRIPTION

Infrastructure operators are looking for ways to centrally define and manage the architecture of their services, while developers need to find a way to quickly and safely deploy their code. In this session, learn how to use AWS Proton to define architectural templates and make them available to development teams in a collaborative manner. Also, learn how to enable development teams to customize their templates so that they fit the needs of their services.

SPEAKERS

  • David Killmon
  • Rafa Alvarez

SESSION LEVEL

  • 200 - Intermediate

はじめに

AWS Protonは2020年のre:Inventにてプレビューで登場しました。
そしてその後、2021年の7月にGAとなりました。

このセッションでは、AWS Protonの有効性と新機能が紹介されています。

AWS Protonが必要な背景

サービスに関わるチームには様々な関心事があります。

  • 開発チームの関心事
    • 顧客の問題を解決するためのユーザーストーリーを達成出来ているか
    • バグがなく動作しているか
    • パフォーマンスの問題はないか
  • プラットフォーム管理チームの関心事
    • 過剰にプロビジョニングされていないか
    • セキュリティの問題はないか。データは保護されているか
    • 開発チームがデプロイしたアプリケーションがそれらの基準を満たしているか

そして、これらを実現・確認するために様々なツールが存在しています。
しかし、開発チームが用意されたテンプレートを簡単に利用出来て、かつそれらが正しく利用されているかをプラットフォーム管理チームが把握出来るようにするためにはどうしたら良いでしょうか。

開発チームとプラットフォーム管理チームが連携する必要があります。

AWS Protonは何を解決してくれるか

AWS Protonは、開発者とプラットフォーム管理チームのコラボレーションを実現するためのスペースを提供してくれます。

主に以下の機能が提供されています。

  • 承認された組織の独自テンプレートをチーム間で共有
  • Protonからデプロイ、監視・管理などの機能を提供
  • 様々な環境とサービスのバージョンを管理

そして、セッション内ではこれらの機能を使った3つのユースケースが紹介されています。

  1. Protonを通して各チームへ最新のインフラストラクチャを提供する
  2. Protonテンプレートで、インフラストラクチャに精通していない開発チームでもデプロイできる状態を提供する
  3. 部分的にProtonテンプレートを利用し、徐々にクラウド移行を進める

AWS Protonを採用する際

このセッションではProtonを採用する際にはスモールスタートで適用し、AWS Protonが機能するかを評価出来た後に徐々に範囲を広げていったり、テンプレートを拡張していくことを推奨しています。

AWS Protonの新機能を紹介

新機能1: TemplateOps

従来はProtonの管理外でProtonテンプレートへの新機能をリクエストし、開発されたテンプレートを検証した後にS3へアップロードする必要がありました。

TemplateOpsと呼ばれる機能では、新しいテンプレートへのリクエストおよび更新をgitとProtonを同期することでコミュニケーションから更新までを行うことが出来るようになりました。

新機能2: Terraform対応

Proton利用ユーザーからTerraformへの対応を求める声が多かったようですが、遂にサポートされたようです。

デモンストレーション

セッションの後半では、開発チームとプラットフォーム管理チームに分かれたデモンストレーションが行われています。
Protonを使わなかった場合にどういう問題が起きるのか。Protonを使うとコミュニケーションやデプロイフローがどう改善されるのかがデモンストレーションされています。

Protonを利用する前は、開発者はプラットフォーム管理者から提供されたテンプレートをよく理解できないまま必要な設定を独自に追加し、デプロイを行っています。
それによって様々な問題が発生してしまいました。

  • IAMポリシーで過剰な権限が設定されてしまう
  • セキュリティグループで広範囲のアクセスが許可されてしまっている
  • 過剰なスペックでデプロイされている

Protonでテンプレートを提供しデプロイを行うことで、開発者は迅速にサービスを準備出来るまま、独自で違反した構成を追加することができなくなりました。
テンプレートへ機能を追加したくなった際はプルリクエストを通してプラットフォーム管理チームが承認した機能のみがバージョンアップされたテンプレートとして、安全に利用出来るようになります。

また、テンプレートとデプロイされたサービスはそれぞれバージョンで管理され、バージョンの追跡やバージョンアップされたテンプレートの適用操作を行うことも出来るようになっています。

まとめ

このセッションを見るまでは、ProtonはCloudFormationやCI/CDパイプラインの延長、あるいは類似した「何か」程度の認識でした。
しかしこのセッションを視聴し少しわかった気がします。

一番大きな点として、Protonは管理者が承認したテンプレートのみを提供できるガードレールの役目を担うという点です。
承認されたテンプレートのみなので意図しない改造が混入されていないことを保証し、改造のリクエストは統合されたプルリクエストを通して随時承認することが出来ます。それでいて、開発者は好きな時にテンプレートを利用することが出来ます。

テンプレート同期やパイプライン連携など様々な機能がありますが、その中でもテンプレートとサービスのバージョン管理機能が最高だと思いました。
CloudFormation単体だとどの時点のテンプレートでスタックが作成されたのかを即座に確認するのは難しかったり、別の方法で工夫する必要があると思いますが、Protonではそのための機能が最初から備わっています。
思い返すと、CloudFormationのみの場合は本番環境とステージング環境で同じテンプレートを使っているかどうか担保するのが難しいので、スタック詳細からテンプレートの中身を確認する必要があったと思います。
Protonを使うと即座に環境毎のテンプレートバージョンを確認することが出来ますね。とても良いです。