1

J'ai tenté de gérer les versions de mes applications dans mon modèle de terraform en paramétrant le nom. Il s'agissait d'une tentative de création d'une nouvelle version de l'application par notre processus CI à chaque modification du contenu de l'application. De cette façon, dans elasticbeanstalk je pourrais garder une liste de versions d'applications historiques afin que je puisse revenir en arrière etc. Cela n'a pas fonctionné car la même version d'application était constamment mise à jour et en effet j'ai perdu l'histoire de toutes les versions d'application. J'ai ensuite essayé de paramétrer le nom de référence de ressource logique, mais cela n'est pas supporté par terraform.Version de l'application Elastic Beanstalk dans Terraform

resource "aws_elastic_beanstalk_application_version" "${var.build-number}" { 
    name  = "${var.eb-app-name}-${var.build-number}" 
    application = "${var.eb-app-name}" 
    description = "application version created by terraform" 
    bucket  = "${aws_s3_bucket.default.id}" 
    key   = "${aws_s3_bucket_object.default.id}" 
} 

Actuellement ma solution est de gérer mes versions d'applications en dehors de terraform ce qui est décevant car il existe d'autres ressources associées telles que le seau S3 et les autorisations à se soucier.

Ai-je raté quelque chose?

+0

Ma compréhension est, 'var.build-number' est unique, non? Donc, le nom 'name =" $ {var.eb-app-name} - $ {var.build-number} " " sera également unique. Vous pouvez le mettre à jour et le modifier en tant que variable d'entrée. Ensuite, vous pouvez contrôler la version de l'application EB avec elle. Alors, quel est le vrai problème? Tous les détails, s'il vous plaît. – BMW

+1

Comme je l'ai décrit, mon but est de créer une nouvelle version de l'application à chaque fois que '$ {var.eb-app-name} - $ {var.build-number}' change. c'est-à-dire chaque nouvelle construction dans notre processus CI. Cela n'arrive pas. Nous avons constamment une seule version de l'application qui est mise à jour avec le nouveau nom et le nouveau bundle. Cela signifie que nous ne pouvons pas revenir à une version précédente – jaywayco

Répondre

2

En ce qui concerne Terraform, vous ne faites que mettre à jour une seule ressource de version d'application EB. Si vous souhaitez conserver les versions précédentes, vous devrez peut-être essayer d'incrémenter le nombre de ressources gérées par Terraform.

Du haut de ma tête, vous pouvez essayer quelque chose comme ceci:

variable "builds" = { 
    type = list 
} 

resource "aws_elastic_beanstalk_application_version" "default" { 
    count  = "${length(var.builds)}" 
    name  = "${var.eb-app-name}-${element(builds, count.index)}" 
    application = "${var.eb-app-name}" 
    description = "application version created by terraform" 
    bucket  = "${aws_s3_bucket.default.id}" 
    key   = "${aws_s3_bucket_object.default.id}" 
} 

Ensuite, si vous avez une liste de builds il devrait créer une nouvelle version de l'application pour chaque version.

Bien sûr, cela pourrait être dynamique dans la mesure où la variable pourrait être une source de données qui renvoie une liste de toutes vos constructions. Si une source de données n'existe pas déjà, vous pouvez écrire un petit script utilisé comme external data source.

+0

Comment utiliser une source de données de compartiment S3 pour cela? Tous les packages de version sont dans un compartiment S3. Quelle serait la syntaxe d'utiliser ce compartiment comme source de données pour cela? – red888

+0

Vous devez obtenir dynamiquement la liste des objets dans le compartiment S3. Malheureusement, vous ne pouvez pas le faire directement avec Terraform, mais vous pouvez utiliser une source de données externe. Cela vaut probablement la peine de poser une question séparée et de faire référence à celui-ci – ydaetskcoR