Como uso o AWSUtility::CloudFormation::CommandRunner para executar um comando antes ou depois de um recurso na minha pilha do CloudFormation?

3 minuto de leitura
0

Quero usar o AWSUtility::CloudFormation::CommandRunner para executar um comando antes ou depois de um recurso na minha pilha do AWS CloudFormation.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de estar usando a versão mais recente da AWS CLI.

Para executar um comando antes ou depois de um recurso na sua pilha do CloudFormation, defina o recurso AWSUtility::CloudFormation::CommandRunner em seu modelo do CloudFormation.

Por exemplo:

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: Se você ainda não registrou o recurso AWSUtility::CloudFormation::CommandRunner, execute os comandos a seguir. O script register.sh usa o awsutility-cloudformation-commandrunner.zip para registrar o tipo de recurso na sua região da AWS. O script usa o comando registrer-type da AWS CLI para registrar o tipo de recurso na região padrão configurada na AWS CLI. Você pode verificar a região padrão configurada executando aws configure get region. Para obter mais informações sobre quais ações o script register.sh executa, consulte Etapas de instalação do usuário no repositório do 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: A propriedade Perfil deve ser o nome de um perfil de instância do AWS Identity and Access Management (IAM) com um perfil do IAM associado. O perfil do IAM deve ter uma relação de confiança com o serviço Amazon Elastic Compute Cloud (Amazon EC2) (ec2.amazonaws.com). A propriedade Perfil é assumida pelo recurso AWSUtility::CloudFormation::CommandRunner para executar seu comando. A propriedade opcional LogGroup, se especificada, grava os logs da execução do seu comando no grupo de logs do Amazon CloudWatch. Para obter mais informações sobre como usar o recurso AWSUtility::CloudFormation::CommandRunner em seu modelo, consulte README.md e docs/README.md do repositório aws-cloudformation-resource-providers-awsutilities-commandrunner no AWS GitHub.

Você deve incluir a opção --region em seus comandos da AWS CLI. Em seguida, você deve gravar a saída do comando em um arquivo reservado chamado /command-output.txt, como no exemplo de código anterior.

Você pode referenciar a saída do comando usando Fn::GetAtt. Por exemplo:

S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
        BucketName: !GetAtt CommandRunner.Output

Para executar o comando após um recurso com o nome lógico Instância, especifique DependsOn: Instância na definição do recurso ** AWSUtility::CloudFormation::CommandRunner**. Por exemplo:

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 executar o comando antes de um recurso, defina DependsOn como o nome lógico do recurso AWSUtility::CloudFormation::CommandRunner na definição desse recurso. Por exemplo:

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

Observação: Nos exemplos anteriores, sed -n 1p imprime somente a primeira linha da resposta retornada pelo aws s3 ls. Para obter o nome do bucket, sed -n 1p canaliza a resposta para cut -d " " -f3. Em seguida, cut -d " " -f3 escolhe o terceiro elemento na matriz criada após dividir a linha delimitada por um espaço.


Informações relacionadas

Execução de comandos bash em modelos do AWS CloudFormation

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos