@yyuta750 (Yuta Yamazaki)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

VSCodeでCloud9のようにEC2を自動起動・自動停止したい

Discussion

Closed

こんにちはWebエンジニア1年目の駆け出しです。

今回は、タイトルを実現するために以下の構成を考えてみました。
この構成で実現可能か、もっと良い構成がないかなど知見をいただけると嬉しいです。

【概要】

Cloud9 から VSCode / Cursor に移行した場合でも、
“エディタを開いたらEC2が起動し、操作しなかったら自動停止”
という仕組みを再現したい。


【目標】

  • VSCode / Cursor を起動すると対象のEC2を自動起動
  • 一定時間操作がなければ自動停止
  • SSH経由の接続が使える

【構成概要】

▶ 自動起動

  • AWS Lambda + API Gateway
  • VSCode / Cursor の開始スクリプトで Lambda を呼び出し
  • EC2 instanceId を指定して start_instances
  • IP取得ループ(Elastic IPは使わない)
  • IP取得できたらcode --remoteでRemote SSH

▶ 自動停止

  • CloudWatch で CPU 利用率を監視
  • CPU < 5% が 15 分続いたら Lambda で stop_instances
  • または cron (例: 毎日20時) で EventBridge と連携

VSCodeの拡張機能を自作して以下の機能を実装することも考えています

  • EC2インスタンスの一覧を取得
  • 取得したEC2を起動&Remote SSHをするスクリプトを走らせる

以上です。どなたでもご意見をいただけたら嬉しいです!

1 likes

VSCodeは起動時にコマンド実行できるようなので、これを活用してみては如何でしょうか?

以下、(ローカルでAWS CLIが使える前提ですが、)自動起動のコマンドです

IP取得やEC2起動を全てローカルから実行し、LambdaやAPI Gatewayのコストを削減しています

# ===== EC2 起動 =====
aws ec2 start-instances \
  --instance-ids "${INSTANCE_ID}"

# ===== 起動待ち =====
aws ec2 wait instance-running \
  --instance-ids "${INSTANCE_ID}"

# ===== Public IP 取得 =====
PUBLIC_IP=$(aws ec2 describe-instances \
  --instance-ids "${INSTANCE_ID}" \
  --query "Reservations[0].Instances[0].PublicIpAddress" \
  --output text)

# ===== SSH接続 =====
ssh -i "<KEY_PATH>" "<EC2_USER>@${PUBLIC_IP}"

自動停止についてはCloudWatchを使った自動停止が公式ドキュメントにも記載されているので、やはりそのやり方が良いように思います

1Like

ご回答ありがとうございます!
lambdaやAPI Gatewayを使わずとも構築できて、コスト削減できて良いですね!

1Like

Your answer might help someone💌