AWS Proton でハッピー DevOps ライフ(に期待)

記事タイトルとURLをコピーする

はじめに

こんにちは。クラウドインテグレーション部の内村です。

AWS re:Invent 2020 もとうとう、今週までですね。(2020年12月15日火曜現在)例年通り数多くの新サービス・アップデートが発表されましたが、お気に入りの内容は何になりますか?

私は、お客様とお話させて頂く機会の多い DevOps に興味がありますが、その中でも AWS Proton の発表に興奮をしましたので、勘所をメインにシェアさせていただきます。

aws.amazon.com

What is AWS Proton

AWS Proton ですが、コンテナーおよびサーバーレスアプリケーションのためのデプロイサービス、という位置づけと捉えています。 例えば、基盤チームと開発チーム、2つのチームでシステム運用を行う場合、基盤チームは AWS Proton を利用してインフラの設定やコードのデプロイ、モニタリング、更新に必要な様々なツールをセットアップできるサービスです。 開発チームは、基盤チームから渡された定義済みの環境を引き受け、自身の開発物をビルド、デプロイができるとされています。

https://docs.aws.amazon.com/ja_jp/proton/latest/userguide/images/service-diagram_1.png AWS Proton Users Guide より。

AWS がこのサービスを説明する時に利用しているシチュエーションが、数百、数千のマイクロサービスのインフラで CI/CD を構成している環境です。 このような環境(システム)の維持、運用・管理は、負担が大きい事は容易に想像できます。これらを効率的に運用・管理するための方法を提供する目的で AWS Proton をリリースしていると思われます。

AWS Proton のリソース

現時点のドキュメントやリリース情報を確認したところ、主なコンポーネントは以下となっています。

  • Services
  • Service instances
  • Environments
  • Templates

手順としては以下と想定しています。

  1. Environment templates の作成
  2. Service templates の作成
  3. Environments 構築
  4. Services の展開
  5. 自身のアプリケーションを開発、CI/CD(デプロイ)、そして各テンプレートの更新

Templates には、Environment templates(環境テンプレート)と Service templates(サービステンプレート)の2種類が存在します。 まずは、Environment templates(環境テンプレート)でアプリケーションが稼働するための環境、例えばネットワーク(Amazon VPC)などを構築します。 次に、Service templates(サービステンプレート)にて、コンテナーまたはサーバーレスアプリケーションの定義を行います。

Environment templates(環境テンプレート)は、Amazon VPC, Subnets, Internet Gateway などの基本的なネットワーク構築(定義)を確認できましたが、Service templates(サービステンプレート)は以下のように、アプリケーションが稼働するデプロイメントパイプラインを構築するための定義を確認しました。

  • AWS Lambda
  • Amazon ECS タスク定義
  • ALB
  • Amazon CloudWatch Alarm
  • AWS CodePipeline(継続的インテグレーションと継続的デリバリー(CI/CD)パイプライン)
  • AWS CodeBuild
  • 監視ツールの定義
  • etc.

AWS サンプル

また、AWS がサンプルテンプレートを公開しています。 aws-samples/aws-proton-sample-templates

簡単にですが、これは以下のように読み解くことができました。

  • Environment templates(環境テンプレート)
    • environment/schema/schema.yaml
    • environment/infrastructure/cloudformation.yaml
    • environment/infrastructure/manifest.yaml
  • Service templates(サービステンプレート)
    • service/schema/schema.yaml
    • service/infrastructure/cloudformation.yaml
    • service/infrastructure/manifest.yaml
    • service/pipeline/cloudformation.yaml
    • service/pipeline/manifest.yaml

それぞれ cloudformation.yaml とあるように、AWS Proton の実態は CFn テンプレートで定義しているようです。 ただし、Service templates(サービステンプレート)のパイプライン定義は、CFn テンプレートとは違うフォーマットで書かれているようです。 実際に利用する際には、上記のサンプルを加工して利用を開始する、となる見込みです。

テンプレート更新(運用)

また説明にある特徴として、「テンプレートが変更された場合、インフラストラクチャチームはそれらを最新の定義にアップグレード」とありました。 各テンプレートは世代(バージョン)管理ができるようです。 また、アプリケーションの状態を監視し、問題が発生した場合にロールバック可能が可能な見込みです。

プレビュー

AWS Proton は現在、以下の地理的リージョンで、パブリックプレビューとして公開されています。AWS アカウントをお持ちの方であれば、実際に動作を試すことが可能です。

  • 米国東部(バージニア北部) (us-east-1)
  • 米国東部(オハイオ) (us-east-2)
  • 米国西部(オレゴン) (us-west-2)
  • アジアパシフィック(東京) (ap-northeast-1)
  • 欧州(アイルランド) (eu-west-1)

所感

今まで、基盤チーム(いわゆるインフラ)と開発チームの AWS リソースを管理・運用する場合、それぞれ別々の AWS CloudFormation テンプレート等で管理・構築する必要がありました。

チームごとにテンプレートが分かれる場合、スタック構築する際に投入する環境変数(Parameters - 値)がスタック毎で違ったり(任せていたり)、それを理由に意図した内容とは違う環境で、開発チームが開発を続け、ある日マージしようとしたら環境依存による衝突が起こる、という可能性がありました。

AWS Proton では環境変数もコードで管理ができますので、ますます環境依存によるリスクが減らせて、ハッピー DevOps ライフが過ごせそうな予感です。

現在このサービスはプレビューであるため、プロダクション環境(本番運用環境)で動作しているデプロイメントパイプラインを即時置き換える事は、今はまだお勧めできません。私も検証環境で試験を行い、GA (一般公開)された際にはお客様にご案内出来るように、努めてまいります。

これらの情報は、現在開催中の AWS re:Invent 2020 の "AWS Proton: Automating infrastructure provisioning & code deployments" のセッションから確認することができます。また、AWS re:Invent 2020 に登録されている方は "Attachments" のタブから資料をダウンロードすることもできますのでぜひご覧ください。

※ セッションによっては資料公開されていない場合があります。ご了承ください。

余談 : hoodies give away!

つい先程確認しましたら、hoodies(パーカー)プレゼントのページがありました。まだな方は是非〜。

https://reinvent.awsevents.com/sponsors/hoodie-giveaway/