Wie verwende ich AwsUtility: :CloudFormation: :CommandRunner, um einen Befehl vor oder nach einer Ressource in meinem CloudFormation-Stack auszuführen?

Lesedauer: 3 Minute
0

Ich möchte AwsUtility: :CloudFormation: :CommandRunner verwenden, um einen Befehl vor oder nach einer Ressource in meinem AWS CloudFormation-Stack auszuführen.

Behebung

**Hinweis:**Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.

Um einen Befehl vor oder nach einer Ressource in Ihrem CloudFormation-Stack auszuführen, definieren Sie die Ressource AwsUtility::CloudFormation::CommandRunner in Ihrer CloudFormation-Vorlage.

Zum Beispiel:

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

**Wichtig:**Wenn Sie die Ressource AwsUtility::CloudFormation::CommandRunner noch nicht registriert haben, führen Sie die folgenden Befehle aus. Das Skript register.sh verwendet die Datei awsutility-cloudformation-commandrunner.zip, um den Ressourcentyp in Ihrer AWS-Region zu registrieren. Das Skript verwendet den AWS-CLI-Befehl register-type, um den Ressourcentyp in der in der AWS-CLI konfigurierten Standardregion zu registrieren. Sie können die konfigurierte Standardregion überprüfen, indem Sie aws configure get region ausführen. Weitere Informationen zu den Aktionen, die das Skript register.sh ausführt, finden Sie unter Schritte zur Benutzerinstallation im AWS-GitHub-Repository.

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

**Wichtig:**Die Eigenschaft Rolle sollte der Name eines AWS Identity and Access Management (IAM) -Instanzprofils mit einer zugehörigen IAM-Rolle sein. Die IAM-Rolle muss eine Vertrauensbeziehung zum Amazon Elastic Compute Cloud (Amazon EC2) -Service (ec2.amazonaws.com) haben. Die Eigenschaft Role wird von der Ressource AwsUtility::CloudFormation::CommandRunner übernommen, um Ihren Befehl auszuführen. Die optionale Eigenschaft LogGroup, falls angegeben, schreibt die Protokolle der Ausführung Ihres Befehls in die Amazon CloudWatch-Protokollgruppe. Weitere Informationen zur Verwendung der Ressource AwsUtility::CloudFormation::CommandRunner in Ihrer Vorlage finden Sie unter README.md und docs/README.md aus dem aws-cloudformation-resource-providers-awsutilities-commandrunner-Repository auf AWS GitHub.

Sie müssen die Option --region in Ihre AWS-CLI-Befehle aufnehmen. Dann müssen Sie die Ausgabe des Befehls in eine reservierte Datei namens /command-output.txt schreiben, wie im vorherigen Codebeispiel.

Sie können die Ausgabe des Befehls mit Fn::getAtt referenzieren. Zum Beispiel:

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

Um den Befehl nach einer Ressource mit dem logischen Namen Instance auszuführen, geben Sie dependOn an: Instanz in der Definition der Ressource AwsUtility::CloudFormation::CommandRunner. Zum Beispiel:

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

Um den Befehl vor einer Ressource auszuführen, setzen Sie DependsOn auf den logischen Namen der AwsUtility::CloudFormation::CommandRunner-Ressource in der Definition dieser Ressource. Zum Beispiel:

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

**Hinweis:**In den vorherigen Beispielen gibt sed -n 1p nur die erste Zeile der Antwort aus, die von aws s3 ls zurückgegeben wurde. Um den Bucket-Namen abzurufen, leitet sed -n 1p die Antwort über die Pipeline an cut -d "" -f3 weiter. Dann wählt cut -d "" -f3 das dritte Element in dem Array aus, das nach dem Teilen der durch ein Leerzeichen begrenzten Linie entsteht.


Ähnliche Informationen

Ausführen von Bash-Befehlen in AWS CloudFormation-Vorlagen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren