aws cliを用いて、EC2インスタンスの定期スナップショットを取れたらいいなぁなんて非機能なことを検討し始めたばっかりに、2時間も時間を食ってしまった。
今回は、aws cliを用いて手始めにEC2インスタンス一覧を取得しようと思ったのに応答がなくて、詰まりに詰まってやっと解決したので絶対誰かの参考になると思って記事に残しておきます。
aws cliの応答がない!オーマイゴッド!
応答がないってのは こんな状態。
# aws ec2 describe-instances --debug
~
MainThread - urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): ec2.ap-northeast-1.amazonaws.com:443
この状態のまま、なんにも応答がないんです。プロンプトもCtrl+Cするまで戻ってきません。aws cli no responce とか aws cli hangとかでいろいろネット検索もしてみたし、もちろん、最初は「–debug」オプションなしでやってたよ。
aws configureの設定を確認したり、IAMユーザ再作成したり、インスタンス自体にIAMロールを追加してaws configureでアクセスキーとシークレットキーが空っぽの状態でも試してみた(インスタンスにロールを設定するのはかなりスマートだと思った)。
当たり前の話、外部向きネットワークに対して制限をかけているわけでもない。
念のためにアウトバウンドに443を追加してみた。
それでもできないのだ、、、。。ちーん
原因はVPCエンドポイント設定にあった!!
やばい!気持ちよすぎる!!!!wwwww
実は、私が触っているAWS環境は以前別の担当者にも触らせていたことがあったのですが、その担当者がVPCエンドポイントと呼ばれるものを設定していて、Amazon EC2 APIへのアクセスがインターネット経由をせずにプライベートネットワーク経由で接続できるようにしていたようです。
これにより、推測にとどまりますが、GIPを持たないインスタンスであっても、NATやプロキシ等の複雑な設定をせずにプライベートIPアドレスでAPIへアクセスできるようにしてたようです。
で、ですね、このVPCエンドポイントに対して、セキュリティグループの設定がされていたのが今回の原因でした。今回aws cliを導入していたインスタンスに適用していたセキュリティグループがVPCエンドポイントで許可対象となっていなかったために、アクセスできていませんでした。
VPCエンドポイントとしてAmazon EC2 APIサービスを追加した際に、デフォルトで許可されるセキュリティグループは「default」セキュリティグループのようです。
まとめると、
- VPCエンドポイントの設定がされていた
- VPCエンドポイントのセキュリティグループが設定されていた
- aws cliを実行していたインスタンスに適用していたセキュリティグループがVPCエンドポイントで許可されていなかった
上記3点が理由で、aws cli実行時にレスポンスが帰ってこない事態が発生しました。
今回は、aws cliのインストールを疑ったので、Amazon Linux 2のインスタンスを立てて、aws cliがプリインストールの状態で実行しても動かず、解決にものすごく時間を費やしてしまった。
さて、aws cliをEC2上で実行してAPIからの応答が帰って来ないという人がいた場合は、セキュリティグループでのアウトバウンド許可設定、VPCエンドポイントの設定がされていないか、設定されている場合はVPCエンドポイントでのセキュリティグループ設定を確認しよう。
VPCエンドポイント設定有無の確認方法
サービス > VPC > エンドポイント
参考:
VPCエンドポイント
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-endpoints.html
コメント