EC2を開発環境として利用する際の構築手順
開発環境としてEC2を選ぶ理由
- 高速な通信環境が欲しかったから
- 自宅での開発と、外出先での開発を行っており、それらでローカル開発環境を統一したかったから。
- 持っているマシンが貧弱だった為、ローカル開発環境くらいは良いマシンでコンパイル速度を早めたい
- EC2にIAM roleを付与することで、Secretを保存する必要がなくなり、セキュリティ事故の可能性を低減することができる
VPCを作成する
aws ec2 create-vpc --cidr-block 10.0.0.0/16 --query Vpc.VpcId --output text
vpc-0a73e042f9d80bd32
サブネットを作成する
EC2を立てるためのサブネットを作成します。
aws ec2 create-subnet --vpc-id vpc-0a73e042f9d80bd32 --cidr-block 10.0.1.0/24
今回は使いませんが、今後のため2つ目のサブネットを作成します。こちらはプライベートサブネットとする予定です。
aws ec2 create-subnet --vpc-id vpc-0a73e042f9d80bd32 --cidr-block 10.0.0.0/24
サブネットをパブリックにする
サブネットをパブリックにするために、VPCにインターネットゲートウェイをアタッチします。
まずインターネットゲートウェイを作成します。インターネットゲートウェイが無いとパブリックサブネットを作成することができないためです。
ws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text
igw-0df36c496ef768575
次にインターネットゲートウェイを作成したVPCにアタッチします
aws ec2 attach-internet-gateway --vpc-id vpc-0a73e042f9d80bd32 --internet-gateway-id igw-0df36c496ef768575
次に空のカスタムルートテーブルを作成します。この時点ではルーティングが設定されていません。
aws ec2 create-route-table --vpc-id vpc-0a73e042f9d80bd32 --query RouteTable.RouteTableId --output text
rtb-025cf33f51376831a
ルートテーブルにルーティングを設定します。全てのトラフィックが作成したインターネットゲートウェイにルーティングされるルートを作成します。この時点ではルーティングテーブルにルートを設定しただけですので、各サブネットにルートが関連付けられているわけではありません。
aws ec2 create-route --route-table-id rtb-025cf33f51376831a --destination-cidr-block 0.0.0.0/0 --gateway-id igw-0df36c496ef768575
作成したルートテーブルの状況を確認してみます。確かに全てのトラフィックがインターネットゲートウェイに流れる仕様になっていることが確認できます。
$ aws ec2 describe-route-tables --route-table-id rtb-025cf33f51376831a
{
"RouteTables": [
{
"Associations": [],
"PropagatingVgws": [],
"RouteTableId": "rtb-025cf33f51376831a",
"Routes": [
{
"DestinationCidrBlock": "10.0.0.0/16",
"GatewayId": "local",
"Origin": "CreateRouteTable",
"State": "active"
},
{
"DestinationCidrBlock": "0.0.0.0/0",
"GatewayId": "igw-0df36c496ef768575",
"Origin": "CreateRoute",
"State": "active"
}
],
"Tags": [],
"VpcId": "vpc-0a73e042f9d80bd32",
"OwnerId": "776203529156"
}
]
}
実際に作成されているサブネットの状況を確認します
aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-0a73e042f9d80bd32" --query "Subnets[*].{ID:SubnetId,CIDR:CidrBlock}"
サブネットのうちの一つをルーティングテーブルに関連付けます。これによりアタッチされたサブネットでインターネットゲートウェイへのルーティングが行われる様になった為、このサブネットがパブリックサブネットとなります。
aws ec2 associate-route-table --subnet-id subnet-0291570ec75ebe8f4 --route-table-id rtb-025cf33f51376831a
作成したパブリックサブネットに対して、パブリックサブネットに起動されたインスタンスに自動的にパブリックIPを付与する設定に変更します。
aws ec2 modify-subnet-attribute --subnet-id subnet-0291570ec75ebe8f4 --map-public-ip-on-launch
インスタンスを作成する
EC2インスタンスを作成するために、まずはkey pairを作成します
aws ec2 create-key-pair --key-name MyKeyPair --query "KeyMaterial" --output text > MyKeyPair.pem
VPCに空のセキュリティグループを作成します
aws ec2 create-security-group --group-name SSHAccess --description "Security group for SSH access" --vpc-id vpc-0a73e042f9d80bd32
{
"GroupId": "sg-0d39ab3f94597b16e"
}
作成した空のセキュリティグループにあらゆる場所からの SSHアクセスを許可するインバウンドルールを設定します。cidrブロックの部分は、今後アクセス元のIPアドレスに絞る様にします。
aws ec2 authorize-security-group-ingress --group-id sg-0d39ab3f94597b16e --protocol tcp --port 22 --cidr 0.0.0.0/0
パブリックサブネット内部に(ようやく)インスタンスを起動します。
コマンドで最新のAMIを取得しています。
aws ec2 run-instances --image-id $(aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query 'Parameters[0].[Value]' --output text) --count 1 --instance-type t3a.large --key-name MyKeyPair --security-group-ids sg-0d39ab3f94597b16e --subnet-id subnet-0291570ec75ebe8f4
以下のコマンドを打つことで接続できます。
ssh -i "MyKeyPair.pem" ec2-user@xx.xx.xx.xx
今後、このEC2上で開発を行うことができる様になりました。
次は EC2にIAM roleを付与し、AWS CLIを使って全リソースにアクセスできる様にしていきます。
Discussion