J'ai créé une bibliothèque pour faire fonctionner la pile AWS CloudFormation à partir de CUI (Python Fabric)

Nous avons créé une bibliothèque qui vous permet de créer / mettre à jour / supprimer / vérifier la pile AWS CloudFormation à partir du CUI à l'aide de l'outil de ligne de commande Python Fabric.

** fabricawscfn ・ ・ ・ Générateur de tâches Fabric pour AWS CloudFormation. **

CloudFormation est souvent utilisé pour gérer les ressources AWS, mais les opérations GUI de la console AWS sont laborieuses et difficiles à automatiser. Il peut être automatisé à l'aide d'API telles que l'AWS CLI, mais il est également difficile d'écrire des scripts standard un par un.

Avec fabricawscfn, tout ce que vous avez à faire est de spécifier le nom de la pile et le fichier modèle dans le script Fabric (fabfile.py) et les tâches de base pour travailler avec la pile seront automatiquement générées.

fabfile.py


from fabricawscfn import *

StackGroup('my-cfn-templates', 'example', 'templates')\
  .define_stack('foo', 'example-foo', 'foo.yaml')\
  .define_stack('bar', 'example-bar', 'bar.yaml', Tags=[{'Key':'example', 'Value':'EXAMPLE'}])\
  .generate_task(globals())

Avec cela seul, les tâches Fabric telles que la création de pile / mise à jour / suppression / vue de liste / vue détaillée sont automatiquement générées et mises à disposition.

Le résultat de l'exécution de chaque tâche ressemble essentiellement à ce que l'interface utilisateur de la console AWS est convertie en CUI telle quelle.

$ fab -l
Available commands:

    create_bar         create stack bar.
    create_foo         create stack foo.
    delete_bar         delete stack bar.
    delete_foo         delete stack foo.
    desc_stack         Describe existing stack.
    list_exports       List exports.
    list_resources     List existing stack resources.
    list_stacks        List stacks.
    params             Set parameters. (Applies to all tasks)
    sync_templates     Synchronize templates local dir to S3 bucket.
    update_bar         update stack bar.
    update_foo         update stack foo.
    validate_template  Validate template on local dir.

installer

Installation du logiciel requis

$ pip install fabric

Installation de fabricawscfn

$ pip install git+https://github.com/crossroad0201/fabric-aws-cloudformation.git

Exemple d'utilisation

Créez un script Fabric fabfile.py et utilisez fabricawscfn pour définir la pile comme dans l'exemple ci-dessus.

Voir GitHub README pour plus d'informations.

Consultez la liste des piles

$ fab list_stacks
Stacks:
+------------+----------------------+-----------------+----------------------------------+-------------+-------------+
| StackAlias | StackName            |      Status     |           CreatedTime            | UpdatedTime | Description |
+------------+----------------------+-----------------+----------------------------------+-------------+-------------+
| foo        | fabricawscfn-dev-foo | CREATE_COMPLETE | 2017-03-05 04:35:12.823000+00:00 |      -      | Foo bucket. |
| bar        | fabricawscfn-dev-bar |   Not created   |                -                 |      -      | -           |
+------------+----------------------+-----------------+----------------------------------+-------------+-------------+

Vérifier les détails de la pile

$ fab desc_stack:foo
Stack:
+----------------------+-----------------+----------------------------------+-------------+-------------+
| StackName            |      Status     |           CreatedTime            | UpdatedTime | Description |
+----------------------+-----------------+----------------------------------+-------------+-------------+
| fabricawscfn-dev-foo | CREATE_COMPLETE | 2017-03-05 04:35:12.823000+00:00 |     None    | Foo bucket. |
+----------------------+-----------------+----------------------------------+-------------+-------------+
Parameters:
+---------+--------+
| Key     | Value  |
+---------+--------+
| Param4  | PARAM4 |
| Param3  | PARAM3 |
| Param2  | PARAM2 |
| Param1  | PARAM1 |
| EnvName | dev    |
+---------+--------+
Outputs:
+--------+-----------------+-------------+
| Key    | Value           | Description |
+--------+-----------------+-------------+
| Bucket | sandbox-dev-foo | Foo bucket. |
+--------+-----------------+-------------+
Events(last 20):
+----------------------------------+--------------------+----------------------------+----------------------+-----------------------------+
| Timestamp                        |       Status       | Type                       | LogicalID            | StatusReason                |
+----------------------------------+--------------------+----------------------------+----------------------+-----------------------------+
| 2017-03-05 04:35:55.694000+00:00 |  CREATE_COMPLETE   | AWS::CloudFormation::Stack | fabricawscfn-dev-foo | None                        |
| 2017-03-05 04:35:53.009000+00:00 |  CREATE_COMPLETE   | AWS::S3::Bucket            | Bucket               | None                        |
| 2017-03-05 04:35:32.308000+00:00 | CREATE_IN_PROGRESS | AWS::S3::Bucket            | Bucket               | Resource creation Initiated |
| 2017-03-05 04:35:31.102000+00:00 | CREATE_IN_PROGRESS | AWS::S3::Bucket            | Bucket               | None                        |
| 2017-03-05 04:35:12.823000+00:00 | CREATE_IN_PROGRESS | AWS::CloudFormation::Stack | fabricawscfn-dev-foo | User Initiated              |
+----------------------------------+--------------------+----------------------------+----------------------+-----------------------------+

Créer une pile

$ fab create_bar
Creating stack...
  Stack Name: fabricawscfn-dev-bar
  Template  : https://s3.amazonaws.com/crossroad0201-fabricawscfn/example/dev/subdir/bar.yaml
  Parameters: [{'ParameterValue': 'dev', 'ParameterKey': 'EnvName'}]
Waiting for complete...
Finish.

en conclusion

C'est encore difficile et si vous l'utilisez dans le développement de produits réels, de petites améliorations devraient apparaître, donc nous l'améliorerons de temps en temps.

Le site que j'ai utilisé comme référence

Liens connexes

Recommended Posts

J'ai créé une bibliothèque pour faire fonctionner la pile AWS CloudFormation à partir de CUI (Python Fabric)
J'ai créé une bibliothèque python qui fait rouler le rang
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
J'ai fait une bibliothèque pour bien séparer les phrases japonaises
J'ai créé un module Python pour traduire les commentaires
Je voulais utiliser la bibliothèque Python de MATLAB
[Python] J'ai créé un système pour introduire "la recette que je veux vraiment" depuis le site de recettes!
J'ai fait un texte Python
J'ai créé un package pour filtrer les séries chronologiques avec python
Comment lancer AWS Batch à partir de l'application cliente Python
Je veux démarrer beaucoup de processus à partir de python
J'ai créé un outil pour créer un nuage de mots à partir de wikipedia
Je souhaite envoyer un message de Python à LINE Bot
Je vous ai fait exécuter des commandes depuis un navigateur WEB
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
J'ai fait un Line-bot avec Python!
J'ai créé ma propre bibliothèque Python
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
Une histoire à laquelle j'étais accro à appeler Lambda depuis AWS Lambda.
J'ai créé une bibliothèque Python pour appeler l'API de LINE WORKS
Je souhaite créer une liste de paramètres à partir du code CloudFormation (yaml)
J'ai créé une bibliothèque de wrapper Python pour l'API de reconnaissance d'images docomo.
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python
J'ai créé un plugin pour générer une table Markdown à partir de csv avec Vim
J'ai créé un nouveau compartiment AWS S3
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
J'ai fait Othello pour enseigner Python3 aux enfants (4)
J'ai fait un programme de gestion de la paie en Python!
J'ai créé une application Web en Python qui convertit Markdown en HTML
J'ai fait un compteur de caractères avec Python
J'ai fait Othello pour enseigner Python3 aux enfants (2)
[Mémo Python] Je souhaite obtenir un nombre hexadécimal à 2 chiffres à partir d'un nombre décimal
Je veux utiliser jar de python
Je veux créer un environnement Python
Je veux jouer avec aws avec python
J'ai fait Othello pour enseigner Python3 aux enfants (5)
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
J'ai fait un script pour afficher des pictogrammes
J'ai fait une carte hexadécimale avec Python
J'ai créé un konoha de bibliothèque qui fait passer le tokenizer à une belle sensation
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai fait un jeu rogue-like avec Python
J'ai fait Othello pour enseigner Python3 aux enfants (3)
J'ai fait Othello pour enseigner Python3 aux enfants (1)
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai fait un simulateur de neurones avec Python
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai créé une image Docker qui peut appeler FBX SDK Python à partir de Node.js
J'ai fait un module en langage C qui filtre les images chargées par Python
J'ai créé un outil pour générer du Markdown à partir du fichier JSON Scrapbox exporté
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type