AWS CLI基本操作与配置

1, 什么是AWS CLI?

AWS Command Line Interface (AWS CLI) 是一种开源工具,让您能够在命令行 Shell 中使用命令与 AWS 服务进行交互。

2, 安装AWS CLI工具

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

3, 配置AWS CLI工具
3.1 首先打开aws控制台-->安全性、身份与合规性-->IAM-->创建我们需要的编程用户user.
3.2 点击用户-->user-->安全证书-->创建访问密钥-->下载csv文件
3.3 留意下aws_access_key_id和aws_secret_access_key的值,后面配置要用到
4, 初始化AWS CLI工具

$ 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命令实现自动补全功能

5, 配置多个区域
账号密钥配置,可配置多个账号

[[email protected] .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>

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

[default]
region = ap-northeast-2
output = json

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

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

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

[[email protected] .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="

[[email protected] .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"
        }
    ]
}

6, AWS CLI常用操作命令
aws官方镜像product-code参考信息: https://wiki.centos.org/Cloud/AWS
查询官方image-id信息

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

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

aws ec2 describe-instances

查看单个实例的信息

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

查看单个实例的状态

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

启动一个已存在的实例

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

停止一个正在运行的实例

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

终止一个实例

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

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

[
    {
        "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}]"

为实例命名

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

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

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

为卷命名

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

查看卷信息

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

从实例上分离卷

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

删除指定的卷

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

将卷附件到指定的实例上

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

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

aws ec2 allocate-address

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

aws ec2 describe-addresses --public-ips 1.1.1.1

绑定弹性ip地址到主机

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

为弹性ip命名

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

释放一个弹性ip地址

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

创建VPC

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

创建internet网关

aws ec2 create-internet-gateway

将internet网关附加到vpc上

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

查看路由表

aws ec2 describe-route-tables

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

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

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

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

创建安全组

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

查看安全组的访问规则

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

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

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

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

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

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

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

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

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

ec2查询命令
查看所有区域

aws ec2 describe-region

查看当前账号VPC

aws ec2 describe-vpcs

查看当前账号下的密钥对

aws ec2 describe-key-pairs

创建密钥对

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

查看可用区域

aws ec2 describe-availability-zones

'--query'的用法
查询数据第一个内容

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

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

[[email protected] ~]# 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"
        }
    ]
}

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

[[email protected] ~]# aws ec2 describe-availability-zones --query 'AvailabilityZones[0]'
{
    "State": "available",
    "Messages": [],
    "RegionName": "ap-northeast-2",
    "ZoneName": "ap-northeast-2a",
    "ZoneId": "apne2-az1"
}

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

[[email protected] ~]# 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键的值

[[email protected] ~]# aws ec2 describe-availability-zones --query 'AvailabilityZones[0].State'
"available"

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

[[email protected] ~]# aws ec2 describe-availability-zones --query 'AvailabilityZones[0].[State,RegionName]'
[
    "available",
    "ap-northeast-2"
]

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

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

查看ec2实例的IP和instance-id

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