📝
EC2をリモート開発環境にする時のTips
最近、VSCode Remote Developmentなどを用いて、EC2上に開発用マシンを置く構成に凝っていて、その覚え書きです。 気づいたことが増える度に更新しようと考えています。
前提
- EC2はSpotインスタンスを使う
- 普段はVSCodeのRemote Developmentを用いる
- OSはAmazon Linux2 (ただしこれはUbuntuで良かったかも)
なにがうれしいの?
- 手元の環境に依存せずに開発ができる
- 出先などからちょっとした調整をする時にiPadとキーボードあれば何とかなる
- デスクトップとノートブックを併用している場合などによい
- 回線が爆速
- パッケージのインストールなどが高速
- 手元の回線が遅くても開発環境は速いのでデプロイやgit pull/pushなどがスムーズ
ただし、開発用のEC2がクラックされるとヤバめなので、各自セキュリティはきっちり意識しましょう。
細かい環境構築系Tips
- 最初に
sudo yum install util-linux-user
しておく - SSH鍵はED25519 (AWSからは指定出来ないのでRSAで入った後に差し替え)
- t3a系インスタンス(x86)
- atomだとdocker-composeが簡単には入らないなどで大変だったのでやめた
- Swapは設定する https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-memory-swap-file/
- awsコマンドは2系に更新しておこう https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html#cliv2-linux-install
- anyenv便利
- homebrewがlinux対応してるので入れるのもアリ
- 特にネットの環境構築記事はhomebrew前提のものも多く、homebrewだと同じコマンド・パッケージ名で入るのでちょっと楽が出来る(かも)
CPU使用率が低かったら自動シャットダウン
CloudWatch AlarmでCPUUtilizationを見てMAXが5%以下だったらシャットダウンするようにセットアップしておくと無駄な課金をせずに済む。 CPUと時間の閾値はお好みで。
なんと、Alarmが上がると関連するEC2インスタンスをシャットダウンする機能がCloudWatch Alarmには標準で搭載されているので、Lambdaとかでシャットダウンするスクリプトを書く必要はない。
EC2 Role からの Switch Role
EC2 Role からプロジェクトごとのAWSアカウントにSwitch Role出来るようにしておくと便利。
その場合の設定は以下のようにする。
~/.aws/config
[default]
region = ap-northeast-1
[profile my-external]
region = ap-northeast-1
# mfa必須なら↓のようにする
# mfa_serial = arn:aws:iam::012345678912:mfa/hoge
role_arn = arn:aws:iam::012345678912:role/YourOrganizationAccess
credential_source = Ec2InstanceMetadata
EC2 Role → Switch Role → CDK する時のエラーと回避方法
上記の設定をしていてaws cliがきちんと動作しても Need to perform AWS calls for account XXXXXXXXXXX, but no credentials found.
的なエラーが発生する。
空ファイルで良いので ~/.aws/credentials
を作っておく必要がある。
fs.inotify.max_user_watches を増やしておく
VSCodeやらrails consoleやらが使うので増やしておくと良い
``
$ sudo sh -c "echo fs.inotify.max_user_watches=524288 >> /etc/sysctl.conf"
$ sudo sysctl -p
https://github.com/guard/listen/blob/master/README.md#increasing-the-amount-of-inotify-watchers
Discussion