4

我正在研究 Terraform 以及如何使用它来设置 AWS 环境。到目前为止,我有用于设置具有 3 个公共子网、3 个私有子网、一个 Internet 网关和 3 个 Nat 网关的 VPC 的脚本。但是,我对如何在私有子网中部署和重新部署应用程序感到困惑?

在我的场景中,我们使用 Spring Boot 构建微服务。我们的想法是转移到一个状态,我们可以将弹性负载均衡器连接到公共子网,并将我们的应用程序托管在私有子网中的自动缩放组中。但是,我找不到任何关于 Terraform 的好的教程来向您展示如何以可以从 Jenkins 重新部署应用程序的方式执行此操作。

到目前为止,我已经阅读了有关 Opsworks 和 Code Deploy 的信息,那么我是否需要使用 Terraform 来设置这些资源,然后触发部署脚本将工件发送到 S3,然后重新部署?

4

3 回答 3

2

我正在将 CodeDeploy 与 Terraform/Chef 一起使用。我正在使用的设置是这样的:

1) 提前手动设置 CodeDeploy IAM 角色。

2) 提前设置 CodeDeploy 应用程序/组。

3) 使用 Terraform 设置实例配置文件,如下所示:

resource "aws_iam_instance_profile" "code_deploy" {
    name = "CodeDeploy"
    roles = ["${var.codedeploy_instance_role}"]
}

4) 在创建实例时使用实例配置文件和正确的标签(与您的 CodeDeploy 应用程序匹配),如下所示:

iam_instance_profile = "${aws_iam_instance_profile.code_deploy.id}"
tags {
   CD = "${var.tag_cd}"
}

5) 使用 Chef(或任何您的供应商)在实例上设置 CodeDeploy。

然后你就可以像往常一样使用 CodeDeploy。

于 2016-05-30T19:25:33.417 回答
2

对于部署/重新部署,您可以使用 Hashicorp 的另一个解决方案:Nomad。它使用与 Terraform 相同的语言来编写可以在集群上运行的任务。任务可以是任何东西,例如:重新部署我所有的 Web 应用程序实例。

于 2016-05-20T07:11:18.493 回答
1

添加这个,以便万一有人在寻找更多信息,可能会发现这很有用。

基于 Peter 的解决方案,我还设置了 Terraform 的 CodeDeploy IAM 角色和 CodeDeploy 应用程序/组。这是我所拥有的:

resource "aws_iam_role" "codedeploy_role_name" {
  name = "codedeploy_role_name"

  assume_role_policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Service": [
            "codedeploy.amazonaws.com",
            "ec2.amazonaws.com"
          ]
        },
        "Action": "sts:AssumeRole"
      }
    ]
}
EOF
}

resource "aws_codedeploy_app" "analytics_app" {
  name = "analytics_app"
}

resource "aws_codedeploy_deployment_config" "analytics_deployment_config" {
  deployment_config_name = "analytics_deployment_config"

  minimum_healthy_hosts {
    type  = "HOST_COUNT"
    value = 2
  }
}

resource "aws_codedeploy_deployment_group" "analytics_group" {
  app_name              = "${aws_codedeploy_app.analytics_app.name}"
  deployment_group_name = "analytics_group"
  service_role_arn      = "${aws_iam_role.codedeploy_role_name.arn}"
  deployment_config_name = "analytics_deployment_config"

  ec2_tag_filter {
    key   = "CodeDeploy"
    type  = "KEY_AND_VALUE"
    value = "analytics"
  }

  auto_rollback_configuration {
    enabled = true
    events  = ["DEPLOYMENT_FAILURE"]
  }

}
于 2017-10-01T17:08:07.800 回答