web-dev-qa-db-fra.com

Obtenir des sorties à partir de aws cloudformation describe-stacks

J'utilise ce qui suit pour obtenir le informations de pile Je veux via AWS Cli:

aws cloudformation --region ap-southeast-2 describe-stacks --stack-name mystack

Ça retourne résultat OK:

{
    "Stacks": [
        {
            "StackId": "arn:aws:mystackid", 
            "LastUpdatedTime": "2017-01-13T04:59:17.472Z", 
            "Tags": [], 
            "Outputs": [
                {
                    "OutputKey": "Ec2Sg", 
                    "OutputValue": "sg-97e13dff"
                }, 
                {
                    "OutputKey": "DbUrl", 
                    "OutputValue": "myUrl"
                }
            ], 
            "CreationTime": "2017-01-13T03:27:18.893Z", 
            "StackName": "mystack", 
            "NotificationARNs": [], 
            "StackStatus": "UPDATE_ROLLBACK_COMPLETE", 
            "DisableRollback": false
        }
    ]
}

Mais je ne sais pas comment renvoyer uniquement la valeur de OutputValue qui est myUrl

Comme je n'ai pas besoin du reste, juste myUrl.

Est-ce possible via aws cloudformation decrire-stacks?

Modifier

Je viens de réaliser que je peux utiliser -- requête :

--query "Stacks[0].Outputs[1].OutputValue"

obtiendra exactement ce que je veux mais je voudrais utiliser DbUrl sinon si le nombre de sorties change, mon résultat sera inattendu.

36
Steven Yong

J'ai eu la réponse, utilisez ce qui suit:

--query "Stacks[0].Outputs[?OutputKey=='DbUrl'].OutputValue" --output text

J'espère que cela aidera quelqu'un.

56
Steven Yong

Lorsque vous interrogez des travaux, cela peut s'avérer problématique si vous avez plusieurs piles. En réalité, vous devriez probablement tirer parti des exportations pour des éléments distincts et faisant autorité.

À titre d'exemple - si vous avez modifié votre extrait de code CloudFormation pour qu'il ressemble à ceci:

"Outputs" : {
  "DbUrl" : {
    "Description" : "My Database Url",
    "Value" : "myUrl",
    "Export" : {
      "Name" : "DbUrl"
    }
  }
}

Ensuite, vous pouvez utiliser:

aws cloudformation list-exports --query "Exports[?Name==\`DbUrl\`].Value" --no-paginate --output text

pour le récupérer. Les exportations doivent être uniques - une seule pile peut exporter un nom donné. De cette façon, vous êtes assuré d'obtenir la bonne valeur, à chaque fois. Si vous essayez de créer une nouvelle pile qui exporte un nom existant ailleurs, la création de cette pile échouera.

10
g.d.d.c

À l'aide de Windows AWS CLI, je devais m'assurer du --query param a été doublé.

aws cloudformation describe-stacks --stack-name <stack_name> --query "Stacks[0].Outputs[?OutputKey==`<key_we_want>`].OutputValue" --output text

À défaut d'utiliser des guillemets doubles, la requête a renvoyé:

Stacks[0].Outputs[?OutputKey==].OutputValue

Pas si utile.

0
SelfishCosmonaut