これまで VPS をレンタルしてましたが、利用頻度がさほどでもないので、必要時だけ EC2 のインスタンスを起動することで定額課金を無くそうと思いました。t2.micro や t2.nano のインスタンスは開発環境としてはそこそこのスペックで時間当たり料金も安いので財布にやさしいのです。
モバイルから Web UI でインスタンスの起動や停止を行うのは面倒なので、AWS CLI を使いたいところです。AWS CLI の実行には Python が必要なので単なる SSH クライアントアプリだと動きません。
ということで、AWS のドキュメントを参考にしながら Android と iOS でそれぞれ環境構築してみました。
Android
もちろん Termux を使います。
Python 環境を構築して、awscli を pip install します。
# Python パッケージをインストール $ pkg install python python-dev # venv を作成 $ python3 -m venv enva # venv をアクティベート $ source /enva/bin/activate (enva) $ # pip で awscli をインストール (enva) $ pip install awscli # awscli 起動確認 (enva) $ aws --version aws-cli/1.16.96 Python/3.7.2 Linux/4.9.96-gce70628-ab5122554 botocore/1.12.86
iOS
iSH (ベータテスト中) を使いました。
iSH は Alpine Linux ベースなので apk コマンドでパッケージをインストールします。
# sudo をインストール sudo ユーザ追加 # apk add sudo # adduser user1 # vi /etc/sudoers # python3 をインストール $ sudo apk add python3 python3-dev # venv を作成 $ python3 -m venv enva # venv をアクティベート $ source enva/bin/activate # awscli を pip でインストール (enva) $ pip3 install awscli # awscli 起動確認 (enva) $ aws --version aws-cli/1.16.96 Python/3.6.6 Linux/3.2.0-ish botocore/1.12.86
iSH は Python のチューニングがまだみたいでけっこう待たされますが一応 aws コマンドは使えるようになりました。
EC2 インスタンスの作成
AWS の EC2 マネージメントコンソールでキーペアを作成し、作成したキーペアを使って EC2 インスタンスを AMI から作成します。 今回は、Ubuntu を選択しました。
キーペアの作成も EC2 マネージメントコンソールで行いました。AWS CLI でコマンドを叩く方法もあるのですが、インスタンスを複数の端末から使うため、キーペアのファイルを取得しておきたいためです。
AWS CLI の設定
あとは端末ごとに設定を行います。AWS CLI の設定用サブコマンドでアクセスキーID、アクセスキー、リージョン、出力フォーマットを入力します。
(enva) $ aws configure AWS Access Key ID [None]: xxxxxxxxxxxx AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxx Default region name [None]: ap-northeast-1 Default output format [None]: text
キーペアのファイルを保存し、読み取り権限を変更しておきます。
$ chmod 400 devenv-key.pem
以上で、EC2 インスタンスへの接続準備ができました。
起動、接続、停止
固定 IP アドレスは取得していないので、起動のたびにインスタンス ID から取得する必要があります。
# venv をアクティベート $ source enva/bin/activate # インスタンス起動 (enva) $ aws ec2 start-instances --instance-ids "i-xxxxxxxxxxxxxxxxxxx" # IP アドレス取得 (enva) $ aws ec2 describe-instances --instance-ids i-xxxxxxxxxxxxxxxxxxx --query "Reservations[0].Instances[0].PublicIpAddress" # ssh でログイン (enva) $ ssh -i devenv-key.pem ubuntu@xx.xxx.xxx.xxx # インスタンス停止 (enva) $ aws ec2 stop-instances --instance-ids "i-xxxxxxxxxxxxxxxxxxx"
シェルにしておいた方がいいですね。これで Pixel 3 からも iPad からも EC2 インスタンスを起動して SSH 接続、停止ができるようになりました。iSH はまだベータ版とはいえ、SSH に関しては問題なく作業できる状態です。
EC2 インスタンス自体も必要時に AMI から作って環境構築を Ansible で実行するよう自動化しておけば、Immutable Infrastructure をさらに進めることができます。今後 Ansible Playbook を整備していきたいと思います。