手順
順に実行していくコマンドは以下の通り
- AWS CLIの準備
- AWS ACCESS KEY IDとAWS SECRET ACCESS KEYの取得
- キーペアの作成
- セキュリティグループの作成
- EC2の起動
- EIPの取得と紐付け
- ssh接続
1. AWS CLIの準備
pipでインストールする。
$ pip3 install awscli --upgrade —-user
公式の説明によるとOSで使用するライブラリの変更を避けるために、--userオプションをつけ、
ユーザーディレクトリのサブディレクトリにプログラムをインストールすることを推奨しているらしい。
注意点として、上記サブディレクトリにパスが通っているか要確認。(該当するならpipのエラー文に詳細有)
おそらく以下のようなパスを通せば良い。
/Users/username/.local/bin/aws
(おまけ)
AWS CLIのコマンド補完を有効化するには、以下のコマンドをbashrcに追記すればよい。
$ complete -C aws_completer aws
2. AWS ACCESS KEY IDとAWS SECRET ACCESS KEYの取得
AWS CLIを通してAWSの様々なサービスを利用するには上記アクセスキーIDとシークレットアクセスキーが必要になる。
マネジメントコンソールの「マイセキュリティ資格情報」からcsvファイルをダウンロードして
以下のコマンドを実行して設定する。
$ aws configure
3. キーペアの作成
各EC2インスタンスに対応するキーペアを作成する(これがないとインスタンスに接続できない)。
$ aws ec2 create-key-pair --key-name my-keypair-from-cli
4. セキュリティグループの作成
以下のコマンドでまずセキュリティグループを作成する。
$ aws ec2 create-security-group --group-name my-security-group-from-cli --description my-security-group-from-cli
作成したセキュリティグループにはまだルールが追加されておらず、デフォルトの設定が適応される。
デフォルトでは、インバウンドのポートは全て閉じられていて、必要なものだけを開ける必要がある。
一方、アウトバウンドの通信はポートが全て開いているため設定する必要がないことの方が多いだろう。
任意のルールを追記する場合は以下のコマンドを実行する。
$ aws ec2 authorize-security-group-ingress --group-id sg-xxx --protocol tcp --port 22 --cidr 0.0.0.0/0
group-idオプションにはcreate-security-group
コマンドで出力されたIDを埋める。
その他のオプションには、設定したい内容を記入していくとよい。
5. EC2の起動
最後にEC2を以下のコマンドで起動する。
オプションのAMI IDやサブネットIDはマネジメントコンソールからEC2インスタンスを作成する時のステップで確認すればよい。
$ aws ec2 run-instances --image-id ami-xxx --instance-type t2.micro --security-group-ids sg-xxx --key-name my-keypair-from-cli --subnet-id subnet-xxx
また、インスタンス名を付与したい場合は、以下のコマンドで実行できる。
resourcesオプションは、run-instances
コマンドのInstanceIDを指定する。
$ aws ec2 create-tags --resources i-xxx --tags Key=Name,Value=my-instance
6. EIPの取得と紐付け
上記で作成したインスタンスにはパブリックIPがなく、インスタンスの起動・停止に応じて動的にIPが変更される。
WebサービスなどでIPを固定したい場合はEIPを作成し紐づける必要がある。
$ aws ec2 allocate-address
こちらのコマンドでAWSが固定可能なIPアドレスを返してくれるので、
それを作成したインスタンスに紐づける。
allocation-idオプションはallocate-address
コマンドで出力されるAllocationIdを指定する。
$ aws ec2 associate-address --allocation-id eipalloc-xxx --instance-id i-xxx
7. ssh接続
xx.xx.xx.xxには取得したEIPを指定する。
$ ssh -i my-keypair-from-cli.pem ec2-user@xx.xx.xx.xx
また、my-keypair-from-cli.pemの指定には以下の注意点がある。
- Permissionはユーザーのみの権限にする。
すなわち、chmod 400(or 600) my-keypair-from-cli.pem
- もし.pemファイルの形式がおかしい場合、リンク先を参考に書き換える。
当方が直面したのは、改行コード\nがテキスト扱いされていたため、改行するよう置換する必要があった。
vimで:%s/\\n/^M/gc
で解決した。(^MはCtrl+v Ctrl+m
で入力する)
※EC2インスタンスのAMIがubuntuの場合、ユーザー名ec2-userは使えず、ubuntuに変える必要がある。参考
おまけ
EC2インスタンスの起動
$ aws ec2 start-instances --instance-ids i-xxx
EC2インスタンスの再起動
$ aws ec2 reboot-instances --instance-ids i-xxx
EC2インスタンスの停止
$ aws ec2 stop-instances --instance-ids i-xxx
EC2インスタンスの削除
$ aws ec2 terminate-instances --instance-ids i-xxx