aws cli 命令用法

环境信息

  • aws-cli/2.9.15

aws cli 安装更新说明

aws cli 基础配置及说明

常见用法

查看 aws 帮助信息

aws help

查看子命令帮助信息

aws ec2 help

配置认证信息时指定鉴权信息对应的 Profile

aws configure --profile source-account

aws 命令常用选项

选项 说明 示例
--region 指定区域,aws 区域列表 aws --region ap-east-1 ec2 describe-instances
--profile 指定配置文件名称。当需要同时操作多个账号上面的 S3 目标时,可以为每个账号指定 profile 名称,在后续操作时使用选项 --profile 指定要使用的 Profile

EC2

获取实例信息

此操作至少需要以下权限:

  • EC2.DescribeInstances
aws --region ap-east-1 ec2 describe-instances

筛选输出,只获取 instance-id,使用 --query 选项可能造成部分机器无法被包含在输出中,导致统计机器缺失,最好使用 aws --region ap-east-1 ec2 describe-instances 获取指定区域的所有机器后手动进行筛选。

aws ec2 describe-instances --region ap-east-1 --query Reservations[*].Instances[*].InstanceId --output text

通过选项 --query 可以对输出进行筛选,只输出指定内容。[2]

$ aws ec2 describe-instances --region ap-east-1 \
--query Reservations[*].Instances[*].[InstanceId,InstanceType,KeyName,PublicIpAddress] --output text
i-0904c5ba08 c5.large t1 16.162.77.1
i-09f7765e86 c5.large t2 16.162.181.4
i-0bc892a5b0 c5.xlarge t3 16.162.229.5

通过选项 --query 获取实例 Name

$ aws ec2 describe-instances --region ap-east-1 \
--query Reservations[*].Instances[*].[InstanceId,Tags[*],PublicIpAddress,BlockDeviceMappings[*].Ebs.VolumeId][0] --output json

[
[
"i-0904c5ba087f0b07c",
[
{
"Key": "name",
"Value": "t1"
},
{
"Key": "Name",
"Value": "test1"
}
],
"16.162.77.243",
[
"vol-05940c72f51db924c"
]
],
[
"i-09f7765e863bbc0f0",
[
{
"Key": "Name",
"Value": "t2"
},
{
"Key": "luodiye1",
"Value": "test2"
}
],
"16.162.181.48",
[
"vol-09ac77986ac07cbfb"
]
],
]

获取 EC2 实例的存储 (Volume) 信息

此操作至少需要以下权限:

  • EC2.DescribeInstances
  • EC2.DescribeVolumes

根据已知的 volume-id,查询卷的详细信息,比如磁盘类型和大小

$ aws ec2 describe-volumes --region ap-east-1 \
--volume-ids vol-03f727ba5534b23f1 \
--query Volumes[*].[VolumeType,Size] --output text
gp2 500

cloudwatch

获取指定实例的网卡流出流量

此操作至少需要以下权限:

  • Cloudwatch.CloudWatchReadOnlyAccess
  • EC2.DescribeInstances

通过 cloudwatch 获取 ec2 实例的监控数据 [1]

$ aws cloudwatch get-metric-statistics 
--metric-name NetworkOut \
--start-time "2023-01-01T00:00:00.000Z" \
--end-time "2023-01-10T00:00:00.000Z" \
--period 86400 \
--namespace AWS/EC2 \
--statistics Sum \
--dimensions Name=InstanceId,Value=i-0904c5ba087f0b07c \
--region ap-east-1 --output text
NetworkOut
DATAPOINTS 4437779515.0 2023-01-05T00:00:00+00:00 Bytes
DATAPOINTS 4289284683.0 2023-01-08T00:00:00+00:00 Bytes
DATAPOINTS 4771646359.0 2023-01-01T00:00:00+00:00 Bytes
DATAPOINTS 4634477427.0 2023-01-04T00:00:00+00:00 Bytes
DATAPOINTS 4794193904.0 2023-01-07T00:00:00+00:00 Bytes
DATAPOINTS 4403050407.0 2023-01-03T00:00:00+00:00 Bytes
DATAPOINTS 4802329953.0 2023-01-06T00:00:00+00:00 Bytes
DATAPOINTS 4527451078.0 2023-01-09T00:00:00+00:00 Bytes
DATAPOINTS 4179191429.0 2023-01-02T00:00:00+00:00 Bytes

获取 cloudFront (CDN) 域名的流量信息

此操作至少需要以下权限:

  • Cloudwatch.CloudWatchReadOnlyAccess
  • CloudFrontReadOnlyAccess

通过以下命令列出所有的 distributions

aws cloudfront list-distributions

通过以下命令可查询指定的 CloudFront 中的 distribution 的流量统计信息,区域必须使用美国东部(弗吉尼亚北部)区域 (us-east-1),--dimensions Name=DistributionId,Value=E5MHZ8YUS8CUR Name=Region,Value=Global 中同时需要指定 CloudFront 的 Region 为 Global [3]

$ aws cloudwatch get-metric-statistics --region us-east-1 --metric-name BytesDownloaded \
--start-time 2023-01-01T00:00:00.000Z --end-time 2023-01-31T23:59:59.000Z --period 86400 \
--namespace AWS/CloudFront --statistics Sum \
--dimensions Name=DistributionId,Value=E5MHZ8YUS8CUR Name=Region,Value=Global \
--output json
{
"Label": "BytesDownloaded",
"Datapoints": []
}

s3

查看 s3 命令用法

$ aws s3 help

不同区域的桶之间同步数据

$ aws s3 sync --source-region ap-southeast-1 --region us-west-1 s3://my-bucket1 s3://my-bucket

常见错误

[Errno 2] No such file or directory: ‘less’

使用命令报错:

$ aws --region ap-east-1 ec2 describe-instances

Unable to redirect output to pager. Received the following error when opening pager:
[Errno 2] No such file or directory: 'less'

Learn more about configuring the output pager by running "aws help config-vars".

错误原因:

系统未安装 less 命令,安装 less 命令 (yum install -y less) 后正常。

An error occurred (InvalidClientTokenId) when calling the GetMetricStatistics operation: The security token included in the request is invalid.

使用命令报错

$ aws cloudwatch get-metric-statistics --metric-name Requests --start-time '2022-12-01T00:00:00.000Z' --end-time '2022-12-31T23:59:59.000Z' --period 2678400 \
--namespace AWS/CloudFront --statistics Sum --dimensions Name=DistributionId,Value=E15 --output json

An error occurred (InvalidClientTokenId) when calling the GetMetricStatistics operation: The security token included in the request is invalid.

错误原因

通过 CloudWatch 调用 CloudFront 的统计数据时,区域必须指定为 美国东部(弗吉尼亚北部)区域 (us-east-1),使用选项 --region us-east-1

脚注