【AWS】IntelliJ(Jetbrains)からAWSを操作する設定方法まとめ。AWS作業が爆速はかどります!

#はじめに
AWSに接続するのに、毎回、Terminalを立ち上げて、コマンドを打ってCLIで管理する。。
そんなことしなくても、
**IntelliJの画面から、数クリックでGUIでAWSを操作できます。**

一度設定するだけで、AWSへの操作が劇的に楽になります。
さっそく設定方法をまとめてみました。
IntelliJに限らず、Jetbrains社のIDEなら共通で、
PyCharm,RubyMine,PhpStormなどでも利用できます。
*以下、説明はintelliJの日本語版で進めさせていただきます。英語版の方は読み替えてください。*


#何が楽になるか
IntelliJで設定するとこんな事が簡単に↓

- sshログイン→2clickでできます。
- DB接続,データ閲覧→3,4clickでできます。
- Deploy作業 → ["cmd" + S]でできます
- Deploy先と差分確認 →2,3clickでグラフィカルに差分表示できます。



#リモートホスト
まずは、基本の設定です。
sshログイン、GUIでファイル管理、Deploy簡単にできるようになります。

プロジェクトを開いたら、
`ツール > デプロイ >リモートホストの参照` をクリック。
もしくは、以下のサイドバーからクリック
![スクリーンショット 2020-02-14 10.53.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/098062ae-57f8-644c-be87-140d85794159.png)
`・・・`をクリックして、設定を開く




##接続先の設定
![スクリーンショット 2020-02-14 10.54.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/da0e27d5-c627-d976-404c-8542230d9e81.png)
まずは、`✓`で新規作成して、`接続`タブを開きます。

- このプロジェクトでのみ表示する: 作った接続先がこのプロジェクトでしか表示されなくなります。
- 型:SFTPを選択
- ホスト:EC2の`IPv4 パブリック IP`を入力
- ユーザー名:AWS-EC2サーバーで設定したユーザー名
- 認証:`Key pair OpenSSH`を選択
- Private key path:localにある、AWS接続用pemファイルを設定
- パスフレーズ:認証でパスワードを選択した場合にパスワードを入れる
- 接続のテスト:接続の確認ボタン
- ルート・パス:接続後のリモート先のルートパスとなります。
- Web server URL:(任意) デプロイ先がWebサービスでサイトを閲覧したい際に利用
- 拡張:(任意) 文字Encordとか、接続limit時間とか。 デフォルトでOK

「このプロジェクトでのみ表示する」ですが、オススメは、
**基本は`✓`しておいて、複数プロジェクトで共有して使用する接続先のみチェックしない**
のがいいです。さもないと、接続先が複数で溢れてしまい邪魔です。
私の場合は、
aws_root: awsのルートへの接続先(AWS上で動かす複数のプロジェクトの共通利用として)
nano_root、raspi_root: エッジ端末の複数プロジェクトの共通利用としてチェックしない。
コレ以外は、基本チェックを入れて任意のプロジェクトに限定しています。

それと、よくある失敗は、
**EC2再起動した為にホスト先IPが変更されてしまいつながらない**ってのがあります。
これ意外と気が付きません(*ﾉω・*)ﾃﾍ
AWSの`ElasticIP`で固定しておきましょう。

sshで繋ぎたいだけなら、コレでOKですが、
Deployや、ファイル差分でも楽したいなら、次も設定しましょう。
`マッピング`タブを開きます。
![スクリーンショット 2020-02-14 10.54.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/16d23b5c-fc95-16de-1f4d-3e1cb7baf0f9.png)

何をやってるかと言うと、
localと、リモート先のどのディレクトリとディレクトリを同じに(同期)させるかを設定しています。

- ローカル・パス: local環境で同期したいディレクトリを設定
- デプロイメント・パス: リモート先で同期したいディレクトリを設定
- Web パス:(すいません、使ったことないです)
- Add New Mapping:同期させるMappingを追加することができます。

「デプロイメント・パス」について、注意点です。
ここにフルパスを書くのではなく、
**接続で入力したルートパスの続きのパスを書くこと**です。
私も使い始めの時、すこし混乱しました。
例: `/home/hoge/project/launch`に同期したいとします。
接続>ルートパスで、`/home/hoge/project`と入力したら、デプロイメントパスは`/launch`と入力します。

私のオススメは以下です。
・ルートパス:/home/hoge/project
・デプロイメントパス:/
理由ですが、
ssh接続機能を利用すると、ルートパスがその時の入り口となります。
余計に上位階層から入れてしまうと、結局cdでプロジェクトディレクトリに移動とかするので面倒です。
特に理由がない限り、ルートはプロジェクトパス、デプロイメントパスは/としています。

「Add New Mapping」同期させるディレクトリが分散している場合、
ひとつひとつ追加でマッピングすることができます。
出番は少ないですが、何らかの理由で、
ローカルの開発内容が複数のディレクトリにバラバラに格納されている場合や、
ローカルと、リモートでのディレクトリ構成が違うなど、マッピングを追加することで一元管理できるようなります。
加えて、マッピングをignoreする`除外パス`を指定して組み合わせると、かなり自由度が高く設定できます。
すべて設定が終わったら、右下の「OK」をクリックして、設定を反映します。

###リモート接続先の管理
左カラムの説明してなかったですね。
複数の接続先の管理ができます。

- 接続先の新規作成: 左上`+`から追加
- 接続先削除: 左上`-`で削除
- プロジェクトのデフォルト接続先に指定: 左上`✓`で指定

デフォルト接続先に指定先が、Deploy先となりファイルの同期や、差分チェックが簡単になります。
そのプロジェクトのメインのリモート先だと思ってください。

ここまでで、リモートホストに関して、GUIで簡単に操作ができるようなっています。


##使ってみる: リモートホストのファイル操作
サイドバーから、リモート・ホストを表示
デフォルトホストに設定した接続先が、自動で接続され展開します。
*例は、AWS上のautocoinってプロジェクトディレクトリ*
![スクリーンショット 2020-02-14 14.29.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/6ed781f4-feb6-73f0-567a-dc1d6561cf63.png)
接続先を変更したいときは`▼`から変更できます。
歯車アイコンから以下の表示内容をon/offできます。

- サイズの表示
- 日付の表示
- アクセス権の表示
- シンボリックリンクの強調表示
- マッピング対応のファイルに色をつける  
  (上記画像の場合、.git以外マッピング対象)

ファイルをダブルクリックすると、リモートのファイルを直接開くことができ、そのまま編集することもできます。
右クリックで、localのファイルと同期、アップロード、ダウンロードや差分表示、ファイル名変更、アクセス権の変更など、
結構、色んなことができます。



#デプロイ用をより楽にする
デプロイを簡単にするために、追加設定します。
`ツール > デプロイ > オプション`から選択
![スクリーンショット 2020-02-17 16.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/b48b4b9e-87d4-9d84-7260-b7817fe6ffe9.png)
ポイントだけ触れます。

- 変更されたファイルの〜自動アップデート: 明示的な保存操作時(⌘S)を選択。

他はお好みの設定でOKです。
これで、**⌘S押すだけで、AWSにデプロイできるようなります。**
この設定は、感覚的ですごく便利なのでぜひ設定しておくことをオススメします。
あたかも、リモートに保存するような感覚です。
ファイル単位だけでなくて、プロジェクトウィンドウから、ディレクトリを選択して⌘Sを押せばディレクトリ単位でリモートと同期できますし、複数ファイル選択して同期することもできます。
(逆に、仕事の本番運用では手軽にデプロイでき過ぎるので切っておいたほうが無難かもしれません。)


#ターミナルのssh接続を2クリックで。

AWSなどのリモート先にターミナルでssh接続する方法です。
`ツール > SSHセッションの開始...`の選択で、
接続先の選択ウィンドウが表示されて選ぶことができます。
しかし!
私は、コレすらも面倒くさかったので、ツールウィンドウにボタンを常駐させました。
ツールウィンドウを右クリックして`Customize Menus and Toolbars...`の選択からボタンを常駐させます。1度設定したら、
次回からは、、、
![スクリーンショット 2020-02-17 17.21.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/3f2e6dea-2011-87fb-e055-e726eeedfeb4.png)
レンコン? アイコンを1clickするだけで、接続先候補がウインドウ表示されます。
接続先選択と合計2clickだけで、ターミナルが開き自動でssh接続されます。



#DBとの簡単接続
Jetbrains社のIDEは、様々なDBと簡単接続することが可能です。
今回は比較的簡単な**sshトンネルを使用してDB接続する方法**を紹介します。

紹介する環境は以下となります。

- AWS:EC2 ubuntuAMIを使用
- ubuntuにMongoDBをインストール
- MongoDB: 「database→autocoin collection→btcfx」を構築
- AWS EC2上のMongoDBがdaemonで常駐稼働

Mongoのインストール方法や、設定方法は、別記事のコチラを参照ください↓
[【MongoDB】APIログ取るのに手軽で最高だった件 (+intellijだとさらに手軽)](https://qiita.com/akinko/items/b11a6e19b3b3dd8da119)

また、AWS上でのDB構築方法は多種多様です。皆さんの環境に随時、読み替えてください。


サイドバーからデータベースウィンドウを開く
`+`をクリックして接続先DBの新規作成します。
![スクリーンショット 2020-02-17 17.37.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/7b139070-fc33-2dcc-47bc-3bd16775250c.png)
データ・ソースのインポートの方法や、対応しているDBも結構豊富にあります。

今回は、`データ・ソース >MongoDB`を選択します。
![スクリーンショット 2020-02-28 12.09.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/f13a0837-7126-dc49-510a-047c390d854c.png)

- 名前:任意の自分が分かりやすい名前でOKです。
- ホスト:DB接続先のIPアドレスを入力します。  
今回は、`sshトンネル`を利用しますので、Mongoのデフォルトである`localhost`とします。
- ポート:DB接続先のポート番号を入力します。  
こちらも、Mongoデフォルトの`27017`を指定します。
- URL: DBの接続URL。スキーム名://ipアドレス:port番号です。

今回は、sshトンネルを使って、DB接続をしたいので、`SSH/SSL`タブも設定します。
![スクリーンショット 2020-02-28 12.11.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/f129ce00-3cbd-151f-6983-31aa80093b93.png)

- SSHトンネルを使用する
- プロキシー・ホスト:AWS-EC2のパブリックIPアドレスを入力します。
- プロキシー・ポート:sshトンネルするため、sshデフォルトの22番を設定。
- プロキシー・ユーザー:AWS-EC2に接続するアカウント名を入力
- 認証タイプ:`Key pair(OpenSSH or PuTTy)`を選択します。
- プライベート・キー・ファイル:ローカルに保存したAWS-EC2接続用に保存したpemファイルを設定。

sshタブで設定した内容で、AWSにssh接続して、その接続をトンネルして
一般タブで設定した内容でDBに接続します。
ここまで設定できたら、`適用 > OK`で設定を反映させます。


##DB接続を使ってみる
さて、1度設定してしまえばコッチのものです!
AWS上のDBへの接続は、もはやキーボードも使わずに、今後4clickだけとなります。
![スクリーンショット 2020-02-28 16.52.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215645/af787650-26bc-51ca-404f-991c109d3e96.png)

1. サイドバーの`データベース`をクリック
2. `データソース名`をクリック(例:autocoin@aws)
3. `データベース名`をクリック(例:autocoin)
4. `テーブルorコレクション`をダブルクリック(例:btcfx)

問題なければ、たったこれだけDB接続されます。
もう一度言います、わずか4クリックです。
しかも、IntelliJではDBの閲覧・変更、エキスポートなどの操作が直感的にできる機能がたくさんあります。
AWS-EC2上のDBへのアレコレが劇的に楽になりますよ、オススメです!

IntelliJでのDB接続画面に関しては、前述した記事をご参考ください。
[【MongoDB】APIログ取るのに手軽で最高だった件 (+intellijだとさらに手軽)](https://qiita.com/akinko/items/b11a6e19b3b3dd8da119#intellijjetbrains%E3%82%92%E5%88%A9%E7%94%A8)



#おわりに

私は、Jetbrains社のIDEを使用していますが、
他のIDEでも似たような機能があるかもしれません。
ご自分のIDEを調べてみると、作業効率が爆上がりするかもしれませんよ!

ツールに頼れるところはできるだけ自分でやらずに、
自分のチカラがつくところ、人間しかやれないところに時間を割いていきたいですね。
最後まで、お読み頂きありがとうございました!!!