标签归档:AWSCLI

S3文件的时区和时间

好多人问S3上文件的时区和时间这类问题,今天总结下:

简单说就是不同工具不同客户端看到的时间是不同的:
例如s3cmd 显示的就是UTC时间,而awscli 显示的就是根据客户端时区换算之后的时间,CloudBerry客户端也显示的是换算之后的时间。

(1)bucket的时间是bucket的创建时间,object时间是它被上传的时间(cloudberry显示成‘修改时间’);s3cmd上传后,再用s3cmd查看,显示的是上传时间对应的UTC时间,但用awscli查看,就能以本地时间显示。所以上传是的时间就是上传那个时刻的时间,不过不同客户端会以不同时区显示而已。
(2)object被下载之后,就出现问题了。s3cmd get下来的文件的时间会显示用s3cmd ls看到的时间,也就是UTC时间;而aws s3 cp下来的时间,也是使用aws s3 ls看到的时间,即本地时间。这样使用两种客户端下载通一个文件,查看下载后的文件的时间将会有两种不同结果(awscli的更准确些,s3cmd下载保存文件是时间没换算)。
(3)使用s3cmd上传大文件时,会被切割成15MB每个分片上传再组装,使用s3cmd获取到的md5sum并不是文件的真实MD5值,这点需要注意,下载大文件的时候会显示md5sum does not match,使用awscli时无此问题。

关于什么时候用哪种工具的问题:
(1)s3cmd上传和下载速度都比较适中,并未充分占满实例的带宽,因此比较适合做小文件或者较高频率的文件上传下载和sync。但是它上传几个GB的单个文件时,可靠性就差一下,有时会失败报错。
(2)awscli工具上传大文件的时候能充分利用网络性能,基本能跑满实例的带宽,上传下载速度特别快,适合在非线上服或者非高峰时间上传单个大文件,优点是速度非常快,缺点是会耗尽实例带宽,还没找到限速方法。
(3)在用到sync功能时,由于s3cmd的MD5问题,同步包含大文件时有时会有报错,建议包含大文件使用aws s3 sync;只有小文件时s3cmd sync或者aws s3 sync都行。

常用AWS命令行汇总(awscli)

创建一个Key,查看内容并生成pem文件。

aws ec2 create-key-pair --key-name MyCypayTestCalifornia --query 'KeyMaterial' \
 --output text > MyTestCalifornia.pem

创建一个VPC安全组

aws ec2 create-security-group --group-name MyCATest --description MyCATest \
--vpc-id vpc-efxxxx8a

列举当前安全组名称和ID

aws ec2 describe-security-groups  --query SecurityGroups[*].[GroupName,GroupId,VpcId]

添加安全组规则

aws ec2 authorize-security-group-ingress --group-id sg-d1xxxxb4 --protocol tcp \
--port 22 --cidr 202.x.x.120/29  --protocol tcp --port 8080-8082 --cidr 10.10.0.0/16 \
--protocol tcp --port 80 --cidr 0.0.0.0/0

查看当前安全组规则

aws ec2 describe-security-groups --group-ids  sg-d1xxxxb4

创建实例

aws ec2 run-instances --image-id ami-7axxxx3f --count 1 --instance-type t1.micro \
--key-name MyTestCalifornia --security-group-ids sg-dxxxxbb4 \
--placement AvailabilityZone=us-west-1c --subnet-id subnet-5exxxx3b \
--block-device-mappings "[{\"DeviceName\": \"/dev/sdf\",\"Ebs\":{\"VolumeSize\":100}}]"\
--user-data  "/sbin/mkfs.ext4 /dev/xvdf && /bin/mount /dev/xvdf /home"

##注释
--image-id 指定AMI ID
--key-name 可选,登录服务器用
--placement AvailabilityZone=us-west-1c  选择AZ,此项可选,有默认值
--block-device-mappings "[{\"DeviceName\": \"/dev/sdf\",\"Ebs\":{\"VolumeSize\":100}}]"
再额外加100G的EBS磁盘,记得在powershell或者在CMD下双引号需要转义
如果size大于快照大小,需要开机后用resize2fs命令在线动态扩展文件系统
size小于快照中的大小则不生效,按照快照中的磁盘大小创建
--user-data  "/sbin/mkfs.ext4 /dev/xvdf && /bin/mount /dev/xvdf /home"  
指定开机初始化脚本,可用file://xxxx.sh 来指定网络或者本地文件

给实例打标签

aws ec2 create-tags --resources i-3xxxxb6d --tags Key=Name,Value=APITest \
 Key=PROJECT,Value=cypay

创建个EIP

aws ec2 allocate-address --domain vpc
{
   "PublicIp": "54.x.x.12",
   "Domain": "vpc",
   "AllocationId": "eipalloc-axxxxxcd"
}

将VPC中的EIP与VPC中的实例关联

aws ec2 associate-address --instance-id i-3xxxxx6d --allocation-id eipalloc-afxxxx8cd

此时可以ssh链接自己的实例

ssh -i MyTestCalifornia.pem  ec2-user@54.x.x.12

列举出所有用户和他的AccessKey ID

aws iam list-users --query 'Users[*].[UserName,CreateDate,UserId]' --output table

列举出当前实例的相关信息

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, \
 Placement.AvailabilityZone, State.Name,  InstanceType, PublicIpAddress, \
PrivateIpAddress, Tags[0].Value, Tags[1].Value]' --output text