Skip to content

Instantly share code, notes, and snippets.

@MarshalW
Last active November 27, 2023 14:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MarshalW/96ff7654358b9beb82e02cfe9a40662e to your computer and use it in GitHub Desktop.
Save MarshalW/96ff7654358b9beb82e02cfe9a40662e to your computer and use it in GitHub Desktop.
阿里云命令 aliyun 的安装

阿里云命令 aliyun 的安装

note: 这种使用 docker 的方式,就是启动运行比较慢 - 所以,尽量改为用 terraform 的方式执行了。

阿里云通过命令 aliyun 执行云端资源管理。

为什么用 docker 方式安装

aliyun 命令通过 aliyun configure set [--profile <profileName>] --access-key-id .. 设置访问认证信息。

可以切换不同的设置 aliyun configure get --profile akProfile

可以通过 aliyun configure list 查看不同的 profile

这种方式容易造成混乱。

使用 docker 方式,认证信息直接在项目中设置。

这也是阿里云官方推荐的最佳实践。

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment