Amazon Web Services ブログ

AWS Proton はじめの一歩

この記事は、 AWS Proton: A first look を翻訳したものです。

※日本語字幕の表示には、設定 → 字幕 → 自動翻訳 → 日本語をご選択ください

我々がお客様のエンジニアチームと会話するときに、特にエンタープライズ規模のお客様の場合、開発チームとプラットフォームチームに分かれて組織化されていることがよくあります。通常、開発チームはサービスの作成とメンテナンスを担当し、プラットフォームチームは開発チームが簡単にサービスを展開できるようなツールを構築しています。このツールには多くの場合、ビルドパイプラインや可観測性、スケーリング、およびセキュリティについての既知のベストプラクティスが組み込まれています。

本日、私たちは AWS Proton を紹介します。AWS Proton はAWS で実行されるサーバレスとコンテナベースのアプリケーションに、独自の方法でセルフサービスのインターフェースを提供したいプラットフォームエンジニアリングチームに向けてデザインされたサービスです。

コンテナでフロントエンド、もしくはAPI サービスを提供する一般的なユースケースを通して詳しく見てみましょう。
AWS Proton を利用すると、サービスチームは新しいInfrastructure as Code (IaC) の言語やコンテナオーケストレーション、ビルドパイプライン、オートスケーリングの仕組みについて学ぶ必要はありません。そのため、サービスチームはコードを書くことに集中することができます。プラットフォームチームはそのコードを実行するビジネス要件を定義し、サービスチームがプロビジョニングできるパッケージとして提供することができます。

最初に、サンプルのテンプレートのリポジトリをクローンします。いくつかのコマンドで、AWS のアカウントID を利用するので、環境変数にアカウントID を設定するところから始めましょう。

cd ~/environment/
account_id=$(aws sts get-caller-identity --output text --query Account)

AWS Proton のプレビュー中は、下記の手順でAWS CLI に追加のモデルを手動で設定する必要があります。

aws s3 cp s3://aws-proton-preview-public-files/model/proton-2020-07-20.normal.json .
aws s3 cp s3://aws-proton-preview-public-files/model/waiters2.json .
aws configure add-model --service-model file://proton-2020-07-20.normal.json --service-name proton-preview
mv waiters2.json ~/.aws/models/proton-preview/2020-07-20/waiters-2.json
rm proton-2020-07-20.normal.json

 

次に、テンプレートを格納するS3バケットを作ります。

aws s3api create-bucket --bucket "proton-cli-templates-${account_id}" --region us-east-1

 

「Load Balanced Fargate Service」を実行しようとしているので、そのテンプレートのディレクトリに移動します。(リポジトリをクローンした場所から移動します)

cd ~/environment/aws-proton-sample-templates/loadbalanced-fargate-svc/

 

Protonは、Identity and Access Management (IAM) ロールを利用してインフラストラクチャを構築するので、必要に応じて簡単にカスタマイズできます。この例では、提供されたサンプルロールとポリシーを使用します。最初のコマンドはProtonServiceRole というロールを作成します。2つ目のコマンドは、AWS が管理するAdministratorAccess ポリシーを ProtonServiceRole に紐付けます。3つ目のコマンドは、Proton サービスがインフラストラクチャをプロビジョニングするときに、ProtonServiceRole を利用することを許可します。

aws iam create-role --role-name ProtonServiceRole --assume-role-policy-document file://./policies/proton-service-assume-policy.json 

aws iam attach-role-policy --role-name ProtonServiceRole --policy-arn arn:aws:iam::aws:policy/AdministratorAccess 

aws proton-preview \ 
  --endpoint-url https://proton.us-east-2.amazonaws.com \ 
  --region us-east-2 \
  update-account-roles \ 
  --account-role-details "pipelineServiceRoleArn=arn:aws:iam::${account_id}:role/ProtonServiceRole"

 

さぁ、AWS Protonにインフラストラクチャをプロビジョニングする権限が付与されたので、私たちのテンプレートを定義しましょう!
テンプレートには「環境」と「サービス」の二つの種類があります。「環境」とは、展開されるすべてのサービスに適用される共有リソースとポリシーのセットです。「サービス」は与えられた環境でどのようにアプリケーションを実行したいかを定義するものです。まずは、環境のテンプレートの定義から始めましょう。


aws proton-preview \ 
  --endpoint-url https://proton.us-east-2.amazonaws.com \ 
  --region us-east-2 \ 
  create-environment-template \ 
  --template-name "proton-example-dev-env" \ 
  --display-name "ProtonExampleDevVPC" \ 
  --description "Proton Example Dev VPC with Public Access and ECS Cluster"

 

次に、テンプレートにメジャーバージョンをタグ付けします。


aws proton-preview \ 
  --endpoint-url https://proton.us-east-2.amazonaws.com \ 
  --region us-east-2 \ 
  create-environment-template-major-version \ 
  --template-name "proton-example-dev-env" \ 
  --description "Version 1"
 

 

実際のプロジェクトであれば、CloudFormation テンプレートを繰り返し改善していく作業をする場面ですが、、今回はデモなので、サンプルをtar にまとめてS3 にアップロードしましょう。

tar -zcvf env-template.tar.gz environment/ && aws s3 cp env-template.tar.gz s3://proton-cli-templates-${account_id}/env-template.tar.gz && rm env-template.tar.gz
 

 

では、Proton に私たちの新しいバージョンの環境テンプレートが利用可能であることを伝え、登録が完了するのを待ちましょう。登録コマンドの出力に表示されるマイナーバージョンを確認し、2つ目のコマンドではそのマイナーバージョンを指定してwait していることを確認しましょう。


aws proton-preview \
  --endpoint-url https://proton.us-east-2.amazonaws.com \
  --region us-east-2 \
  create-environment-template-minor-version \
  --template-name "proton-example-dev-env" \
  --description "Proton Example Dev Environment Version 1" \
  --major-version-id "1" \
  --source-s3-bucket proton-cli-templates-${account_id} \
  --source-s3-key env-template.tar.gz 
  
aws proton-preview \
  --endpoint-url https://proton.us-east-2.amazonaws.com \
  --region us-east-2 \
  wait environment-template-registration-complete \
  --template-name "proton-example-dev-env" \
  --major-version-id "1" \
  --minor-version-id "0"
 

 

CloudFormation のテンプレートを繰り返し修正して、minor-version-id をインクリメントしながらバージョンを登録していくことができます。修正を繰り返し、他の人に公開できる準備ができたら、それを公開します。


aws proton-preview \
  --endpoint-url https://proton.us-east-2.amazonaws.com \
  --region us-east-2 \
  update-environment-template-minor-version \
  --template-name "proton-example-dev-env" \
  --major-version-id "1" \
  --minor-version-id "0" \
  --status "PUBLISHED"
  

 

ここまでがインフラストラクチャを構築するためのテンプレートの作成方法と公開方法です。では、同じプロセスでサービステンプレートを作りましょう(今回は省略した手順を紹介します)。


aws proton-preview \
  --endpoint-url https://proton.us-east-2.amazonaws.com \
  --region us-east-2 \
  create-service-template \
  --template-name "lb-fargate-service" \
  --display-name "LoadbalancedFargateService" \
  --description "Fargate Service with an Application Load Balancer" 
  
aws proton-preview \
  --endpoint-url https://proton.us-east-2.amazonaws.com \
  --region us-east-2 \
  create-service-template-major-version \
  --template-name "lb-fargate-service" \
  --description "Version 1" \
  --compatible-environment-template-major-version-arns arn:aws:proton:us-east-2:${account_id}:environment-template/proton-example-dev-env:1 

tar -zcvf svc-template.tar.gz service/ && aws s3 cp svc-template.tar.gz s3://proton-cli-templates-${account_id}/svc-template.tar.gz && rm svc-template.tar.gz 
   
aws proton-preview \
  --endpoint-url https://proton.us-east-2.amazonaws.com \
  --region us-east-2 \
  create-service-template-minor-version \
  --template-name "lb-fargate-service" \
  --description "Version 1" \
  --major-version-id "1" \
  --source-s3-bucket proton-cli-templates-${account_id} \
  --source-s3-key svc-template.tar.gz 
  
aws proton-preview \
  --endpoint-url https://proton.us-east-2.amazonaws.com \
  --region us-east-2 \
  wait service-template-registration-complete \
  --template-name "lb-fargate-service" \
  --major-version-id "1" \
  --minor-version-id "0" 

aws proton-preview \
  --endpoint-url https://proton.us-east-2.amazonaws.com \
  --region us-east-2 \ update-service-template-minor-version \
  --template-name "lb-fargate-service" \
  --major-version-id "1" \
  --minor-version-id "0" \
  --status "PUBLISHED"
 

 

素晴らしい! ここまで、プラットフォームチームがどのようにセルフサービスのインフラストラクチャのプロビジョニングと、サービスのデプロイメントをサービスチームに提供するかを見てきました。しかし、このプラットフォームチームから提供されたものを利用したいサービスチームはどのようにするのでしょうか?

ここ からAWS Proton のコンソールを探検していきましょう。
今回はus-east-2(オハイオ) リージョンを使っています。必要に応じてマネジメントコンソールのリージョンを変更してください。

テンプレートセクションから見ていきましょう。上記で作成したセルフサービスのインフラストラクチャプロビジョニングを可能にする環境テンプレートを確認できます。

template_section

サービステンプレート のセクションでは、セルフサービスのアプリケーションのプロビジョニングとデプロイメントのために作成したテンプレートを確認できます。

service_template_section

サービスチームとして、環境 セクションに移動し、私たちの最初のアプリケーションの環境を構築できます。環境を作成 ボタンをクリックし、先ほど作成したテンプレートを選択します。

env_section

この画面では、アカウント内の他の環境と区別するための基本的な情報を入力できます。この例では、アプリケーションのための開発環境を作成しています。

config_env

このサンプルテンプレートでは、inputを使ってサブネットのCIDRアドレスをカスタマイズできるようになっていますので、アプリケーションのためのカスタムCIDR アドレスを作成します。

custom_settings

作成 をクリックしてアプリケーションの環境を作成します。これにより、VPC、サブネット、ゲートウェイ、セキュリティグループ、ECS クラスターなど、環境テンプレートで定義されたインフラストラクチャすべてがプロビジョニングされます

環境が構築されると、アプリケーションをプロビジョニングできます。左のメニューから*サービス*を選択し、サービスの画面でサービスを作成 を選択するところから始めます。その後、LoadbalancedFargateService テンプレートを選択し設定 をクリックします。

chiose_service_template

ここではサービス設定とサービスリポジトリの設定をすることができます。サービス設定はアプリの名前と説明を定義します。サービスリポジトリの設定はCI/CDパイプラインを構築するために使用されます。

次に、サービスインスタンスを定義し、テンプレートで定義したinput パラメータの値をカスタマイズします。これによって、サービスが実際にどのように実行されるべきかを決定します。

service_custom_settings

作成 をクリックして最初のサービスをデプロイしましょう。これにより、プラットフォームチームが作成したテンプレートを使用して、ロードバランサー、ターゲットグループ、Amazon ECS タスク定義、CloudWatch Logs のログストリーム、アプリケーションのターゲット追跡 Auto Scaling、ECR リポジトリ、CodePipeline のパイプライン、その他プラットフォームチームによりサービステンプレートで定義されたものがプロビジョニングされます。

pipeline
ecr_repo

以上です!このデモでは、プラットフォームチームがテンプレートを使ってどのようにインフラストラクチャとサービスを定義することができるのかを見ていきました。プラットフォームチームはテンプレートを所有することにより、スケーリング、モニタリング、可用性に関する全ての重要な要件を確実に満たすことができます。

サービスチームは複雑なインフラストラクチャを構築し管理する方法を気にすることなく、これらのインフラストラクチャのテンプレートを使っていくつかの値を入力するだけで、セルフサービスによりインフラストラクチャをプロビジョニングし、サービスをデプロイすることができます。

AWS Proton は現在、パブリックプレビューが可能です。ご利用いただく際はこちらでロードマップを確認し、問題があればissue を開いてください。

翻訳はソリューションアーキテクトの金森 政雄が担当しました。原文はこちら です。