2017-11-17 3 views
1

Ich denke an eine Anwendung in Mikro-Dienste mit dieser Terraforming Verzeichnisstruktur Zerschlagung:Können Sie Parent-Ressource zwischen Terraform-Unterverzeichnissen teilen?

myurl.com/service1 
myurl.com/service2 

Beide:

/staging 
    /global 
    /service1 
    /service2 
/prod 
    /global 
    /service1 
    /service2 

nehme ich jedes Micro eigenen AWS Apigateway Endpunkt es haben möchte Dienste können Teil der gleichen Eltern AWS apigateway Ressource sein:

#creates the api (a parent of all resources), 
resource "aws_api_gateway_rest_api" "api" { 
    name  = "API root parent" 
    description = "Contains all endpoints" 
} 

Mein Verständnis ist, dass jeder top le vel AWS REST api wäre eine eigene Cloudfront und ich brauche nur EINE von ihnen für alle meine Microservices statt einer REST api pro Microservice. Ich möchte die REST-api-Deklaration in den Ordner /global legen, da dies von allen Microservices geteilt würde.

Dann in service1 Unterverzeichnis würde ich definieren, Ressourcen beginnen, die die Eltern verweisen müßten:

resource "aws_api_gateway_resource" "service1" { 
    rest_api_id = "${aws_api_gateway_rest_api.api.id}" 
    parent_id = "${aws_api_gateway_rest_api.api.root_resource_id}" 
    path_part = "service1" 
} 

Aber wie wäre das service1 Unterverzeichnis hat Zugriff auf die api Ressource, da es im selben Verzeichnis nicht definiert ist?

Ich könnte möglicherweise den Status einer vorhandenen Ressource in das Unterverzeichnis für jedes Microservice-Unterverzeichnis importieren, aber das scheint wie ein Durcheinander.

UPDATE: Es sieht so aus, als ob AWS api Gateway nur Gebühren für die Verwendung, so dass ich nur separate Rest API-Ressourcen für jedes Unterverzeichnis schließlich erstellen kann. Aber ich muss immer noch wissen, wie man die Ressourcenvariablen in den Unterordnern sammelt, um die entsprechenden API-Implementierungsstufen zu einer gemeinsamen benutzerdefinierten Domäne hinzuzufügen. Gibt es eine Technik oder ein Muster, um in der Lage zu sein, Projekte hauptsächlich nach Ordnern zu trennen, aber in der Lage zu sein, Variablen zu extrahieren und zusammen in /global zu kleben, was nicht für jedes Unterverzeichnis spezifisch ist?

Antwort

1

Fern Staaten in Terraforming ist, was Sie für https://www.terraform.io/docs/state/remote.html https://www.terraform.io/docs/providers/terraform/d/remote_state.html

suchen Da Sie in AWS sind, können Sie S3 als Speicherplatz für die Remote-Staaten nutzen könnten.

data "terraform_remote_state" "prod_service1" { 
    backend = "s3" 
    config { 
    region = "eu-west-1" 
    bucket = "uservices_terraform_bucket_name" 
    key = "/states/prod/service1/terraform.tfstate" 

    access_key = "${var.aws_access_key}" 
    secret_key = "${var.aws_secret_key}" 
    token  = "${var.aws_session_token}" 
    } 
} 

Dann würden Sie die Ausgänge der Terraforming Zustände in einem anderen Micro mit

"${data.terraform_remote_state.prod_service1.api_id}" 
+0

dank nutzen können! Ich werde das lesen – Homan

Verwandte Themen