前言
aliyun cli指令还不是太完善,并不是完全支持所有的阿里云产品,对标的是awscli
因此,建议时刻关注 https://github.com/aliyun/aliyun-cli/releases 产品变化页面。
安装
wget 'https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz'
tar xf aliyun-cli-linux-latest-amd64.tgz
💁近期的重要变化
3.0.40 - 3.0.42版本加入配置变量
ALIBABACLOUD_ACCESS_KEY_ID
, ALICLOUD_ACCESS_KEY_ID
ALIBABACLOUD_ACCESS_KEY_SECRET
, ALICLOUD_ACCESS_KEY_SECRET
ALIBABACLOUD_REGION_ID
, ALICLOUD_REGION_ID
单用户授权配置
# 查看当前配置
aliyun configure list
Profile | Credential | Valid | Region | Language
--------- | ------------------ | ------- | ---------------- | --------
default | AK:*** | Invalid | | en
ecsRamRoleProfile * | EcsRamRole:gitlab | Valid | cn-zhangjiakou | en
# 切换配置
aliyun configure set --profile <profile_name>
# 添加配置,例如 ecsramrole 模式
# https://help.aliyun.com/document_detail/121193.html?spm=a2c4g.11186623.3.4.35af3ae51h8w8M
aliyun configure set \
--profile ecsRamRoleProfile \
--mode EcsRamRole \
--ram-role-name RoleName \
--region cn-hangzhou
全局用户授权配置(role模式)
cat << 'EOF'| sudo tee /etc/profile.d/ecs_role.sh
Region=`curl -sq http://100.100.100.200/latest/meta-data/region-id`
ramRoleName=`curl -sq http://100.100.100.200/latest/meta-data/ram/security-credentials/`
aliyun configure set --profile ecsRamRoleProfile --mode EcsRamRole --ram-role-name ${ramRoleName} --region ${Region}
EOF
✨通过访问curl -sq 'http://100.100.100.200/latest/meta-data/ram/security-credentials/<ram_role_name>'
可以获取到临时token。临时授权信息如下:
{
"AccessKeyId" : "STS.abcde",
"AccessKeySecret" : "abcde12345",
"Expiration" : "2022-03-28T08:50:26Z",
"SecurityToken" : "abcde1234567890",
"LastUpdated" : "2022-03-28T02:50:26Z",
"Code" : "Success"
}
在实际使用用,发现在ECS里请求上述地址会出现超时问题。。。所以建议实际使用中,本地缓存临时授权并判断授权过期时间。
kubernetes中配置EcsRamRole
annotations:
k8s.aliyun.com/eci-ram-role-name: role_name
alpine Docker中调用aliyun命令
apk add --no-cache libc6-compat musl
基本使用
以 oss 为例:
# 导入角色
source /etc/profile.d/ecs_role.sh
## 设定 oss 的 endpoint 地址
EndpointLan="http://oss-${Region}-internal.aliyuncs.com"
EndpointWan="http://oss-${Region}.aliyuncs.com"
##查询
## 默认查询是递归查询,-d 只查询一层
aliyun oss ls oss://test/ -d -e ${EndpointLan}
##基本的上传或下载
##上传文件 a.file 到 oss://test/
aliyun oss cp a.file oss://test/ -e ${EndpointLan}
##基本的递归上传
##上传目录 abc 下的文件到 oss://test/ 下,如果有重复内容,则需要加入 --force
aliyun oss cp abc oss://test/ --recursive -e ${EndpointLan}
##复杂的递归上传
##上传目录 abc 下的 .lzo 结尾的文件到 oss://test/ 下.
##严禁在源目录里执行 --recursive 参数.
##即禁止执行 aliyun oss cp . oss://test/ --recursive
aliyun oss cp abc/ oss://test/ --include='*.lzo' --update --recursive -e ${EndpointLan} --checkpoint-dir=/tmp/ossutil_checkpoint --output-dir=/tmp/ossutil_output
##同步目录 sync 指令变更
##同步目录 abc 下的文件到 oss://test/ 下,如有重复,则忽略;同时删除目标目录下本地没有的文件
aliyun oss sync abc/ oss://test/ --update --delete --force -e ${EndpointLan} --checkpoint-dir=/tmp/ossutil_checkpoint --output-dir=/tmp/ossutil_output