J'ai une pile CloudFormation, illustrée ci-dessous,
"Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "/home/ec2-user/create_db_user.sh" : { "source" : "http://s3.amazonaws.com/devops/create_db_user.sh", "mode" : "000755", "owner" : "ec2-user" } } ...
Je dois exécuter cette commande lorsque l'instance EC2 est active, après avoir défini cette sortie de script d'initialisation sur la pile cloudformation.
Comment je peux y parvenir.
3 Réponses :
Dans les commentaires à votre question, il y a quelques points valables pour vous pousser vers la bonne solution. En général, ce que vous essayez de faire est impossible - il n'y a pas de sortie de la ressource AWS :: CloudFormation :: Init
. Ils ne sont pas évalués au moment de la création de la pile, juste stockés et traités par l'instance EC2 au moment de son lancement, mais ce n'est pas le moment où la pile CloudFormation est en cours d'exécution (peut-être, mais pas toujours - prenez le groupe de mise à l'échelle automatique par exemple).
Un peu en retard à la fête mais en plus de la réponse précédente ...
La sortie de AWS :: CloudFormation :: Init
lors de la création de l'instance EC2 n'est pas accessible via Cloudformation.
Cependant, sur les instances EC2 qui ont été démarrées, vous trouverez des journaux pour AWS :: CloudFormation :: Init
(alias. cfn-init
) et pour l'utilisateur- données ( cloud-init
).
Sur Amazon Linux, ceci est structuré comme suit:
Le moyen le plus simple d'accéder à ces journaux est de diffuser les journaux vers Cloudwatch Logs, ce qui vous permettra de rechercher et de filtrer les journaux par heure et contenu. Pensez également à utiliser Cloudwatch Insights pour la recherche et le filtrage - il dispose d'une syntaxe plus complète et compréhensible pour la recherche, le filtre et même la visualisation simple (graphique).
Étant donné que vous utilisez déjà cfn-init, vous pouvez trouver des informations ici pour savoir comment installer le nouvel agent Cloudwatch (et non l'agent Cloudwatch Logs!). L'avantage d'utiliser l'agent Cloudwatch est qu'il peut également diffuser des métriques personnalisées vers des métriques Cloudwatch (par exemple, l'utilisation de la mémoire, les métriques d'application, les métriques de base de données, etc.).
Pour les instances EC2 déjà en cours d'exécution, pensez à jeter un œil à cfn-hup
ici .
L'alternative serait d'utiliser SSM (Systems Manager) pour pousser l'agent sur des instances déjà en cours d'exécution conformément aux instructions ici .
Selon this doc - La valeur d'une sortie peut inclure des littéraux, des références de paramètres, des pseudo-paramètres, une valeur de mappage ou des fonctions intrinsèques.
Étant donné que, AWS :: CloudFormation :: Init
est un type spécifique aux métadonnées CloudFromation mais pas un littéral, un paramètre, un pseudo-paramètre, une valeur de mappage ou une fonction intrinsèque.
Donc, ce que vous essayez d'accomplir semble être une limitation des sorties CloudFormation :(
La réponse@ m-jensen répertorie de nombreuses solutions de contournement appropriées pour cela.
Que voulez-vous dire par avoir la sortie dans CloudFormation? Voulez-vous savoir si cela a réussi ou voulez-vous voir
stdout
?Cherchez-vous à déployer des données utilisateur à l'aide du modèle cloudformation? docs.aws.amazon.com/AWSEC2/latest/UserGuide/ user-data.html
@kichik Je veux voir la sortie standard sur la console AWS cloudformation dans les sorties de la pile
De quelle taille parlons-nous?
J'exécute un script pour créer un nom d'utilisateur et un mot de passe aléatoires, je dois le montrer en sortie
peut-être que si vous nous dites quel est le cas d'utilisation, nous pourrions vous aider, en essayant d'obtenir le fonctionnement du script dans ec2 vers cloudformation, pourquoi ne pas essayer d'utiliser AWS Secrets Manager pour les utilisateurs de base de données et le mot de passe? En outre, vous pouvez également avoir une fonction lambda pour créer des utilisateurs et des mots de passe aléatoires, les stocker dans AWS Secrets Manager, renvoyer les données souhaitées via les données de réponse à cloudformation