Cloud9 の代替ソリューションを試してみたらDeployに失敗した
概要
コトのいきさつはみのるんさんがまとめているようにCloud9が急遽使えなくなってしまって代替案が必要になるケースが出てきた、というものです。
上記のみのるんさんのブログでも記述があるように代替手段が提案されているのですが、このたびaws-samplesにテンプレートとしてソリューションが実装されリリースされたようです。
このソリューションを一応触ってデプロイぐらいしてみておくかー、と思ったのですがデプロイでこけました。ユーザグループで環境として利用する際にも少しだけ注意が必要かもしれません。
デプロイ方法
GitHubのページからデプロイ可能、ここでは東京(ap-northeast-1)でデプロイする。
リポジトリは以下。
-
GitHubでap-northeast-1を選択
-
マネコンに遷移するのでデフォルトのまま進める
-
スタックの詳細で設定を行う
- AutoStopIdleTimeInMinute : 自動で環境を停止させるまでの時間(分)
- EbsSizeInGb : EBSのサイズ(GB)
- InstanceType:インスタンスタイプ
- 後段のページは基本的にそのままで作成
ただし、「AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します。」のみチェックをいれる。
...なんだ簡単だなと思ったら、デプロイ時にこけました。
何が悪かったのか?
結論を先に書くと、リポジトリの説明にもバッチリ書いているようにこのソリューションはアカウント内にデフォルトVPCが必要です。
(説明を読めや、と自分に突っ込みたい…)
To deploy the Code Editor within your default VPC, click the "Launch Stack" button for the corresponding region. The deployment will take approximately 5-10 minutes.
さて念のため確認です。デプロイ時にCloudFormationが止まってしまいました。Create Failedです。
エラーメッセージを引用するとカスタムリソースからエラーが返ってきているようです。カスタムリソースのコード内のリストのインデックス外を参照しているような挙動をしています。
Received response status [FAILED] from custom resource. Message returned: list index out of range (RequestId: af07e59d-1faa-43df-9d2e-a206a9c03715)
当該エラーに対応するコードを調べてみると、このソリューションはデフォルトVPCがアカウント内に存在することが前提になっているようです。
ソリューション内のdefault_vpc_lookup.pyを確認してみると、以下のコードが確認できます。out of indexは2行目のコードで発生していますね。
res = ec2.describe_vpcs(Filters=[{"Name": "isDefault", "Values": ["true"]}])
vpc_id = res["Vpcs"][0]["VpcId"]
デフォルトVPCはセキュリティのプラクティスとして削除することが推奨されていたり、ControlTowerなどから払い出したメンバーアカウントには存在しないことがあります。
そういったアカウントで作業している場合、本ソリューションはここでこけることになります。
リカバリー方法
デフォルトVPCを再作成することでリカバリーします。下記画面で「デフォルトVPCを作成」を押す。
これでデフォルトVPCが作成されました。
再度デプロイ
再度スタックをデプロイしてみると成功しました。
環境にアクセスしてみると、ちゃんと作成されている様子。よかった。
Discussion