Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何使用Terraform更新AWS ECS群集实例?_Amazon Web Services_Terraform_Amazon Ecs_Terraform Provider Aws - Fatal编程技术网

Amazon web services 如何使用Terraform更新AWS ECS群集实例?

Amazon web services 如何使用Terraform更新AWS ECS群集实例?,amazon-web-services,terraform,amazon-ecs,terraform-provider-aws,Amazon Web Services,Terraform,Amazon Ecs,Terraform Provider Aws,我有一个使用Terraform创建的现有ECS集群(EC2)。我想使用Terraform在这些EC2实例上安装一些软件。我们的业务需求之一是,我们将无法销毁和重新创建实例,我们必须在现有实例上这样做 我应该如何处理这个问题?您可以运行附加到“始终触发”的,以始终针对对象运行某些流程,但我强烈建议您重新考虑您的流程 您的ECS集群应该被认为是完全短暂的,就像运行在它们上面的容器一样。当您想要更新ECS实例时,销毁和替换实例(理想情况下是在自动缩放组中)是您想要做的事情,因为它大大简化了事情。您可以

我有一个使用Terraform创建的现有ECS集群(EC2)。我想使用Terraform在这些EC2实例上安装一些软件。我们的业务需求之一是,我们将无法销毁和重新创建实例,我们必须在现有实例上这样做

我应该如何处理这个问题?

您可以运行附加到“始终触发”的,以始终针对对象运行某些流程,但我强烈建议您重新考虑您的流程

您的ECS集群应该被认为是完全短暂的,就像运行在它们上面的容器一样。当您想要更新ECS实例时,销毁和替换实例(理想情况下是在自动缩放组中)是您想要做的事情,因为它大大简化了事情。您可以阅读有关不可变基础结构的更多信息

如果您绝对不能做到这一点,那么您最好完全使用另一个工具,例如Ansible。您可以选择使用上面提到的
null_资源
provisioner,通过Terraform启动它,该资源看起来如下所示:

resource "null_resource" "on_demand_provisioning" {
  triggers {
    always = "${uuid()}"
  }

  provisioner "local-exec" {
    command = "ansible-playbook -i inventory.yml playbook.yml --ssh-common-args='-o StrictHostKeyChecking=no'"
  }
}

听起来您的组织正在尝试在docker和ECS中运行其服务。我还假设您正在使用AWS ECR来托管docker图像(尽管技术上并不重要)

创建ECS群集时,它最初为空。如果您要再次运行terraform模板,它应该会显示您没有要应用的更新。为了进行下一步,您需要定义ecs服务ecs任务定义。这可以在现有的terraform模板、全新模板中完成,也可以手动完成(aws web控制台或awscli)。既然你已经在使用terraform,我想你会继续使用它。就我个人而言,我会把所有的东西都放在一个模板中,但这还是取决于你

ecs服务本质上是ecs任务的运行时配置 ecs任务定义是要运行的一组docker容器。在最简单的情况下,它是一个docker容器。在这里,您将指定要使用的docker映像、docker容器的CPU+RAM数量等

为了更新正在运行的ecs服务而不让EC2节点停机,您只需要在terraform模板(当然是运行terraform)的ecs任务定义部分更新docker映像

现在有了所有这些背景信息,你就可以向你的地形模板中添加一个

由于您没有提供模板,我无法确切说明应该如何设置,但下面可以找到运行nginx的完整ECS集群的terraform模板示例 有关更多示例,请访问