Tagbangers Blog

ElasticBeanstalkで起動されたインスタンスに簡単にsshログインしてみる(EB CLI)

はじめに

こんにちは、荻野です。 

今回はAWS Elastic Beanstalkの小ネタです。Elastic Beanstalkを利用時に、CloneやAutoScalingなどによりEC2のグローバルIP が変わってしまいsshログインに困ることはありませんか? それ、EB CLIなら解決できます。今更な感じもありますが、便利なCLIなのでご紹介します。

What is EB CLI??

一言でいえば、Elastic Beanstalkを便利に扱うためのCLIです。awsコマンドにもelasticbeanstalkサブコマンドがありますが、もっと簡単便利にElastic Beanstalkに触れ合えます。

Install EB CLI

ドキュメントを参考にインストールしましょう。今回はOS Xでしたがpipでインストールしました。他にもHomebrewでもインストールできますが、pipの方が最新版をいち早く利用できるようです。

pip利用時のインストール手順は以下です。

# pip install
pip install --user --upgrade awsebcli
# PATHを通します
# ~/.bash_profile に以下を追記します(パスは環境により異なります)
export PATH="$PATH:~/Library/Python/2.7/bin"
# eb コマンドの補完を有効にします
# ~/.bashrc に以下を追記します(パスは環境により異なります)
source ~/Library/Python/2.7/bin/eb_completion.bash
# 現在のセッションで有効化します
source ~/.bash_profile
# Version確認
$ eb --version
EB CLI 3.10.0 (Python 2.7.1)
# eb コマンドの補完が有効か確認
$ eb //タブを2回押します
abort      create     init       local      platform   setenv     swap       use
config     events     labs       logs       printenv   ssh        terminate
console    health     list       open       scale      status     upgrade

以上でインストール完了です。

使ってみる

今回は、すでに以下のElasticBeanstalkアプリケーションが作成されていることを前提として設定を進めます。
HelloWorldというアプリケーションに、developとstagingの2環境が存在す構成です。

  • Application
    • HelloWorld
  • Environment
    • develop
      • ELB + EC2 x 2
    • staging
      • ELB + EC2 x 2

このアプリケーションのssh key-pairにはhello-world.pemが設定されています。
このkeypairは~/.ssh/hello-world.pemとして保存しておいてください。keypairの保存場所はsshアクセスする際に非常に重要な項目なのでご注意ください。

それでは、EB CLIのセッティングを始めます。

まずはアプリケーションのプロジェクトディレクトリに移動します。

$ cd ${PROJECT_DIR}

EB CLIの初期設定を行います

$ eb init

# リージョンを選択します
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) us-east-2 : US East (Ohio)
14) ca-central-1 : Canada (Central)
15) eu-west-2 : EU (London)
(default is 3): 1 # N. Virginiaを選択しました

# アプリケーションを選択します
Select an application to use
1) HelloWorld
2) [ Create new Application ]
(default is 1): 1 # HelloWorld アプリケーションを選択しました

# デフォルトの環境を選択します
Select the default environment.
You can change this later by typing "eb use [environment_name]".
1) staging
2) develop
(default is 1): 2 # develop環境を選択しました

以上で初期設定は完了です。簡単です。

環境の一覧を見る場合はこうです。*が付いているものが現在のデフォルトの環境になります。

$ eb list
* develop
staging

デフォルトの環境をstaging環境に変更する場合はこうです。

$ eb use staging

デフォルトの環境がstaging環境に変更されました。

$ eb list
develop
* staging

では本題のsshですが、こうです。この場合は現在デフォルトとして設定されているstaging環境に存在するEC2にログインできます。

$ eb ssh

# sshログインするEC2を選択します。ELB配下に2台存在するため2つインスタンスが表示されています。
Select an instance to ssh into
1) i-0d04080e073ba23e2
2) i-04ec606ef8974dd27
(default is 1): 1

# ログインできました!
 _____ _           _   _      ____                       _        _ _
 | ____| | __ _ ___| |_(_) ___| __ )  ___  __ _ _ __  ___| |_ __ _| | | __
 |  _| | |/ _` / __| __| |/ __|  _ \ / _ \/ _` | '_ \/ __| __/ _` | | |/ /
 | |___| | (_| \__ \ |_| | (__| |_) |  __/ (_| | | | \__ \ || (_| | |   <
 |_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$

もしdevelop環境のEC2にログインする場合は環境名を渡します。

$ eb ssh develop

# sshログインするEC2を選択します。先ほどとは異なるIDが表示されています。
Select an instance to ssh into
1) i-03e33951450f21376
2) i-03f223e9b917facf6
(default is 1): 1

# ログインできました!
 _____ _           _   _      ____                       _        _ _
 | ____| | __ _ ___| |_(_) ___| __ )  ___  __ _ _ __  ___| |_ __ _| | | __
 |  _| | |/ _` / __| __| |/ __|  _ \ / _ \/ _` | '_ \/ __| __/ _` | | |/ /
 | |___| | (_| \__ \ |_| | (__| |_) |  __/ (_| | | | \__ \ || (_| | |   <
 |_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$

なお、こちらに記載がありますがsshログインのためにEB CLIは以下のように動作をしますので、意図せずセキュリティポリシーに反しないようご注意ください。

環境のセキュリティグループでポート 22 に関するルールが指定されていない場合、このコマンドは、0.0.0.0/0(すべての IP アドレス)からの受信トラフィックについてポート 22 を自動的に開きます。セキュリティを高めるために、制限された CIDR 範囲に対してのみポート 22 を開くよう環境のセキュリティグループを設定してある場合は、EB CLI はその設定を尊重し、セキュリティグループに対するあらゆる変更を破棄します。この動作をオーバーライドし、EB CLI ですべての受信トラフィックに対して強制的にポート 22 を開くには、--force オプションを使用します。

おわりに

新しいネタではないですがEB CLIのご紹介でした。もしもまだEB CLIを試したことがなければ、ぜひ試してみてください!

それでは、よいElastic Beanstalkライフをお送りください!