Como parte de mi script de shell, intento crear conjuntos de registros en AWS Route53. Sin embargo, al usar variables en aws cli dentro de mi script de shell para crear ese conjunto de registros, mis variables exportadas en el script de Shell no se pasan al comando aws cli .
Comando AWS CLI proporcionado por AWS:
$ aws route53 change-resource-record-sets --hosted-zone-id 1234567890ABC \ --change-batch file:///path/to/record.jsonNo quiero crear un archivo json separado en mi computadora por razones de simplicidad, quiero tener todos mis comandos y variables dentro del script de shell.
#!/bin/bash export TARGET_ENVIRONMENT=uat export BASE_ENVIRONMENT_DNS=abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com # Creates route 53 records based on env name aws route53 change-resource-record-sets --hosted-zone-id 1234567890ABC --change-batch '{ "Comment": "Testing creating a record set", "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "$(TARGET_ENVIRONMENT).company.com", "Type": "CNAME", "TTL": 120, "ResourceRecords": [ { "Value": "$(BASE_ENVIRONMENT_DNS)" } ] } } ] }'Este último comando está creando un conjunto de registros en AWS Route53 como:
$(TARGET_ENVIRONMENT).company.comcon CNAME como
$(BASE_ENVIRONMENT_DNS)y NO realmente como quiero que sea, que es:
uat.company.comcon el CNAME:
abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com¿Cómo puedo pasar las variables de entorno a mi comando aws cli dentro del script?
Cualquier ayuda será muy apreciada.
¡Gracias!
Las variables no se expanden entre comillas simples.
Si cierra las comillas simples antes de la expansión de la variable y luego las vuelve a abrir inmediatamente después, debería producir el efecto deseado. Es posible que necesite o no envolver la variable entre comillas dobles para que se expanda.
#!/bin/bash ENV=uat DNS=abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com # Creates route 53 records based on env name aws route53 change-resource-record-sets \ --hosted-zone-id 1234567890ABC \ --change-batch ' { "Comment": "Testing creating a record set" ,"Changes": [{ "Action" : "CREATE" ,"ResourceRecordSet" : { "Name" : "'" $ENV "'.company.com" ,"Type" : "CNAME" ,"TTL" : 120 ,"ResourceRecords" : [{ "Value" : "'" $DNS "'" }] } }] } 'También puede aprovechar la sustitución de procesos para mantener el formato JSON:
#!/bin/bash export TARGET_ENVIRONMENT=uat export BASE_ENVIRONMENT_DNS=abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com # Creates route 53 records based on env name aws route53 change-resource-record-sets --hosted-zone-id 1234567890ABC --change-batch file://<(cat << EOF { "Comment": "Testing creating a record set", "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "$(TARGET_ENVIRONMENT).company.com", "Type": "CNAME", "TTL": 120, "ResourceRecords": [ { "Value": "$(BASE_ENVIRONMENT_DNS)" } ] } } ] } EOF )