Ich habe eine Bibliothek zum Betreiben des AWS CloudFormation-Stacks über CUI (Python Fabric) erstellt.

Wir haben eine Bibliothek erstellt, mit der Sie den AWS CloudFormation-Stapel mithilfe des Python-Befehlszeilentools Fabric über die CUI erstellen / aktualisieren / löschen / überprüfen können.

** Fabricawscfn ・ ・ ・ Fabric-Taskgenerator für AWS CloudFormation. **

CloudFormation wird häufig zum Verwalten von AWS-Ressourcen verwendet, GUI-Vorgänge über die AWS-Konsole sind jedoch mühsam und schwer zu automatisieren. Es kann mithilfe von APIs wie AWS CLI automatisiert werden, es ist jedoch auch mühsam, Standardskripte einzeln zu schreiben.

Bei Fabricawscfn müssen Sie lediglich den Stapelnamen und die Vorlagendatei im Fabric-Skript (fabfile.py) angeben. Die grundlegenden Aufgaben für die Arbeit mit dem Stapel werden automatisch generiert.

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())

Allein damit werden Fabric-Aufgaben wie Stapelerstellung / Aktualisierung / Löschen / Listenansicht / Detailansicht automatisch generiert und verfügbar gemacht.

Das Ausführungsergebnis jeder Aufgabe entspricht im Wesentlichen der CUI der AWS-Konsolen-Benutzeroberfläche.

$ 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.

installieren

Installation der erforderlichen Software

$ pip install fabric

Installation von Fabricawscfn

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

Anwendungsbeispiel

Erstellen Sie ein Fabric-Skript "fabfile.py" und definieren Sie den Stapel mit "Fabricawscfn" wie im obigen Beispiel.

Weitere Informationen finden Sie unter GitHub README.

Überprüfen Sie die Liste der Stapel

$ 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   |                -                 |      -      | -           |
+------------+----------------------+-----------------+----------------------------------+-------------+-------------+

Überprüfen Sie die Stapeldetails

$ 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              |
+----------------------------------+--------------------+----------------------------+----------------------+-----------------------------+

Erstellen Sie einen Stapel

$ 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.

abschließend

Es ist immer noch rau und wenn Sie es in der tatsächlichen Produktentwicklung verwenden, sollten kleine Verbesserungen herauskommen, so dass wir es von Zeit zu Zeit verbessern werden.

Die Seite, die ich als Referenz verwendet habe

ähnliche Links

Recommended Posts

Ich habe eine Bibliothek zum Betreiben des AWS CloudFormation-Stacks über CUI (Python Fabric) erstellt.
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich habe eine Bibliothek erstellt, um japanische Sätze schön zu brechen
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich wollte die Python-Bibliothek von MATLAB verwenden
[Python] Ich habe ein System erstellt, um "das Rezept, das ich wirklich will" von der Rezeptseite einzuführen!
Ich habe einen Python-Text gemacht
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
So starten Sie AWS Batch über die Python-Client-App
Ich möchte viele Prozesse von Python aus starten
Ich habe ein Tool erstellt, um eine Wortwolke aus Wikipedia zu erstellen
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich habe Sie dazu gebracht, Befehle über einen WEB-Browser auszuführen
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe einen Line-Bot mit Python gemacht!
Ich habe meine eigene Python-Bibliothek erstellt
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Eine Geschichte, die ich süchtig danach war, Lambda von AWS Lambda anzurufen.
Ich habe eine Python-Bibliothek erstellt, um die API von LINE WORKS aufzurufen
Ich möchte eine Parameterliste aus CloudFormation-Code (yaml) erstellen.
Ich habe eine Python-Wrapper-Bibliothek für die Docomo-Bilderkennungs-API erstellt.
Ich habe einen verstümmelten Generator erstellt, der Ihre Lieblingssätze von UTF-8 bis Shift-JIS (cp932) in Python codiert
Ich habe ein Plugin erstellt, um mit Vim eine Markdown-Tabelle aus CSV zu generieren
Ich habe einen neuen AWS S3-Eimer hergestellt
[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (4)
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (2)
[Python-Memo] Ich möchte eine zweistellige Hexadezimalzahl aus einer Dezimalzahl erhalten
Ich möchte ein Glas aus Python verwenden
Ich möchte eine Python-Umgebung erstellen
Ich möchte mit aws mit Python spielen
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (5)
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe mit Python eine Hex-Map erstellt
Ich habe eine Bibliothek konoha gemacht, die den Tokenizer auf ein schönes Gefühl umstellt
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (3)
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (1)
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe eine Bibliothek für versicherungsmathematische Versicherungen erstellt
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
[Python] Deep Learning: Ich habe versucht, Deep Learning (DBN, SDA) ohne Verwendung einer Bibliothek zu implementieren.
Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
Ich habe ein Tool zum Generieren von Markdown aus der exportierten Scrapbox-JSON-Datei erstellt
[Python] Ich habe versucht, den Typnamen als Zeichenfolge aus der Typfunktion abzurufen