CI部の古川(と)です。
最近はトマトに砂糖をかけて食べるのが好きです。
今回はAWS Elastic Beanstalk(以下、Elastic Beanstalk)にてAmazon EC2(以下、EC2)が起動しない!という現象に遭遇したので、その原因について書いていきたいと思います。
はじめに
今回Elastic Beanstalkで作成しようとした環境はこんな感じです。
- ウェブサーバー環境
- Auto Scaling グループでインスタンス数は最小4台/最大8台にする
- CMKで暗号化したAMIを使用してEC2を起動させる
Auto ScalingでEC2が起動しなかった原因は?
結論から言うと上で書いた
CMKで暗号化したAMIを使用してEC2を起動させる
この設定が要因でした。
AMIを暗号化したCMK のキーポリシーにAuto Scalingサービスからのアクセスを許可しておらず、
Auto ScalingサービスがCMKへアクセスできない!
↓
EC2起動用のAMIが参照できないからEC2起動できない!
となっていました。
遭遇したエラー
実際にどんなエラーが出たのか見ていきます。
Elastic Beanstalkのメッセージ
There are no instances.
インスタンスが無いよというメッセージが何回か出力されていました。
CloudFormationのイベントログ
次にElastic Beanstalkによって作成されたCloudFormationのイベントログを確認してみます。
The following resource(s) failed to create: [AWSEBAutoScalingGroup].
「AutoScalingGroup」の作成に失敗したことでスタック自体が失敗したようです。
Group did not stabilize. {current/minSize/maxSize} group size = {0/4/8}.
AutoScalingグループのインスタンス数が安定しなかったためだと書いてありますね。AutoScalingグループのログを見に行きましょう!
AutoScalingグループのアクティビティ履歴
EC2コンソール→左ペインの「AutoScalingGroups」→アクティビティ でAutoScalingグループのログを見に行きます。
Client.InternalError: Client error on launch
起動時のクライアントエラーとのことですが、よく分かりません…
EC2コンソール
ちなみにEC2コンソールはこんな感じになっていました。 EC2の起動を試みて終了するということを何度も繰り返しているようです。
エラーの原因を辿って見てきましたが、結局CMKのキーポリシーが原因だとは読み取れませんでした。
解決方法
解決方法はAMIを暗号化したCMKのキーポリシーを編集するだけです◎
- まずKMSコンソールから該当のCMKの画面に行きます。
- キーユーザーの追加を押します。
- 「AWSServiceRoleForAutoScaling」を追加します。このように、キーポリシーに追加されていればOKです。
参考: 暗号化されたボリュームで使用するのに必要な CMK キーポリシー - Amazon EC2 Auto Scaling (日本語)
おわりに
何度もElastic Beanstalk環境を作っては削除するを繰り返し、ようやく作成できました。
お疲れ様でした。
古川智絵 (執筆記事の一覧)
2020年新卒入社 技術課(SRE1課)に所属 好きな食べ物はみそ汁