AWS Protonを触ってみる

こんにちは、株式会社アトラエのエンジニアの遠矢です。
この記事は、Atrae Advent Calendar 2020 の4日目の記事です。

https://qiita.com/advent-calendar/2020/atrae

# AWS Protonとは

EKS, ECS, Fargateなどのコンテナアプリケーションやサーバレスアプリケーションの
インフラや管理、監視・デプロイを行うことができるフルマネージドサービスです。

詳しくは Develpers.IOさんの記事や公式ドキュメントをご覧ください。

https://dev.classmethod.jp/articles/aws-proton/
https://aws.amazon.com/jp/proton/features/

現在はプレビュー版で、下記リージョンで利用可能です。

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

AWS Proton自体は無料で利用できます。
作成されるリソースやCloudFormationで課金されます。

https://aws.amazon.com/jp/proton/pricing/


# 利用する際の大まかな流れ

AWS Protonはテンプレートというものを管理して、環境やサービスを構築・運用していきます。

テンプレートには下記の2種類が存在します。

- 環境テンプレート
- サービステンプレート

環境テンプレートはVPCやネットワークなどの構成を管理します。
サービステンプレートは、FargateやLambda、ロードバランサーやデプロイの設定などの構成を管理します。

これらのテンプレートを利用して、環境・サービスを構築すると裏側でCloudFormationが走り、必要なリソースが作成されていきます。

よってProtonを利用する際の大まかな流れとしては、

- 環境テンプレート/サービステンプレートを作成・更新する
- 環境/サービスを上記のテンプレートにしたがって構築・更新する

という感じになります。
こちらも詳細は公式ドキュメントを参照してください。
https://docs.aws.amazon.com/ja_jp/proton/latest/userguide/Welcome.html


# 実際に触ってみる

なにはともあれとりあえず触ってみました。


## AWS Protonにアクセスする

下記のページがProtonのTopページです。
https://ap-northeast-1.console.aws.amazon.com/proton/home?region=ap-northeast-1#/

## 環境テンプレートを作成する

左側のメニューから環境テンプレートを選択してください。
環境テンプレートを作成をクリックして画像のような情報を入力してください。

![setting_env_template.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/3b02f456-44c2-9f19-162f-3862fea541fa.png)

## 環境テンプレートを公開する

作成したテンプレートはDraft状態になっています。
このままだと利用できないので、v1.0を公開します。 をクリックしてください。

![publish_env_template.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/e4e80db1-5e60-19b2-2b2c-a0e3eef53c85.png)

## サービステンプレートを作成する

左側のメニューからサービステンプレートを選択します。
サービステンプレートを作成をクリックして画像のような情報を入力します。
環境テンプレートは上記で作成したものを選択する

![setting_service_template.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/04ac4c7f-1ba2-f184-378b-371471b912b7.png)


## サービステンプレートを公開する

こちらも環境テンプレートと同様にDraftになっているので公開します。

## パイプライン用のアカウントロールを追加する

CI/CDのためのIAMロールを作成します。
左側のメニューからアカウントロールを選択してください。
画像のような情報を入力して、新規にIAMロールを作成します。

![setting_account_role.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/0c03b3cd-d5a5-038f-6cc5-b9df2215d4cb.png)


## 環境を作成する

ここまでで準備は整いました。
あとは環境とサービスを構築するだけです。

左側のメニューから環境を選択してください。
環境を作成するをクリックして必要な情報を入力していきます。

![create_env_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/b7acb6cd-4f42-1d23-e7fc-c930b585fa37.png)
![create_env_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/83b21131-2742-57e6-c083-e2d3f3f9fd63.png)
![create_env_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/cddf4bde-6d74-c49d-1535-772217cb7cb6.png)

設定が完了するとCloudFormationでスタックが作成されます。

![create_env_resource.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/b78e68c2-d227-3c9f-a3ba-e9703f31549a.png)


## サービスを作成する

環境の作成が完了したら、左側のメニューからサービスを選択して下さい。
サービスを作成をクリックして必要な情報を入力していきます。

![create_service_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/2e44f8da-1c36-a962-5d42-33988e08198c.png)

![create_service_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/8f3b86ae-c232-5d0d-3413-b7ad5be1265f.png)

![create_service_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/d335451d-c935-c967-82a4-89557b3506ea.png)

設定が完了すると環境と同様にCloudFormationでスタックが作成されます。

![スクリーンショット 2020-12-03 1.32.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/389249c1-742a-fd45-7005-cb1370066896.png)

CloudFormationが無事完了したら、実際にサービスができているか確認してみましょう。
今回はFargateのテンプレートを選択したため、下記のようにClusterやServiceが作成、実行されていました。

![スクリーンショット 2020-12-03 1.33.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/54d78e78-a1bf-efd8-6207-1b6c7f369f13.png)

# 削除

サービスや環境を選択し、削除を行うとCloudFormationでリソースの削除が行われます。
Protonでできたリソースは軒並み削除されていきます。

![スクリーンショット 2020-12-03 1.38.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18932/46eefaf6-5691-3868-483d-83a6a641e802.png)

# 感想

各種サービスのデプロイを統一のインターフェイスで行えることが一番メリットかもしれません。
また、ProtonはAWSが公式に提供するベストプラクティスの一つと言えます。
これからAWSを触るぞ！ってエンジニアはまずはProtonを触ってみて、どのようなリソースができるのか？そのリソースはどういうものなのか？
などを学んでいくきっかけにしてみてはいかがでしょうか？