Amazon Linux WorkSpaces 開発環境セットアップ例
はじめに
これは、PCスペック面等の事情で、急ぎそれなりに強力めの開発環境が必要な際に利用が有効な Amazon Linux Workspaces にて、最低限のセットアップを手早く行う手順をまとめた記事です。
2020年11月時点の以下記事の情報をある程度ベースにしています。
この中↑にちらっと記述があるのですが、この記事をなぞってのセットアップの際には何度かパスワードが要求されるシーンがあります(sudo
・ansible-playbook の become)ので、打ち込みやすいもので進めるのが良さそうです。
また、管理者によるユーザー作成時に来るメールを受け取って、クライアントツールのダウンロード・インストールとパスワード設定は完了している状態を想定して記述します。
SSH 接続設定に慣れている方であれば、最初に 調整事項 の SSH接続設定 をやってしまって慣れたターミナルでセットアップを進めるのがベターかもしれません。
利用する alw-provisioner
手前味噌ですが、2022/6/17 時点でそれなりに妥当に動作したので、以下を利用します。
利用する前提として、
sudo amazon-linux-extras install ansible2
で Ansible 2 系をインストールしておいてください。[1]
alw-provisioner の clone
- clone するディレクトリを作成
例)mkdir ~/temp
- clone するディレクトリに移動
例)cd ~/temp
- alw-provisioner の clone
git clone https://github.com/ant-in-giant/alw-provisioner.git
~/temp/alw-provisioner
が生成されているはず
セットアップ対象
以下のツールに関して、インストール手順を記述します。
拡張機能・プラグインやライセンス設定は各自で必要なものを適宜追加・対応してください。
(1) VS Code
- ブラウザで
VSCode
を検索する等で Visual Studio Code のサイト へ進み、「今すぐダウンロード」へ - .rpm[2] のところのボタンを押下してインストールメディアをダウンロード
↑スクリーンショット (1)
-
~/ダウンロード
ディレクトリにcode-[version]-[identify].el7.x86_64.rpm
のような名前でインストールメディアが存在することを確認 - ターミナルでインストールコマンド実行
例)sudo rpm -ivh code-1.68.1-1655263151.el7.x86_64.rpm
- インストール完了後、ターミナルで
code
コマンドを実行すると、VS Code が起動される
OS再起動後に、左下「アプリケーション」から「プログラミング」に Visual Studio Code
が追加されるのでここからでも起動できる
(2) IntelliJ IDEA (Ultimate)
-
alw-provisioner
のディレクトリに移動
例)cd ~/temp/alw-provisioner
- IntelliJ IDEA インストール実行
make ij
(少々待ち時間がかかると思います)
~/Applications/idea
ディレクトリが生成されており、~/Applications/idea/bin/idea.sh
が起動シェル。
適宜、「リンクを作成」したり「指定先に移動 -> デスクトップ」等を行ってショートカットを作るのが良さそう。
アイコン変える等も適宜、任意で。
補足
- Linux版のダウンロードページ
- インストールされるバージョンは
alw-provisioner/roles/intellij-idea/vars/main.yml
の記述に従う - インストール処理の詳細は
alw-provisioner/roles/intellij-idea/tasks/main.yml
の通り- Community版 をインストールしたい場合は↑の 5 行目
ideaIU
をideaIC
に変えればいけそう(未検証)
- Community版 をインストールしたい場合は↑の 5 行目
(3) nvm
-
alw-provisioner
のディレクトリに移動
例)cd ~/temp/alw-provisioner
- nvm インストール実行
make nvm
- 新規ターミナルを起動したうえで[3]、nvm のバージョンを確認
nvm --version
alw-provisioner/roles/nvm/vars/main.yaml
のバージョンの通りであれば成功している状態と思われます
その後の Node.js インストールコマンド例(v16.15.1)
nvm install v16.15.1
nvm use v16.15.1
他の使い方に関しては GitHub の nvm リポジトリ を参照してください
補足
- インストールされるバージョンは
alw-provisioner/roles/nvm/vars/main.yml
の記述に従う - インストール処理の詳細は
alw-provisioner/roles/nvm/tasks/main.yml
の通り
(4) Google Chrome
- ブラウザで
chrome
を検索する等で Google Chrome のサイト へ進み、「Chromeをダウンロード」ボタンを押下してインストールメディアをダウンロード
↑スクリーンショット (4)-1
-
~/ダウンロード
ディレクトリにgoogle-chrome-stable_current_x86_64.rpm
のような名前でインストールメディアが存在することを確認 - ターミナルでインストールコマンド実行
例)sudo yum localinstall google-chrome-stable_current_x86_64.rpm
- インストール完了後、左下「アプリケーション」から「インターネット」に
Google Chrome
が追加されるのでここから起動できる
起動のたびに「ログインのキーリングのロック解除」ダイアログが出ますが、「キャンセル」で問題ないです(適切なのかは未確認ですが「キャンセル」で自分には問題が起きたことはない)
↑スクリーンショット (4)-2
なお、Microsoft Edge もこれとほぼ同様の手順でセットアップできます(インストールメディアのファイル名が異なるくらい)
(5) docker
- ターミナルでインストールコマンド実行
sudo amazon-linux-extras install docker
バージョン確認はdocker version
など -
alw-provisioner
のディレクトリに移動
例)cd ~/temp/alw-provisioner
- サービス登録・自動起動有効化コマンド実行
make services
補足
- サービス登録・自動起動有効化処理の詳細は
alw-provisioner/roles/services/tasks/main.yml
の通り - サービス登録の確認コマンド :
sudo systemctl status docker
- 自動起動有効化の確認コマンド :
sudo systemctl is-enabled docker
-> enabled だったら自動起動有効
インストールはこれで完了だが、後述する 調整事項
を実施する必要があり、未実施の状態だと docker 利用時に「インターネットに出る(ダウンロードなど)」通信ができない可能性が高い
(6) docker-compose
いくつかのセットアップ方法があるようですが、ここでは
からダウンロードして PATH の効いているディレクトリに配置する、の手法を採用します- 任意のディレクトリに移動
例)cd ~/temp/
- Docker Compose の release page から
docker-compose-linux-x86_64
のバイナリをダウンロード[4]
例)wget https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64
- ダウンロードしたバイナリのパーミッションを変更
sudo chmod +x docker-compose-linux-x86_64
- PATH の効いているディレクトリにバイナリをリネーム+移動
sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
- バージョンとPATHが効いていることの確認
docker-compose version
which docker-compose
妥当にバージョンが表示されればOKです
調整事項
SSH 接続設定
別途セキュリティグループの設定が必要ですが、CLI派には iTerm2 などのターミナルから接続できると何かと便利です。
sudo yum install tmux
で tmux のインストールを加えるのもオススメです。
`ssh my-alw` で接続するまでの設定手順
WorkSpaces側 (標準のターミナル)
-
ssh-keygen -t rsa
で鍵ペアを作成
デフォルトのままであれば~/.ssh/
にid_rsa
とid_rsa.pub
が作成される
パスフレーズを設定する等は必要に応じて適宜ご対応ください -
cd ~/.ssh
で移動してcat id_rsa.pub >> authorized_keys
する(sshd_config デフォルトの AuthorizedKeysFile に追記/新規作成) -
chmod 600 authorized_keys
でパーミッション調整 -
cat id_rsa
で秘密鍵を表示しておく(クリップボードにコピーしておくと尚良い)(*1)
自身の端末側で (Mac を想定)
-
cd ~/.ssh
(存在しなければ、mkdir -p ~/.ssh; sudo chmod 600 ~/.ssh; cd ~/.ssh
を行う) -
vi alw.key
等で秘密鍵ファイルを作成し、(*1) の内容を転記して保存する(鍵ファイル名は任意) -
sudo chmod 600 alw.key
しておく -
vi config
で設定ファイルを編集モードで開き、以下のような内容を追記する(パーミッションは 600)
Host my-alw
User "CORP\sogaoh" # `NetBIOS名\Username` (WorkSpaces側のターミナルから `id` で確認できる)
Hostname ${IPアドレス} # ${IPアドレス} はWorkSpaces側のターミナルから `curl ifconfig.io` 等で確認できる
IdentityFile ~/.ssh/alw.key # 正確な秘密鍵ファイルパス
ここまで設定後、ssh my-alw
でSSH接続できる(できない場合はパーミッションかセキュリティグループか鍵の内容を確認してください)
公式ガイドは↓になりますので必要に応じて参照ください。
docker 権限・通信設定
Docker の設定調整が必要で、DNS を Google Publix DNS に設定 という手数少なくベターな方法を見つけたのでこちらを記載します。
調整手順
-
sudo gpasswd -a $USER docker
# ログインユーザーで Docker の操作を行えるように設定 -
sudo vi /etc/docker/daemon.json
で以下の設定を作成
{
"dns": ["8.8.8.8", "8.8.4.4"],
"dns-search": ["."]
}
-
sudo systemctl restart docker
で Docker を再起動 -
一旦ログアウトして接続し直す
-
コマンド
docker run --rm amazonlinux:2 curl -s https://github.com/status
を実行してGitHub lives!
と表示されればOK -
後始末として amazonlinux:2 の image を削除しておくのが良いと思います[5]
こんな感じのコンソール出力を想定
❯ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
CORP\sogaoh@a-XXXXXXXXXXXXX ~
❯ docker run --rm amazonlinux:2 curl -s https://github.com/status
Unable to find image 'amazonlinux:2' locally
2: Pulling from library/amazonlinux
8de5b65bd171: Pull complete
Digest: sha256:246ef631c75ea83005889621119fd5cc9cbb5500e193707c38b6c060d597a146
Status: Downloaded newer image for amazonlinux:2
GitHub lives! (2022-06-18 03:06:53 -0700) (1)
CORP\sogaoh@a-XXXXXXXXXXXXX ~ 10s
❯ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amazonlinux 2 ecdeb69c57ad 6 weeks ago 164MB
CORP\sogaoh@a-XXXXXXXXXXXXX ~
❯ docker rmi ecdeb69c57ad
Untagged: amazonlinux:2
Untagged: amazonlinux@sha256:246ef631c75ea83005889621119fd5cc9cbb5500e193707c38b6c060d597a146
Deleted: sha256:ecdeb69c57ad20820ceb442c918b35228a6c9d04d6458768fdf4e86429cbccca
Deleted: sha256:2ce46c79ab58cf3d6f9556e9141c0564407a50028040a94bb8a82ab6e33331c2
CORP\sogaoh@a-XXXXXXXXXXXXX ~
❯ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
CORP\sogaoh@a-XXXXXXXXXXXXX ~
手数が多くなるのですが↓の方法+OS再起動でも可能です。(sudo gpasswd -a $USER docker
は必要なので初手で実行してください)
その他の設定
ひとまずここまでで伝えたいセットアップ手順としては完了なのですが、個人的には以下も実行して新環境を運用しています。
僕が実行したスクリプト
cd ~/temp/alw-provisioner
make brew # linuxbrew のインストール
make zsh # zsh・Prezto のインストールとデフォルトシェル切り替え
make dot # dotfiles の投入(僕好みなので採否は適宜ご検討ください: refs https://github.com/ant-in-giant/alw-provisioner/tree/main/roles/dotfiles/files )
(ログインし直して)
brew install direnv
brew install anyenv
anyenv install --init # ここまで、ログイン時のワーニング除去
(もう一度ログインし直して)
brew install peco # これで強力なショートカットが増える。^H(history), ^F(selected_dir), ^R(repos), そして ^x^i(peco-docker-images)
料金に関して
気になる料金に関して確認したのですが、
- 東京リージョン
- スタンダード(2 vCPU、4 GBメモリ)
- ルートボリューム 80GB、ユーザーボリューム 50GB
で月額料金($43)と時間料金($14+$0.36x4[hours]x20[days]=$14+$28.8=$42.8)でほぼ同じとなる計算でした。
つまり1日4時間を20日使ってると月額とだいたい同じになるので、AutoStopの体験(起動がやや時間かかる)を考慮すると、開発機として毎日ヘビー目に使うのであれば初めから AlwaysOn の方が良さそうです。
起動時の AutoStop/AlwaysOn 設定
制限事項
https://speedtest.net などで速度を計測してみるとわかると思うのですが、ネットワークは上下とも非常に速いです。Docker の動作も Intel Mac と比較すると格段に速く感じると思います。
このように強力な Amazon Linux WorkSpaces ですが、2022/6/18時点でわかっている辛いところが以下になります。ご認識置きください。
- 標準のターミナルでの日本語入力が思うようにできない場合がある
- 右下の「JA」をクリックしてモードを変えることで調整できたりもするみたいです。最近知りました。。
- 標準のターミナルでクリップボードに思うようにコピーができてないケースがある
- パスワードをペーストしてはずなのに通らない、がよく起こります。どうにか可視化したいと思うものの致命的に困ってはいないのでこれ以上追究をしていないです
- イメージからバンドルを作成してそれから WorkSpaces を起動しても、結局のところセットアップは1からやり直し
- バックアップが取れない、という感じです。突然の壊れちゃったに対する備えとしては、こまめにリポジトリに push するようにしましょう
- 量産できると・・・言うことないのですが・・・
対処方法わかったり、他にも辛いところがあったら随時追記していきたいと思います。
-
Ansible のバージョン確認コマンド:
ansible --version
↩︎ -
Amazon Linux WorkSpaces はOSが Amazon Linux 2 でベースが Fedora だと思っている ↩︎
-
https://github.com/nvm-sh/nvm/blob/master/install.sh が実行されて各種環境設定が行われるため、それが反映されるのが新規ターミナル起動以降 ↩︎
-
右クリックメニューで「リンクのアドレスをコピー」しておくと良いです ↩︎
-
コンソール出力中の
CORP
は WorkSpaces のデフォルトNetBIOS名で、Simple AD を利用する等している場合は異なります(関連情報 : https://docs.aws.amazon.com/ja_jp/workspaces/latest/adminguide/launch-workspace-simple-ad.html) ↩︎
Discussion