AWS CLI基本操作与配置


0,安装AWS CLI工具

1
2
3
pip(3) install awscli  //*安装awscli
pip(3) install -U awscli //*升级awscli
pip(3) uninstall awscli//*卸载awscli

1,配置AWS CLI工具

  • 首先打开aws控制台–>安全性、身份与合规性–>IAM–>创建我们需要的编程用户user.
  • 点击用户–>user–>安全证书–>创建访问密钥–>下载csv文件
  • 留意下aws_access_key_id和aws_secret_access_key的值,后面配置要用到

2,初始化AWS CLI工具

1
2
3
4
5
6
$ aws configure
AWS Access Key ID [None]: <aws_access_key_id_value>
AWS Secret Access Key [None]: <aws_secret_access_key_value>
Default region name [None]: us-east-2 //*你的实例-->可用区,不要数字后面的字母
Default output format [None]: json //*执行输出结果为json格式
complete -C aws_completer aws //*让aws命令实现自动补全功能

3,配置多个区域

账号密钥配置,可配置多个账号

1
2
3
4
5
6
7
8
9
10
11
12
[root@stark .aws]# cat ~/.aws/credentials 
[default]
aws_access_key_id = <aws_access_key_id_value>
aws_secret_access_key = <aws_secret_access_key_value>

[singapore]
aws_access_key_id = <aws_access_key_id_value>
aws_secret_access_key = <aws_secret_access_key_value>

[tokyo]
aws_access_key_id = <aws_access_key_id_value>
aws_secret_access_key = <aws_secret_access_key_value>

区域和输出格式配置,要和上面账号对应好区域

1
2
3
4
5
6
7
8
9
10
11
[default]
region = ap-northeast-2
output = json

[profile singapore]
region = ap-southeast-1
output = json

[profile tokyo]
region = ap-southeast-1
output = json

验证是否正常使用,出现下列信息说明配置正确

1
2
3
4
5
6
7
8
9
10
11
12
[root@stark .aws]# aws iam list-users
{
"Users": [
{
"Path": "/",
"UserName": "user",
"UserId": "<aws_access_key_id_value>",
"Arn": "arn:aws:iam::1234567890:user/user",
"CreateDate": "2018-08-28T08:28:36Z"
}
]
}

指定其他区域使用”–profile=”

1
2
3
4
5
6
7
8
9
10
11
12
[root@stark .aws]# aws iam list-users --profile=tokyo
{
"Users": [
{
"Path": "/",
"UserName": "user",
"UserId": "<aws_access_key_id_value>",
"Arn": "arn:aws:iam::1234567890:user/user",
"CreateDate": "2018-08-28T08:28:36Z"
}
]
}

4,AWS CLI常用操作命令

aws官方镜像product-code参考信息: [https://wiki.centos.org/Cloud/AWS][1]
查询官方image-id信息

1
aws ec2 describe-images --owners aws-marketplace --filters Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce --output json

ec2实例相关命令
查看该区域所有实例的信息

1
aws ec2 describe-instances

查看单个实例的信息

1
aws ec2 describe-instances --instance-ids "instance-ID"

查看单个实例的状态

1
aws ec2 describe-instance-status --instance-ids 'instance-ID'

启动一个已存在的实例

1
aws ec2 start-instances --instance-ids "instance-ID"

停止一个正在运行的实例

1
aws ec2 stop-intances --instance-ids "instance-ID"

终止一个实例

1
aws ec2 terminate-instances --instance-ids "instance-ID"

创建一个新实例,其中的file://mapping.json是文件路径,mapping.json内容如下

1
2
3
4
5
6
7
8
9
10
11
[
{
"DeviceName": "/dev/sda1",
"Ebs": {
"DeleteOnTermination": true,
"VolumeSize": 30,
"VolumeType": "gp2"
}
}
]
aws ec2 run-instances --image-id [镜像ID] --security-group-ids [安全组ID] --key-name [密钥对名字] --block-device-mappings file://mapping.json --instance-type c5.large --count 1 --associate-public-ip-address --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=test1}]" "ResourceType=volume,Tags=[{Key=Name,Value=test1}]"

为实例命名

1
aws ec2 create-tags --resources 'Instance-ID' --tags Key=Name,Value='Instance_name'

ec2卷相关命令
创建50G gp2卷

1
aws ec2 create-volume --size 50 --availability-zone ap-south-1b --volume-type gp2

为卷命名

1
aws ec2 create-tags --resources vol-1qa2ws3ed --tags Key=Name,Value='volume_name'

查看卷信息

1
aws ec2 describe-volumes --volume-id vol-02qawsf67dgf

从实例上分离卷

1
aws ec2 detach-volume --volume-id vol-02qawsf67dgf

删除指定的卷

1
aws ec2 delete-volume --volume-id vol-02qawsf67dgf

将卷附件到指定的实例上

1
aws ec2 attach-volume --volume-id vol-1qa2ws3ed4rf --instance-id i-1513qzwfeafdg --device /dev/sdc

ec2网络相关命令
分配一个弹性ip

1
aws ec2 allocate-address

通过弹性ip查询到对应的AllocationId

1
aws ec2 describe-addresses --public-ips 1.1.1.1

绑定弹性ip地址到主机

1
aws ec2 associate-address --public-ip '弹性ip' --instance-id 'Instance-ID'

为弹性ip命名

1
aws ec2 create-tags --resources AllocationId --tags Key=Name,Value="name"

释放一个弹性ip地址

1
aws ec2 release-address --allocation-id 'allocation-ID'

创建VPC

1
aws ec2 create-vpc --cidr-block 172.31.0.0/16

创建internet网关

1
aws ec2 create-internet-gateway

将internet网关附加到vpc上

1
aws ec2 attach-internet-gateway --internet-gateway-id '网关ID' --vpc-id 'vpc-ID'

查看路由表

1
aws ec2 describe-route-tables

将创建的子网关联到路由表

1
aws ec2 associate-route-table --route-table-id 'route-ID' --subnet-id 'subnet-ID'

在路由表中创建相关路由条目

1
aws ec2 create-route --route-table-id 'route-ID' --destination-cidr-block 0.0.0.0/0 --gateway-id 'GW-ID'

创建安全组

1
aws ec2 create-security-group --group-name [安全组名称] --description [安全组描述] [--vpc-id vpc-id] 不指定vpc为默认vpc

查看安全组的访问规则

1
aws ec2 describe-security-groups --group-ids 'security-group-id'

开放12306端口给172.31.0.0网段到安全组id为sg-xxxxxxxxxx的安全组

1
aws ec2 authorize-security-group-ingress --group-id sg-xxxxxxxxxx --protocol tcp --port 12306 --cidr 172.31.0.0/16

开放1234端口给安全组id为sg-yyyyyyyy下的所有主机

1
aws ec2 authorize-security-group-ingress --group-id sg-xxxxxxxx --protocol tcp --port 1234 --source-group sg-yyyyyyyy

撤销指定区域一个安全组内的某条入口规则的授权

1
aws ec2 --profile hk001 revoke-security-group-ingress --group-id sg-xxxxyyyypppp --cidr 0.0.0.0/0 --protocol tcp --port 22

撤销指定区域一个安全组内的某条出口规则的授权

1
aws ec2 --profile hk001 revoke-security-group-egress --group-id sg-01a26db3a449f6d2a --cidr 0.0.0.0/0 --protocol tcp --port 22

ec2查询命令
查看所有区域

1
aws ec2 describe-region

查看当前账号VPC

1
aws ec2 describe-vpcs

查看当前账号下的密钥对

1
aws ec2 describe-key-pairs

创建密钥对

1
aws ec2 create-key-pair --key-name [密钥对名称]

查看可用区域

1
aws ec2 describe-availability-zones

‘–query’的用法
查询数据第一个内容

1
aws ec2 describe-addresses --query *[0]

以下列内容为例,演示’–query’的使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@stark ~]# aws ec2 describe-availability-zones 
{
"AvailabilityZones": [
{
"State": "available",
"Messages": [],
"RegionName": "ap-northeast-2",
"ZoneName": "ap-northeast-2a",
"ZoneId": "apne2-az1"
},
{
"State": "available",
"Messages": [],
"RegionName": "ap-northeast-2",
"ZoneName": "ap-northeast-2b",
"ZoneId": "apne2-az2"
},
{
"State": "available",
"Messages": [],
"RegionName": "ap-northeast-2",
"ZoneName": "ap-northeast-2c",
"ZoneId": "apne2-az3"
}
]
}

查看可用区域的第一个区域

1
2
3
4
5
6
7
8
[root@stark ~]# aws ec2 describe-availability-zones --query 'AvailabilityZones[0]'
{
"State": "available",
"Messages": [],
"RegionName": "ap-northeast-2",
"ZoneName": "ap-northeast-2a",
"ZoneId": "apne2-az1"
}

查看可用区域的第一,第二个区域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@stark ~]# aws ec2 describe-availability-zones --query 'AvailabilityZones[:2]'
[
{
"State": "available",
"Messages": [],
"RegionName": "ap-northeast-2",
"ZoneName": "ap-northeast-2a",
"ZoneId": "apne2-az1"
},
{
"State": "available",
"Messages": [],
"RegionName": "ap-northeast-2",
"ZoneName": "ap-northeast-2b",
"ZoneId": "apne2-az2"
}
]

获取第一个可用区域State键的值

1
2
[root@stark ~]# aws ec2 describe-availability-zones --query 'AvailabilityZones[0].State'
"available"

获取第一个可用区域State和RegionName键的值

1
2
3
4
5
[root@stark ~]# aws ec2 describe-availability-zones --query 'AvailabilityZones[0].[State,RegionName]'
[
"available",
"ap-northeast-2"
]

使用格式化显示查询出来的值

1
2
[root@stark ~]# aws ec2 describe-availability-zones --query 'AvailabilityZones[0].[State,RegionName,ZoneId]' --output text
available ap-northeast-2 apne2-az1

查看ec2实例的IP和instance-id

1
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[PublicIpAddress, PrivateIpAddress,InstanceId]' --output text