2016-11-22 6 views
2

Ich versuche, aws Lambda-Funktion mit Terraform zu implementieren.Wie führe ich den Befehl aus, bevor data.archive_file den Ordner in Terraform reißt?

Ich habe einfach null_resource, die lokalen Provisioner und resource.archive_file haben, die Quellcode reißt, nachdem alle Vorbereitung erfolgt ist.

resource "null_resource" "deps" { 

    triggers = { 
    package_json = "${base64sha256(file("${path.module}/src/package.json"))}" 
    } 

    provisioner "local-exec" { 
    command = "cd ${path.module}/src && npm install" 
    } 
} 

resource "archive_file" "function" { 
    type = "zip" 
    source_dir = "${path.module}/src" 
    output_path = "${path.module}/function.zip" 

    depends_on = [ "null_resource.deps" ] 
} 

Letzte Änderungen an Terraforming resource.archive_file veraltet, so data.archive_file sollte stattdessen verwendet werden. Leider wird data vor Ressourcen ausgeführt, und daher wird der lokale Provisioner von der abhängigen Ressource so aufgerufen, nachdem die Zip-Datei erstellt wurde. So erzeugt der folgende Code keine Warnung mehr, funktioniert aber überhaupt nicht.

resource "null_resource" "deps" { 

    triggers = { 
    package_json = "${base64sha256(file("${path.module}/src/package.json"))}" 
    } 

    provisioner "local-exec" { 
    command = "cd ${path.module}/src && npm install" 
    } 
} 

data "archive_file" "function" { 
    type = "zip" 
    source_dir = "${path.module}/src" 
    output_path = "${path.module}/function.zip" 

    depends_on = [ "null_resource.deps" ] 
} 

Fehle ich etwas? Was ist der richtige Weg, dies mit den neuesten Versionen zu tun?

Terraforming: v0.7.11 OS: Win10

+0

Ich denke, Sie haben Recht, und es ist nicht möglich, nur Terraform zu verwenden. –

Antwort

1

Es gibt eine neue Datenquelle in Terraforming 0,8, external, die Sie externe Befehle ausgeführt werden können und Ausgabe extrahieren. Siehe data.external

Die Datenquelle sollte nur für den Abruf von einigen depedency Wert verwendet werden, nicht die Ausführung des npm install, sollten Sie noch tun, dass über die null_resource. Da es sich um eine Terraform-Datenquelle handelt, sollte es keine Nebenwirkungen haben (obwohl Sie in diesem Fall möglicherweise einige benötigen, nicht sicher).

Also im Grunde null_resource die Abhängigkeiten, data.external ergreift einen Wert, den Sie für das Archiv (Verzeichnispfad zum Beispiel) abhängen können, dann data.archive_file führt die Archivierung.

Dies würde wahrscheinlich am besten mit einem pseudozufälligen Verzeichnisnamen funktionieren, der potenziell schmutzige Überprüfungen etwas sauberer machen könnte.

Verwandte Themen