📝

EC2をリモート開発環境にする時のTips

2021/05/22に公開

最近、VSCode Remote Developmentなどを用いて、EC2上に開発用マシンを置く構成に凝っていて、その覚え書きです。 気づいたことが増える度に更新しようと考えています。

前提

  • EC2はSpotインスタンスを使う
  • 普段はVSCodeのRemote Developmentを用いる
  • OSはAmazon Linux2 (ただしこれはUbuntuで良かったかも)

なにがうれしいの?

  • 手元の環境に依存せずに開発ができる
    • 出先などからちょっとした調整をする時にiPadとキーボードあれば何とかなる
    • デスクトップとノートブックを併用している場合などによい
  • 回線が爆速
    • パッケージのインストールなどが高速
    • 手元の回線が遅くても開発環境は速いのでデプロイやgit pull/pushなどがスムーズ

ただし、開発用のEC2がクラックされるとヤバめなので、各自セキュリティはきっちり意識しましょう。

細かい環境構築系Tips

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 を作っておく必要がある。

https://github.com/aws/aws-cdk/issues/1656#issuecomment-521118275

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