note: 这种使用 docker 的方式,就是启动运行比较慢 - 所以,尽量改为用 terraform 的方式执行了。
阿里云通过命令 aliyun
执行云端资源管理。
aliyun 命令通过 aliyun configure set [--profile <profileName>] --access-key-id ..
设置访问认证信息。
可以切换不同的设置 aliyun configure get --profile akProfile
可以通过 aliyun configure list
查看不同的 profile
这种方式容易造成混乱。
使用 docker 方式,认证信息直接在项目中设置。
这也是阿里云官方推荐的最佳实践。
Dockerfile:
FROM alpine:latest
# 添加 jq,以 JSON 的格式输出
RUN apk add --no-cache jq
# 获取并安装阿里云 CLI 工具
RUN wget https://aliyuncli.alicdn.com/aliyun-cli-linux-3.0.124-amd64.tgz
RUN tar -xvzf aliyun-cli-linux-3.0.124-amd64.tgz
RUN rm aliyun-cli-linux-3.0.124-amd64.tgz
RUN mv aliyun /usr/local/bin/
# 注意:alpine需要额外创建 lib64 的动态链接库软连接
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
使用:
# 构建镜像
docker build -t aliyun .
# 获取命令的帮助提示
docker run -it --rm aliyun aliyun --help
Alibaba Cloud Command Line Interface Version 3.0.124
Usage:
aliyun <product> <operation> [--parameter1 value1 --parameter2 value2 ...]
Flags:
--mode use `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` to assign authenticate mode
--profile,-p use `--profile <profileName>` to select profile
...
privatelink Private Link
adcp Alibaba Cloud Distributed Cloud Container Platform
Use `aliyun --help` for more information.
通过 docker compose 简化配置,docker-compose.yaml:
version: '3'
services:
aliyun:
image: aliyun
command: ["aliyun","--help"]
volumes:
- ./config:/root/.aliyun
运行:
# 等同于 aliyun --help
docker compose run aliyun
# 交互式的设置 api key 等参数
docker compose run --rm aliyun aliyun configure --mode AK
Configuring profile 'default' in 'AK' authenticate mode...
...
# 设置域名解析记录
docker compose run --rm aliyun \
aliyun alidns AddDomainRecord \
--DomainName 'YOUR-DOMAIN.com' \
--RR test \
--Type a \
--Value '1.2.3.4'
# 删除域名解析记录
docker compose run --rm aliyun \
aliyun alidns DeleteSubDomainRecords \
--DomainName 'YOUR-DOMAIN.com' \
--RR test
# 查看是否有解析记录
docker compose run --rm aliyun \
aliyun alidns DescribeSubDomainRecords \
--SubDomain test.YOUR-DOMAIN.com
在脚本中使用:
#!/bin/bash
# 检查是否有解析记录,如果有就删除
docker_compose_file='./aliyun-cli/docker-compose.yaml'
domain="YOUR-DOMAIN.com"
sub_domain="test"
check_command="docker compose -f $docker_compose_file run --rm aliyun \
aliyun alidns DescribeSubDomainRecords \
--SubDomain $sub_domain.$domain"
delete_command="docker compose -f $docker_compose_file run --rm aliyun \
aliyun alidns DeleteSubDomainRecords \
--DomainName $domain \
--RR $sub_domain"
output=$(eval "$check_command 2>&1")
# 查询是否存在解析记录
if [ $? -ne 0 ]; then
echo "查询解析记录报错: $output"
else
echo "$output"
total_count=$(echo "$output" | jq -r '.TotalCount')
# 删除解析记录
if [ ! -z "$total_count" ] && [ "$total_count" -gt 0 ]; then
output=$(eval "$delete_command 2>&1")
if [ $? -ne 0 ]; then
echo "删除子域名解析记录报错: $output"
else
echo "$output"
echo "删除了解析记录"
fi
fi
fi