¿Cómo utilizo AWSUtility::CloudFormation::CommandRunner para ejecutar un comando antes o después de un recurso de mi pila de CloudFormation?
Quiero usar AWSUtility::CloudFormation::CommandRunner para ejecutar un comando antes o después de un recurso de mi pila de AWS CloudFormation.
Resolución
Nota: Si recibe errores al ejecutar la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de la CLI de AWS.
Para ejecutar un comando antes o después de un recurso de su pila de CloudFormation, defina el recurso AWSUtility::CloudFormation::CommandRunner en su plantilla de CloudFormation.
Por ejemplo:
Resources: CommandRunner: Type: AWSUtility::CloudFormation::CommandRunner Properties: Command: 'aws ssm get-parameter --name BucketName --region us-east-1 --query Parameter.Value --output text > /command-output.txt' Role: EC2-Role LogGroup: my-cloudwatch-log-group
Importante: Si aún no ha registrado el recurso AWSUtility::CloudFormation::CommandRunner, ejecute los siguientes comandos. El script register.sh usa awsutility-cloudformation-commandrunner.zip para registrar el tipo de recurso en su región de AWS. El script usa el comando register-type de la CLI de AWS para registrar el tipo de recurso en la región predeterminada configurada en la CLI de AWS. Puede comprobar la región predeterminada configurada ejecutando aws configure get region. Para obtener más información sobre las acciones que realiza el script register.sh, consulte los pasos de instalación del usuario en el repositorio de AWS GitHub.
git clone https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-awsutilities-commandrunner.git cd aws-cloudformation-resource-providers-awsutilities-commandrunner curl -LO https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-awsutilities-commandrunner/releases/latest/download/awsutility-cloudformation-commandrunner.zip ./scripts/register.sh --set-default
Importante: La propiedad Rol debe ser el nombre de un perfil de instancia de AWS Identity and Access Management (IAM) con una función de IAM asociada. El rol de IAM debe tener una relación de confianza con el servicio Amazon Elastic Compute Cloud (Amazon EC2) (ec2.amazonaws.com). El recurso AWSUtility::CloudFormation::CommandRunner asume la propiedad Rol para ejecutar el comando. La propiedad opcional LogGroup, si se especifica, escribe los registros de la ejecución del comando en el grupo de registros de Amazon CloudWatch. Para obtener más información sobre el uso del recurso AWSUtility::CloudFormation::CommandRunner en la plantilla, consulte README.md y docs/README.md del repositorio aws-cloudformation-resource-providers-awsutilities-commandrunner en AWS GitHub.
Debe incluir la opción --region en los comandos de la CLI de AWS. A continuación, debe escribir el resultado del comando en un archivo reservado denominado /command-output.txt, como en el ejemplo de código anterior.
Puede hacer referencia a la salida del comando mediante Fn::GetAtt. Por ejemplo:
S3Bucket: Type: AWS::S3::Bucket Properties: BucketName: !GetAtt CommandRunner.Output
Para ejecutar el comando después de un recurso con el nombre lógico Instance, especifique DependsOn: Instance en la definición del recurso AWSUtility::CloudFormation::CommandRunner. Por ejemplo:
Resources: CommandRunner: DependsOn: Instance Type: AWSUtility::CloudFormation::CommandRunner Properties: Command: aws s3 ls | sed -n 1p | cut -d " " -f3 > /command-output.txt LogGroup: my-cloudwatch-log-group Role: EC2-Role Instance: Type: AWS::EC2::Instance Properties: Image: ami-abcd1234
Para ejecutar el comando antes de un recurso, defina DependsOn en el nombre lógico del recurso AWSUtility::CloudFormation::CommandRunner en la definición de ese recurso. Por ejemplo:
Resources: CommandRunner: Type: AWSUtility::CloudFormation::CommandRunner Properties: Command: aws s3 ls | sed -n 1p | cut -d " " -f3 > /command-output.txt LogGroup: my-cloudwatch-log-group Role: EC2-Role Instance: DependsOn: CommandRunner Type: AWS::EC2::Instance Properties: Image: ami-abcd1234
Nota: En los ejemplos anteriores, sed -n 1p imprime solo la primera línea de la respuesta devuelta por aws s3 ls. Para obtener el nombre del bucket, sed -n 1p canaliza la respuesta a cut -d " " -f3. Luego, cut -d " " -f3 elige el tercer elemento de la matriz creada después de dividir la línea delimitada por un espacio.
Información relacionada
Ejecución de comandos bash en plantillas de AWS CloudFormation
Contenido relevante
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años