Ao criar uma instância do RDS Custom, você pode usar dados personalizados para configurar o sistema automaticamente ou executar scripts. Por exemplo, é possível pré-instalar o Nginx ou o Docker, ou ainda modificar o hostname.
Dados personalizados
Dados personalizados são scripts ou arquivos de configuração passados a uma instância do RDS Custom para executar tarefas de inicialização automatizadas na primeira inicialização. As instâncias do RDS Custom utilizam o componente cloud-init para ler e processar os dados personalizados e aplicar essas configurações. Os formatos de dados mais comuns são:
User-Data script: adequado para executar scripts shell simples.
Cloud-config data: oferece uma forma estruturada de configurar instâncias usando o formato YAML. É possível gerenciar pacotes, usuários, redes e muito mais.
include file: usa a diretiva
#includepara referenciar uma ou mais URLs que apontam para User-Data scripts ou Cloud-config data, como uma URL do Object Storage Service (OSS).Gzip compressed content: se um User-Data script ou Cloud-config data exceder 32 KB, compacte-o em um arquivo
.gze referencie-o por meio de um include file.MIME multi-part file: agrupa múltiplos tipos de dados — como Cloud-config data e um User-Data script — em um único arquivo.
A frequência de execução dos dados personalizados depende do tipo de dado e do cenário:
|
Formato de dados |
Iniciar instância |
Alterar sistema operacional |
Reinicializar o disco do sistema |
|
User-Data script |
Executado apenas na primeira inicialização da instância. Não é executado em reinicializações subsequentes. |
Executado automaticamente. |
Executado automaticamente. |
|
Cloud-config data |
A execução das tarefas depende da configuração de frequência do módulo correspondente.
|
Executado automaticamente. |
Executado automaticamente. |
|
include file |
A execução depende do conteúdo vinculado (User-Data script ou Cloud-config data). |
Executado automaticamente. |
Executado automaticamente. |
|
Gzip compressed content |
A execução depende do conteúdo do arquivo (User-Data script ou Cloud-config data). |
Executado automaticamente. |
Executado automaticamente. |
|
MIME multi-part file |
A execução depende do conteúdo do arquivo (User-Data script ou Cloud-config data). |
Executado automaticamente. |
Executado automaticamente. |
O script não é executado automaticamente nos seguintes cenários:
Ao substituir o sistema operacional por uma imagem personalizada criada a partir da instância original, o sistema não considera essa operação como a primeira inicialização da instância; portanto, o script não é executado.
Ao reinicializar o disco do sistema de uma instância criada a partir de uma imagem personalizada, o sistema não reconhece esse processo como primeira inicialização, pois o disco já contém dados. Consequentemente, o script não é executado.
Para obter mais informações sobre os formatos de dados personalizados, consulte a documentação do cloud-init em User-Data Formats.
Limitações
A instância deve usar uma imagem pública ou uma imagem personalizada criada a partir de uma imagem pública. O sistema operacional deve ser um dos seguintes:
Alibaba Cloud Linux, CentOS Stream, Ubuntu, Debian
Usar dados personalizados durante a criação da instância
Etapa 1: Preparar os dados personalizados
User-Data script
-
Formato
A primeira linha do script deve ser
#!. -
Exemplos de User-Data script
-
Executar um script personalizado. Este exemplo grava a hora do sistema no arquivo userdata_test.txt na primeira inicialização da instância.
#!/bin/sh echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt -
Personalizar o repositório yum, a configuração do DNS e o serviço de sincronização de tempo
O exemplo a seguir usa o CentOS Stream 9. Substitua as configurações pelas correspondentes ao seu sistema operacional.
ImportanteO sistema configura automaticamente o repositório yum padrão, o serviço NTP e o serviço DNS quando a instância é iniciada. Você pode usar dados personalizados da instância para alterar essas configurações padrão. No entanto, observe o seguinte:
Ao personalizar o repositório yum, a Alibaba Cloud deixará de oferecer suporte a ele.
Ao personalizar o serviço NTP, a Alibaba Cloud deixará de oferecer suporte à sincronização de tempo.
#!/bin/sh # Modify DNS echo "nameserver 114.114.114.114" | tee /etc/resolv.conf # Modify yum repo and update cp /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.bak cp /etc/yum.repos.d/centos-addons.repo /etc/yum.repos.d/centos-addons.repo.bak sed -i "s@http://mirrors.cloud.aliyuncs.com/centos-stream/@https://mirror.stream.centos.org/@g" /etc/yum.repos.d/centos.repo sed -i "s@http://mirrors.cloud.aliyuncs.com/centos-stream/@https://mirror.stream.centos.org/@g" /etc/yum.repos.d/centos-addons.repo yum update -y # Modify NTP Server echo "server ntp1.aliyun.com" | tee /etc/ntp.conf systemctl restart ntpd.serviceNotaNeste exemplo,
114.114.114.114é o endereço do servidor DNS,https://mirror.stream.centos.orgé o endereço do repositório yum do CentOS Stream eserver ntp1.aliyun.comé o endereço do servidor NTP da Alibaba Cloud. Substitua-os pelos valores reais do seu ambiente.Também é possível usar Cloud-config data para alterar o repositório yum. No entanto, esse método é menos flexível e pode não funcionar em cenários em que a Alibaba Cloud já pré-configurou determinados repositórios yum. Recomendamos usar um User-Data script.
-
Criar uma conta de administrador personalizada
Por padrão, as instâncias do RDS Custom utilizam o usuário root como administrador. Com dados personalizados, você pode criar um usuário administrativo adicional.
#!/bin/sh useradd test-user echo "test-user ALL=(ALL) NOPASSWD:ALL" | tee -a /etc/sudoers mkdir /home/test-user/.ssh touch /home/test-user/.ssh/authorized_keys echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCRnnUveAis****" | tee -a /home/test-user/.ssh/authorized_keysNotaSubstitua a chave pública de exemplo ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCRnnUveAis pela sua chave pública.
-
Cloud-config data
-
Formato
A primeira linha deve ser
#cloud-config, sem espaços no início.O conteúdo deve usar sintaxe YAML válida.
-
Exemplos de Cloud-config data
-
Personalizar o repositório de software
Para configurar um repositório de software personalizado, insira o conteúdo a seguir na área Custom Data. Este exemplo é para uma imagem Ubuntu. Ao usar uma imagem diferente, substitua o conteúdo pela configuração de módulo adequada.
#cloud-config apt: preserve_sources_list: false disable_suites: - $RELEASE-updates - backports - $RELEASE - mysuite primary: - arches: - amd64 - i386 - default uri: http://us.archive.ubuntu.com/ubuntu -
Instalar o serviço nginx automaticamente
Insira o conteúdo a seguir na área Custom Data para instalar o serviço nginx automaticamente.
#cloud-config packages: - nginx runcmd: - systemctl start nginx.service -
Configurar um hostname personalizado
Insira o conteúdo a seguir na área Custom Data para definir um hostname personalizado.
#cloud-config hostname: my-instance fqdn: my-instance.localdomain -
Executar um script personalizado automaticamente
Insira o conteúdo a seguir na área Custom Data para executar um script shell automaticamente toda vez que a instância for iniciada.
#cloud-config bootcmd: - echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
-
Include file
-
Formato
A primeira linha deve ser
#include, sem espaços no início. -
Exemplo de include file. Este exemplo apresenta uma URL que aponta para um script armazenado em um bucket do Object Storage Service (OSS) na região China (Hangzhou).
#include https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.sh
Gzip compressed content
-
Formato
A primeira linha deve ser
#include, sem espaços no início. -
Exemplo de Gzip compressed content. Este exemplo apresenta uma URL que aponta para um arquivo compactado em Gzip armazenado em um bucket do Object Storage Service (OSS) na região China (Hangzhou).
#include https://rc-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.gz
MIME multi-part file
-
Formato
A primeira linha deve ser
Content-Type: multipart/mixed; boundary="****", sem espaços no início. O boundary pode ser personalizado.A segunda linha,
MIME-Version: 1.0, especifica a versão. Esse campo geralmente é obrigatório em todas as mensagens MIME.
-
Exemplo de MIME multi-part file
Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config runcmd: - [ mkdir, /test-cloudinit ] write_files: - path: /test-cloudinit/cloud-init.txt content: | Created by cloud-init append: true --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash mkdir test-userscript touch /test-userscript/userscript.txt echo "Created by bash shell script" >> /test-userscript/userscript.txt --//--Este exemplo de MIME multi-part file contém diretivas do cloud-init e um script Bash shell:
As diretivas do cloud-init criam um arquivo (
/test-cloudinit/cloud-init.txt) e gravamCreated by cloud-initnele.O script Bash shell cria um arquivo (
/test-userscript/userscript.txt) e gravaCreated by bash shell scriptnele.
Etapa 2: Usar os dados personalizados
-
Criar uma instância no console
Ao criar uma instância do RDS Custom, expanda a seção More e insira os dados personalizados na área Custom Data.
ImportanteSe os dados personalizados já estiverem codificados em Base64, selecione The preceding input is Base64-encoded.. O tamanho dos dados antes da codificação não pode exceder 32 KB. Caso os dados não estejam codificados, deixe essa opção desmarcada — o sistema codificará o conteúdo automaticamente.
-
Criar uma instância usando a API
Ao criar uma instância via API, especifique o parâmetro
UserDatana operação RunRCInstances.
Etapa 3 (Opcional): Verificar a execução dos dados personalizados
Esta seção usa o seguinte User-Data script como exemplo.
#!/bin/sh
echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
Neste exemplo, o User-Data script grava a hora atual do sistema no arquivo userdata_test.txt na primeira inicialização da instância. Para verificar o resultado, execute o comando cat userdata_test.txt e visualize a saída do script.
Visualizar dados personalizados
Chame a operação DescribeRCInstanceAttribute para consultar os dados personalizados de uma instância do RDS Custom.