AWS Protonで推奨バージョン以外のテンプレートを使って環境を作成してみる

2022.01.25

いわさです。

最近AWS Protonを触っています。
Protonではテンプレートや環境・サービスのバージョン管理が出来るのですが、環境作成時にバージョンを指定することが出来ないのが気になっていました。

本日は特定バージョンを指定した何か操作が出来るのかを調べてみました。

テンプレートのバージョン

こんな感じで4つのメジャー・マイナーバージョンがあり、1つドラフトバージョンがある状態を作っておきます。

通常は、環境作成時は推奨テンプレートしか選べません。

CLIから環境を作成する

AWS CLIにcreate-environmentサブコマンドがありますので、こちらを試してみましょう。
コマンドの引数にspecファイルを指定する必要があります。
これはProtonコンソール上のカスタムパラメータ部分を指しています。

env1.yaml

proton: EnvironmentSpec
spec:
  vpc_cidr: 10.0.0.0/16

メジャーバージョンを指定してみる

まずは、パラメータでメジャーバージョンを指定してみます。

iwasa.takahito@hoge 20220123proton-template % aws proton create-environment --name clienv --spec file://env1.yaml --template-name hoge --template-major-version 1 --proton-service-role-arn arn:aws:iam::123456789012:role/service-role/iwasa-proton-env-role
{
    "environment": {
        "arn": "arn:aws:proton:ap-northeast-1:123456789012:environment/clienv",
        "createdAt": "2022-01-24T19:33:56.065000+09:00",
        "deploymentStatus": "IN_PROGRESS",
        "lastDeploymentAttemptedAt": "2022-01-24T19:33:56.065000+09:00",
        "name": "clienv",
        "protonServiceRoleArn": "arn:aws:iam::123456789012:role/service-role/iwasa-proton-env-role",
        "templateName": "hoge"
    }
}

指定したメジャーバージョンの最新マイナーバージョンで作成が出来ました。
本日時点ではマネジメントコンソールからは旧バージョンのテンプレートでの環境作成はできませんでしたが、どうやらCLIからは作成が可能なようです。

マイナーバージョンも指定してみる。

v1.1で作成されたので、今度はマイナーバージョンまで指定してv1.0で作成してみましょう。

iwasa.takahito@hoge 20220123proton-template % aws proton create-environment --name clienv2 --spec file://env1.yaml --template-name hoge --template-major-version 1 --template-minor-version 0 --proton-service-role-arn arn:aws:iam::123456789012:role/service-role/iwasa-proton-env-role --profile hoge
{
    "environment": {
        "arn": "arn:aws:proton:ap-northeast-1:123456789012:environment/clienv2",
        "createdAt": "2022-01-24T19:39:23.961000+09:00",
        "deploymentStatus": "IN_PROGRESS",
        "lastDeploymentAttemptedAt": "2022-01-24T19:39:23.961000+09:00",
        "name": "clienv2",
        "protonServiceRoleArn": "arn:aws:iam::123456789012:role/service-role/iwasa-proton-env-role",
        "templateName": "hoge"
    }
}

こちらも作成できました。
柔軟にバージョンを指定して環境の作成することが可能ですね。

ドラフトはいけるのか?

まだ公開されていないドラフトバージョン(v2.2)も試してみましょう。

iwasa.takahito@hoge 20220123proton-template % aws proton create-environment --name clienv3 --spec file://env1.yaml --template-name hoge --template-major-version 2 --template-minor-version 2 --proton-service-role-arn arn:aws:iam::123456789012:role/service-role/iwasa-proton-env-role --profile hoge
{
    "environment": {
        "arn": "arn:aws:proton:ap-northeast-1:123456789012:environment/clienv3",
        "createdAt": "2022-01-24T19:46:48.112000+09:00",
        "deploymentStatus": "IN_PROGRESS",
        "lastDeploymentAttemptedAt": "2022-01-24T19:46:48.112000+09:00",
        "name": "clienv3",
        "protonServiceRoleArn": "arn:aws:iam::123456789012:role/service-role/iwasa-proton-env-role",
        "templateName": "hoge"
    }
}

なんと、こちらも作成できました!!
CLIから明示的にバージョンを指定すれば未公開のバージョンでも作成出来るということですね。

公開前にドラフトバージョンのデプロイテストを行う際などにこの方法は利用できそうです。

ただし、画面のテンプレートバージョンが「推奨」になっていました。
ここは推奨バージョンではないので正しくない表示ですね。(テンプレート側は公開されている最新のv2.1が推奨)

更新処理でもバージョン指定出来る

先ほどは作成時にバージョンを指定しました。
環境の更新update-environmentもあって、メジャーバージョンマイナーバージョンを指定することができます。

更新でも試してみたいと思います。

ダウングレード出来るのか?

真っ先に思いつくのが、ダウングレードです。
先程の流れからすると、出来そうですが。

iwasa.takahito@hoge 20220123proton-template % aws proton update-environment --name env1 --deployment-type MINOR_VERSION --template-minor-version 0 --profile hoge 

An error occurred (ValidationException) when calling the UpdateEnvironment operation: Cannot downgrade minor version (requested minor version: 0, deployed minor version: 1)

iwasa.takahito@hoge 20220123proton-template % aws proton update-environment --name env1 --deployment-type MAJOR_VERSION --template-major-version 1 --spec file://env1.yaml --profile hoge

An error occurred (ValidationException) when calling the UpdateEnvironment operation: Cannot downgrade major version (requested major version: 1, deployed major version: 2)

残念ながら、ダウングレードは一切出来ないみたいです。
ただ、これを許可してしまうと逆方向の互換性も考慮しなければならなくなるので、まぁ管理者側にとっては大変ですよね。

アップグレードは可能

ダウングレードはできませんでしたが、アップグレードでは指定したバージョンでの更新が可能です。
メジャーバージョン・マイナーバージョンがどちらも更新バージョンが存在している場合を仮定しましょう。

最新のメジャーバージョンがある場合は「メジャーを更新」を押して最新のメジャー・マイナーバージョンにアップする必要があります。
以下の画面では、コンソール上は「マイナーを更新」ボタンがありますが、操作するとエラーになります。「メジャーを更新」操作を行う必要があります。

しかし、CLIだと推奨メジャーバージョンを無視して、現在のメジャーバージョン内でマイナーバージョンアップすることが可能でした。
ここでは、v1.1へアップグレードしてみましょう。

iwasa.takahito@hoge 20220123proton-template % aws proton update-environment --name env2 --deployment-type MINOR_VERSION --template-minor-version 1 --profile hoge
{
    "environment": {
        "arn": "arn:aws:proton:ap-northeast-1:123456789012:environment/env2",
        "createdAt": "2022-01-24T20:02:37.969000+09:00",
        "deploymentStatus": "IN_PROGRESS",
        "lastDeploymentAttemptedAt": "2022-01-24T20:05:16.390000+09:00",
        "lastDeploymentSucceededAt": "2022-01-24T20:02:37.969000+09:00",
        "name": "env2",
        "protonServiceRoleArn": "arn:aws:iam::123456789012:role/service-role/iwasa-proton-env-role",
        "templateMajorVersion": "1",
        "templateMinorVersion": "0",
        "templateName": "hoge"
    }
}

できますね。
マネジメントコンソールでは最新メジャーバージョン、マイナーバージョンへの更新しかできませんでした。

最新のマイナーバージョンを無視して、途中のマイナーバージョンを指定することは出来るでしょうか。
以下であれば、v2.2までの更新で留めておけるか、です。

iwasa.takahito@hoge 20220123proton-template % aws proton update-environment --name env1 --deployment-type MINOR_VERSION --template-minor-version 2 --profile hoge
{
    "environment": {
        "arn": "arn:aws:proton:ap-northeast-1:123456789012:environment/env1",
        "createdAt": "2022-01-24T19:52:51.897000+09:00",
        "deploymentStatus": "IN_PROGRESS",
        "lastDeploymentAttemptedAt": "2022-01-24T20:16:08.301000+09:00",
        "lastDeploymentSucceededAt": "2022-01-24T19:54:53.983000+09:00",
        "name": "env1",
        "protonServiceRoleArn": "arn:aws:iam::123456789012:role/service-role/iwasa-proton-env-role",
        "templateMajorVersion": "2",
        "templateMinorVersion": "1",
        "templateName": "hoge"
    }
}

こちらも可能でした。

さいごに

本日はAWS CLIを使って、Protonコンソールからはできないバージョン指定を行っての環境作成を試してみました。

まず、本日時点ではマネジメントコンソールから作成や更新時のバージョンの指定は出来ません。推奨バージョンのみです。
しかしCLIからだと古いバージョンの指定やドラフトバージョンの指定が出来ることがわかりました。

ダウングレードについてはCLIからでも実現できないこともわかりました。

バージョン指定して何かを行いたいときは、CLIから操作してみましょう。という感じですね。