Proton結構いいなと思って触っています。
AWS Proton CodeBuild Provisioning で、テンプレートの作成が不味く、プロビジョニングが失敗したときの対処方法を書いておきます。
私が陥ったのは、schema.yamlのrequireにtypoで存在しないパラメータを指定してしまったことで、デプロイもアンデプロイもできなくなった状態です。
以下のファイルでは必須のパラメータとしてparamを指定していますが、実はパラメータとしてはparam1しかないという状況です。
schema:
format:
openapi: "3.0.0"
service_input_type: "ServiceInputs"
types:
ServiceInputs:
type: object
description: "Input properties for my environment"
properties:
param1:
type: string
title: "パラメータ1"
required:
- param
テンプレート登録の際に失敗すればよいのですが、登録できてしまいます。
そしてこのサービステンプレートからサービスを作成するときに不幸が訪れます。
サービスインスタンスのデプロイに失敗し、アンデプロイも失敗し、サービスインスタンスが削除できなくなります。
対処法
新しいテンプレートを作成し、新しいメジャーバージョンとして登録します。
その後、aws cliを用いて、サービスインスタンスのバージョンのアップデートを実施します。
aws proton update-service-instance --deployment-type MAJOR_VERSION \
--template-major-version 2 --spec "<スペック>" \
--name instance-1 --service-name service-1
スペックは以下のように、aws proton get-service-instance コマンドで取得できますが、
aws proton get-service-instance --name instance-1 --service-name service-1
以下のようなyamlです。
---
proton: "ServiceSpec"
pipeline: {}
instances:
- name: "instance-1"
environment: "env-1"
spec:
param1: ""
これでうまくデプロイできれば、あとはコンソールから削除することができます。
削除するためには一度、デプロイに成功しないといけないのですね。
失敗したときように削除専用のテンプレートを作成しておくと便利かもしれません。
まだまだ触り始めたばかりでメジャーバージョンアップはもう少し先だなと思っていたのですが、削除できなくなるトラブルで思いのほか早く試すことになりました。
今後、もう少しProtonのこと試していきたいなと思います。