1. alt

    リンク修正

    alt
Changes in body
Source | HTML | Preview
@@ -1,146 +1,146 @@
ある日のこと。
現在稼動しているEC2インスタンスと同じものを作ってね。という依頼がきました。
「GUIは中学生まで・・」※
という言葉を胸にとりあえず、CLIでチャレンジしてみました。
※正しくは・・・「本番環境で変更を伴う作業をマネジメントコンソールでやって良いのは中学生かAWS経験半年まで」です!
![bohebohe_ec2.jpg](https://qiita-image-store.s3.amazonaws.com/0/32215/7eb91fbd-be6c-7c29-6883-c5ff778bb459.jpeg)
# EC2のコマンドライン操作
こちらのリファレンスを片手にやるとよいです。最新の使えるコマンドが列挙されています。
http://docs.aws.amazon.com/cli/latest/reference/ec2/index.html#cli-aws-ec2
コマンドは、いきなりやるとコワイので、ドライランをつけてやりましょう。
```bash
--dry-run
```
# おなじものをつくるよSTEP
やり方は複数あると思いますが、今回はコピー元のEC2インスタンスのAMIを取得して、それを元にインスタンスを作成します。
## AMIイメージを作成する
まず、コピーしたいEC2インスタンスのAMIイメージを作成します。
このときに、マシンはとめておきましょう。メモリ上にデータが残っていたりします。
-http://docs.aws.amazo.com/cli/latest/reference/ec2/create-image.html
+http://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html
```bash
aws ec2 create-image --instance-id i-XXXXXX --no-reboot --name test_20160106100726
```
この時、うーん自分のコピーしたいAMIインスタンスのインスタンスIDはなんだろうっていうのを調べる時は、以下のコマンドを使います。
- リージョン内で稼働している全インスタンスの情報を取得する場合
```bash
$ aws ec2 describe-instances
```
- また、インスタンスIDがわかって、そのインスタンスの情報を知りたい場合は、以下のコマンドで情報を取得していきます。
```bash
$ aws ec2 describe-instances --instance-ids ${instance-id}
```
参考URL: http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html
## さて実行
dry-runをつけていると、いろんなエラーにあたりつつ、前進していけます。
- エラーその1:セキュリティグループとサブネットがあっていないようです。
```bash
% aws ec2 run-instances --dry-run --image-id test_20160106100726 --key-name demo --count 1 --security-group-ids sg-XXXX --instance-type t1.micro
A client error (InvalidParameter) occurred when calling the RunInstances operation: Security group sg-XXXX and subnet subnet-XXXX belong to different networks.
```
- エラーその2:指定するAMIの名前がちがうようです
```bash
% aws ec2 run-instances --dry-run --image-id test_20160106100726 --key-name demo --count 1 --security-group-ids sg-XXXX --subnet-id subnet-XXXX --instance-type t1.micro
A client error (InvalidAMIID.Malformed) occurred when calling the RunInstances operation: Invalid id: "test_20160106100726" (expecting "ami-...")
```
- エラーその3:どうやら、このインスタンスタイプ( --instance-type t1.micro)の実行はGUIからのみのようです。
```bash
% aws ec2 run-instances --dry-run --image-id ami-XXXX --key-name demo --count 1 --security-group-ids sg-XXXX --subnet-id subnet-XXXX --instance-type t1.micro
A client error (InvalidParameterCombination) occurred when calling the RunInstances operation: Non-Windows instances with a virtualization type of 'hvm' are currently not supported for this instance type.
```
- お、うまく通ったようです。
```bash
% aws ec2 run-instances --dry-run --image-id ami-XXXX --key-name demo --count 1 --security-group-ids sg-XXXX --subnet-id subnet-XXXX --instance-type t2.micro
A client error (DryRunOperation) occurred when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.
```
- では、dry-runを外して実行してみましょう。
```bash
% aws ec2 run-instances --image-id ami-XXXX --key-name demo --count 1 --security-group-ids sg-XXXX --subnet-id subnet-XXXX --instance-type t2.micro
813931856455 r-cf4d9167
INSTANCES 0 x86_64 False xen ami-XXXX i-df1e7d5e t2.micro demo 2016-01-06T01:34:05.000Z ip-10-0-0-57.ec2.internal 10.0.0.57 /dev/xvda ebs True subnet-XXXX hvm vpc-XXXX
MONITORING disabled
NETWORKINTERFACES 12:1d:84:4d:fe:83 eni-XXXX 813931856455 ip-10-0-0-57.ec2.internal 10.0.0.XX True in-use subnet-XXXX vpc-XXXX
ATTACHMENT 2016-01-06T01:34:05.000Z eni-attach-XXXX True 0 attaching
GROUPS sg-XXXX berio-api-security-group
PRIVATEIPADDRESSES True ip-10-0-0-XX.ec2.internal 10.0.0.XX
PLACEMENT us-east-1b default
SECURITYGROUPS sg-XXXX XXXX-security-group
STATE 0 pending
STATEREASON pending pending
OK ~/.aws
```
## インスタンスの情報設定
- できあがったインスタンスの情報を取得してみましょう
```bash
aws ec2 describe-instances --instance-id i-XXXX --output json
```
- タグの名前をつけてみましょう
```bash
aws ec2 create-tags --resources i-XXXX --tags '[{"Key": "Name", "Value": "Test"}]'
```
- 固定IPを付与してみましょう
```bash
aws ec2 associate-address --allocation-id eipalloc-XXX --network-interface-id eni-XXXXX
```
# 最後に
dry-runをつけながら、すこしずつコマンドを実行してデバッグしながら、前進しましょう。
最初はうまくいかないけど、やっていくうちにアタリをつける能力がすこしづつあがります。
Let's enjoy your AWS-CLI Life!