更改配置后,用Terraform触发用Terraform触发编码的部署的任何方法



我当前正在将我的配置管理迁移到AWS上,以使其更容易插入。我喜欢的是,有可能将滚动更新到一个自动级别组,Terraform等待直到新实例进行服务,然后才能破坏旧的基础架构。这可以与"裸"基础架构一起使用。但是,当更新实际的应用程序实例时,我遇到了问题。该代码是通过AWS编码部署的,我可以告诉Terraform将新自动式组的生成名称用作部署目标,但它并未将代码部署到启动时的新实例。当我手动选择"部署更改部署组"时,部署成功开始。有什么想法如何自动化此步骤?

https://www.terraform.io/docs/provisioners/local-exec.html可能能够做到这一点。夫妇假设

  • 您已经在运行Terraform的地方安装了AWS-CLI之类的东西。
  • 您已经设置了依赖项设置,因此您的编码台阶将是执行的最后一件事之一。如果不是这种情况,您可以使用depends_on https://www.terraform.io/intro/getting-started/depperencies.html#implitic-and-------------------------------------------------------------------------

发布代码后,您只需添加

resource "something" "some_name" {
    # Whatever config you've setup for the resource
    provisioner "local-exec" {
        command = "aws deploy create-deployment"
  }
}

fyi AWS部署创建部署命令尚未完成,因此您必须在环境中使用它,直到您获得触发推出所需的值,但希望这足以让您开始启动。<<<<<<

您可以直接在

中的用户数据中触发部署
resource "aws_launch_configuration" "my-application" {
   name                 = "my-application"
   ...
   user_data            = "${data.template_file.node-init.rendered}"
}
data "template_file" "node-init" {
   template = "${file("${path.module}/node-init.yaml")}"
}

我的node-init.yaml的内容,遵循此文档的建议:https://aws.amazon.com/premiumsupport/knowledge-center/codedeedeploy-agent-launch-configuration/

write_files:
 - path: /root/configure.sh
content: |
    #!/usr/bin/env bash
    REGION=$(curl 169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[a-z]$//')
    yum update -y
    yum install ruby wget -y
    cd /home/ec2-user
    wget https://aws-codedeploy-$REGION.s3.amazonaws.com/latest/install
    chmod +x ./install
    ./install auto
    # Add the following line for your node to update itself
    aws deploy create-deployment --application-name=<my-application> --region=ap-southeast-2 --deployment-group-name=<my-deployment-group> --update-outdated-instances-only
runcmd:
  - bash /root/configure.sh

在此实现中,节点负责触发部署本身。到目前为止,这对我来说非常完美,但是如果ASG同时创建多个实例,则可能导致部署失败(在这种情况下,由于不健康,失败的实例将很快终止)。

当然,您需要在与节点相关的角色触发部署的角色中添加足够的权限。

这仍然是解决方法,如果有人知道解决方案的行为与CFN-Init相同,我很感兴趣。

相关内容

  • 没有找到相关文章

最新更新