CloudFrontの設定をちょいとだけ弄るCloudFormationテンプレートの修正をしてUpdateStackをしたら UPDATE_ROLLBACK_FAILED になってしまって超焦った話。
既にサポートには勘弁してよーっていう新規ケースを投げてあるけど、他の人が同様の問題にぶち当たって途方に暮れないようにメモを共有。ていうか同じ内容をQiita用に書くのだるいのでサポートに投げた文面コピペ。
サポートに投げた内容
CloudFormationの既存スタックをUpdateStackしたらUPDATE_ROLLBACK_FAILEDな状態になってしまいました。
CloudFormationのEventsのログを見ても CloudFront encountered an internal error. Please try again. と出ているのみで最初原因が分かりませんでした。自分のせいなのかAWS側の障害なのかも不明…。とりあえず同テンプレートをupdateではなくcreateで別スタック名で実行してみたところ The parameter ViewerCertificate The specified distribution is configured for SNI and the minimum SSL protocol version is specified as SSLv3. You cannot specify both. というエラーメッセージが表示されて失敗していたことがわかりました。このテンプレートは元々正常にCreateStack出来ていたママです。
CloudFrontリソースのViewerCertificate設定に不備があったのかと思い、確認したのですがテンプレートの当該項目は以下の様な内容であり、ドキュメントを見る限りでは特に不備は見つかりませんでした。
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distributionconfig-viewercertificate.html"ViewerCertificate": { "IamCertificateId": "XXXXXXXXXXXXXXX", "SslSupportMethod": "sni-only" }
エラーメッセージからするとSSLv3が云々と出ているのでHTTPSのプロトコルバージョンに関する設定かと思いましたが上記URLのドキュメントにはそれらしい項目はありません。
ですがエラーでスタックが作れないままだと困る為、エラーメッセージに出てくるキーワードで色々検索した所、最新のAWS SDKの方には
MinimumProtocolVersion
というEnumが存在することを発見しました。
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/cloudfront/model/MinimumProtocolVersion.html
CloudFormationのテンプレートドキュメントには載っていませんが、試しに以下のように設定を追加してみた所、無事スタックを作成/更新することが出来ました。"ViewerCertificate": { "IamCertificateId": "XXXXXXXXXXXXXXX", "SslSupportMethod": "sni-only", "MinimumProtocolVersion": "TLSv1" }
大体こんな感じ。あとはアンドキュメントな設定になっちゃってて気持ち悪いのでWeb上のドキュメントの更新お願いしますとか幾つかお願い書いといたくらい。
CloudFormation便利なんだけどもうちょっと頑張って欲しい
- 特に運用するとき怖いのが UPDATE_ROLLBACK_FAILED。これ一旦なったらどうすればいいのか分からん。サポートに問い合わせれば回復してもらえるんだろうか?
- これの回復はサポートに連絡すれば可能な限り対応してもらえるそうです。
- AWSの各種プロダクツは頻繁に新機能とか更新早いのは良いんだが、CloudFormationから利用できるようになるのに時間かかりすぎ。新種のリソースやら設定項目やらをいつまでもコード管理できないのは不便。現状痒いところにはCustomResourceで自前実装したりスクリプト組み合わせる逃げ道もあるけどCloudFormationだけでバシッとやりたいのが本音よね。
とりあえず不具合報告くらいなら気づいた時に頑張るので、AWSの中の人も頑張ってください。
追記 2015-04-17:公式リリースキタ
今日付けでドキュメントにも載ったし、デフォルト値の問題も対応されたようだ(デフォルトでSSLv3)