aws-cliでネットワーク&Webサーバの構築(Infrastructure as Command!?)してみた
ブラウザ操作だけだったので新鮮。GUIは最初は良いけど、何度も同じ事を繰り返すなら、確かにコマンド実行の方が良いな。
AWSのネットワーク設定(VPC+IGW+サブネット+ルートテーブル)を1つずつ作成して、ec2+apacheでWebサーバ構築! ネットワーク設定から作ると、超面倒だな・・・。
参考URL
1, LANであるVPC(Virtual Private Cloud)を生成。
JSON形式で結果が返ってくるので、VpcIdをコピペしておく(ブラウザのコンソール画面からも確認できる)
1 |
aws ec2 create-vpc --cidr-block 10.0.0.0/16 |
ec2は直接関係ないけど、aws ec2コマンドというセットでの記述が普通みたい。
2, いま作ったVPC(Virtual Private Cloud)に名前を付ける。戻り値は無し。
createした時に、同時に名前を付けたい…。
1 |
aws ec2 create-tags --resources vpc-コピペしておいたVPC-ID --tags Key=Name,Value=test-laravel |
3, このままだとインターネット接続出来ないので、インターネットゲートウェイを作って接続する
1 2 3 4 5 6 7 |
aws ec2 create-internet-gateway # VPCと同じくIDが返されるので、名前を付ける。 aws ec2 create-tags --resources igw-コピペしておいたIGW-ID --tags Key=Name,Value=test-laravel # VPCにIGWを接続して、インターネット接続できるようにする。 aws ec2 attach-internet-gateway --internet-gateway-id igw-コピペしておいたIGW-ID --vpc-id vpc-コピペしておいたVPC-ID |
4, Web公開用のパブリック・サブネットを生成。リージョンとか気にせずに作ってきたけど、サブネットはAZ指定する必要がある。
ブラウザのコンソールから見ると、全て日本リージョン(ap-northeast)で生成されてた。
1 2 3 4 |
aws ec2 create-subnet --vpc-id コピペしておいたVPC-ID --cidr-block 10.0.0.0/24 --availability-zone ap-northeast-1a # VPCと同じくIDが返されるので、サブネットに名前を付ける。 aws ec2 create-tags --resources subnet-コピペしておいたサブネット-ID --tags Key=Name,Value=test-laravel-public-subnet |
5, ルートテーブル作成(igwと作成したサブネットを結びつけて、インターネット接続できるようにする=パブリック・サブネット化)
describe-route-tablesでルートテーブル本体を作成。create-routeでルーティングルールを追加していく。
1 2 3 4 5 6 7 8 9 10 11 |
# ルートテーブルIDが返ってくるのでコピペしておく。 aws ec2 describe-route-tables --filters Name=vpc-id,Values=コピペしておいたVPC-ID # ルートテーブルに名前を付ける。 aws ec2 create-tags --resources rtb-コピペしておいたルートテーブル-ID --tags Key=Name,Value=test-laravel-route-table # ここでルーティング設定を作成。LAN内(10.0.0.0/16)以外の全てのパケットはigwとやり取りする。 aws ec2 create-route --route-table-id コピペしたルートテーブルID --destination-cidr-block 0.0.0.0/0 --gateway-id コピペしたインターネットゲートウェイID # 作ったルートテーブル(ルーティング設定)を、パブリック・サブネットに関連付けする aws ec2 associate-route-table --route-table-id コピペしたルートテーブルID --subnet-id コピペしたサブネットID |
6, セキュリティーグループ(ファイアウォール)の設定。SSH(22)とHTTP(80)を許可する。
1 2 3 4 5 6 7 8 9 |
# セキュリティーグループ作成。security_group_idが返ってくるのでコピペ aws ec2 create-security-group --group-name test-laravel-security-group --vpc-id コピペしたVPCのID --description "test-laravel-security-group" # 名前を同時に付与できるかと思いきや、グループ名と説明だけだった・・・。 aws ec2 create-tags --resources コピペしたセキュリティーグループID --tags Key=Name,Value=test-laravel-security-group # SSH(22)とHTTP(80)を許可する。 aws ec2 authorize-security-group-ingress --group-id コピペしたセキュリティーグループID --protocol tcp --port 22 --cidr 0.0.0.0/0 aws ec2 authorize-security-group-ingress --group-id コピペしたセキュリティーグループID --protocol tcp --port 80 --cidr 0.0.0.0/0 |
7, EC2接続用のキーペア生成
1 2 |
# 返り値のKeyMaterialをコピペして、適当なファイル名(test-laravel.pem)で保存して秘密鍵として使う。 aws ec2 create-key-pair --key-name test-laravel |
8, ようやくEC2インスタンス生成
1 2 3 4 5 6 7 8 9 |
# amazon linux2が、東京リージョンに存在するか確認する。 aws ec2 describe-images --image-ids ami-0a2de1c3b415889d2 --region ap-northeast-1 # EC2インスタンス作成 # AMI・キーペア・セキュリティーグループ・サブネット・パプリックIP・インスタンスタイプ(t2.micro)を指定する。 aws ec2 run-instances --image-id ami-0a2de1c3b415889d2 --key-name test-laravel --security-group-ids コピペしたセキュリティーグループID --subnet-id コピペしたサブネットID --associate-public-ip-address --instance-type t2.micro # 戻り値のインスタンスIDで名前を付与 aws ec2 create-tags --resources コピペしたEC2インスタンスID --tags Key=Name,Value=test-laravel-ec2 |
9, Elastic IP作成&割り当てて、EC2を固定IP化する
1 2 3 4 5 |
# AllocationId(EIP ID)と、PublicIpをコピペ aws ec2 allocate-address # EC2に紐付ける aws ec2 associate-address --allocation-id コピペしたEIPのIP --instance コピペしたEC2インスタンスID |
10, 秘密鍵+SSHクライアントを使って、EIPアドレスにSSH接続できるか確かめる。
11, PHPとWebサーバのインストール
1 2 3 4 5 6 7 8 9 10 11 |
# PHPをインストール sudo amazon-linux-extras install php7.2 -y #yumアップデート sudo yum update -y #Apacheインストール sudo yum install -y httpd #Apache起動 sudo systemctl start httpd #Apacheを自動起動する設定 sudo chkconfig httpd on |
12, ブラウザから固定IPでapacheのテストページが表示されれば、aws-cliでネットワーク&Webサーバの構築は完了!
やってみた感想としては、GUIよりもCUIでステップ・バイ・ステップで構築した方が理解が深まる。ブラウザのコンソール画面から結果も確認できるし。