開発環境をEC2に移行したい。

こんにちは!k-junです。

コロナでいろいろ暇なので、パソコンの開発環境をEC2に移行した話でもしようと思います。 自分の現在所持しているパソコンがMacBook 13-inch(2017) 8GB 2.3 GHz デュアルコアIntel Core i5というスペックなのですが、ここ最近開発が急に辛くなってきまして。といっても購入したのが約2年前かつ入社前ということで時期的にも買い替えには微妙な時期... ということでひとまず開発環境をEC2に移すことにしました。

他の人のブログではLambdaで管理していたりといろいろとお洒落なことをやっていたのですが、自分は簡易的なものをひとまず作ることにしました。

EC2の基本的な動作は全てMakefiledで管理することとしました。public-adderssがいちいち変わってめんどくさいのでroute53で独自ドメインを購入しておきます。https環境も同時に手に入るのでいい感じですね。

run-instance:
    # ubuntu 18.04
    aws ec2 run-instances --image-id ami-0cd744adeca97abb1 --instance-type t2.xlarge --key-name YOUR_KEY_PAIR --security-groups YOUR_SECURITY_GROUP --user-data file://${PWD}/init.sh

describe-instances:
    aws ec2 describe-instance-status | jq -r ".InstanceStatuses[] | select(.InstanceState.Name == \"running\") | .InstanceId" | xargs aws ec2 describe-instances --instance-id | jq -r ".Reservations[].Instances[] | .InstanceId, .PublicIpAddress"

stop-instances:
    aws ec2 stop-instances --instance-ids YOUR_INSTANCE_ID

start-instances:
    aws ec2 start-instances --instance-ids YOUR_INSTANCE_ID

terminate-instances:
    aws ec2 describe-instance-status | jq -r ".InstanceStatuses[] | select(.InstanceState.Name == \"running\") | .InstanceId" | xargs aws ec2 terminate-instances --instance-id 

change-resource-record-sets:
    aws route53 list-hosted-zones --max-items 1 | jq -r ".HostedZones[] | .Id" | xargs aws route53 change-resource-record-sets --change-batch file://${PWD}/ipaddress.json --hosted-zone-id 

ssh-login:
    ssh -i ~/.ssh/KeijunAWSKeyPair.pem ubuntu@your.domain.com

現状はinstanceのstopとstartgがinstance-idを手打ちになっているので、tagなどを使ってあとでいい感じにしようかとは思っています。流石にいちいちコピペなんてやってられないですからね...

初期スクリプトはとりあえず、最低限のものだけを突っ込んでおきます。Dockerあれば開発できるやろ。

#!/bin/bash


# basic setup
apt -y update
apt-get -y update

# vim setting
add-apt-repository -y ppa:jonathonf/vim
apt -y update
apt install -y vim 

cd /home/ubuntu
git clone http://github.com/k-jun/dotfiles
chown -r ubuntu /home/ubuntu/
chgrp -r ubuntu /home/ubuntu/
runuser -l ubuntu -c 'cd dotfiles && bash install.sh'

# docker
apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fssl https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0ebfcd88

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get -y update
apt-get install -y docker-ce docker-ce-cli containerd.io
# to use docker command without sudo
# groupadd docker
usermod -ag docker ubuntu

route53のルーティングを変更する際の設定です。aws route53 change-resource-record-sets --generate-cli-skeletonでテンプレートの設定ファイルを精製してくれるのでこれを編集して用いています。

{
  "Comment": "update resource record to created instance's public ip address",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
          "Name": "your.domain.com.",
          "Type": "A",
          "TTL": 300,
          "ResourceRecords": [
            {
              "Value": "13.230.8.132"
            }
          ]
      }
    }
  ]
}

これでひとまずはコマンドで開発環境を作成してまでできているはずです。現状軽いものから移行しようとしているのですが、まだまだ問題も多く完全には移行できていない状態です... お金が溜まって僕が新しいMacを買うのが先になってしまうかもしれませんね...