es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La sustitución de comandos en bash aparece en blanco.

Tengo el siguiente Dockerfile:

FROM public.ecr.aws/docker/library/python:3.7-slim-buster as base
WORKDIR /code
RUN apt-get update -y && \
    pip install --upgrade pip && \
    mkdir ~/.aws \
    && touch ~/.aws/credentials
RUN apt-get install -y nodejs npm awscli jq

El cual deriva de slim-buster.
Estoy intentando hacer un comando de un solo paso aws sts desde esta solución recomendada en https://stackoverflow.com/questions/63241009/aws-sts-assume-role-in-one-command

Sin embargo, la solución de “eval” no muestra ningún resultado o los paréntesis no están escapados correctamente dentro de un comando make:

sts-qa:
    eval $(aws sts assume-role --role-arn arn:aws:iam::1234556778:role/aws-role --role-session-name pebble | jq -r '.Credentials | "export AWS_ACCESS_KEY_ID=\(.AccessKeyId)\nexport AWS_SECRET_ACCESS_KEY=\(.SecretAccessKey)\nexport AWS_SESSION_TOKEN=\(.SessionToken)\n"')

El error que obtengo es:

root@b79fd0ebf8cf:/code# make sts-qa
eval \n export AWS_ACCESS_KEY_ID=\(.AccessKeyId)\nexport AWS_SECRET_ACCESS_KEY=\(.SecretAccessKey)\nexport AWS_SESSION_TOKEN=\(.SessionToken)\n"')
/bin/sh: 1: Syntax error: ")" unexpected

He intentado:

  • Escapar todos los paréntesis () del comando. Obtengo el siguiente error: /bin/sh: 2: Syntax error: Unterminated quoted string
  • Asignar el contenido de $(…) a una variable. Lo que obtengo como resultado es eval (todo el comando bash está en blanco)

Se me han agotado las ideas.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el escape de las comillas y paréntesis dentro del comando jq. Una solución podría ser encerrar todo el comando entre comillas dobles y escapar las comillas y paréntesis internos de la siguiente manera:

    sts-qa:
        eval $$(aws sts assume-role --role-arn arn:aws:iam::1234556778:role/aws-role --role-session-name pebble | jq -r ".Credentials | \"export AWS_ACCESS_KEY_ID=\(.AccessKeyId)\\n export AWS_SECRET_ACCESS_KEY=\(.SecretAccessKey)\\nexport AWS_SESSION_TOKEN=\(.SessionToken)\\n\"")
    

    Ten en cuenta que estamos usando dos signos de dólar para escapar el comando dentro del archivo Makefile. Esto debería exportar correctamente las variables para la sesión de AWS.

Comments are closed.