我正在研究Terraform以及如何使用它来设置AWS环境。到目前为止,我有用于设置具有3个公共子网,3个私有子网,一个Internet网关和3个Nat网关的VPC的脚本。但是我对如何在私有子网中部署和重新部署应用程序感到困惑?
在我的场景中,我们使用Spring Boot构建微服务。我们的想法是转移到一个状态,在这个状态下,我们可以将Elastic Load Balancers连接到公共子网,并将我们的应用程序托管在私有子网中的自动缩放组中。但是我找不到任何关于Terraform的好教程,告诉你如何以一种可以从Jenkins重新部署应用程序的方式来实现这一点。
到目前为止,我已经阅读了有关Opsworks和Code Deploy的内容,因此我是否需要使用Terraform来设置这些资源,然后触发部署脚本以将人工制品发送到S3然后重新部署?
答案 0 :(得分:2)
我在Terraform / Chef中使用CodeDeploy。我使用的设置如下:
1)提前手动设置CodeDeploy IAM角色。
2)提前设置CodeDeploy App / Group。
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。
答案 1 :(得分:1)
对于部署/重新部署,您可以使用Hashicorp的另一个解决方案:Nomad。它使用与Terraform相同的语言来编写可以在群集上运行的任务。任务可以是任何内容,例如:重新部署我的所有Web应用程序实例。
答案 2 :(得分:1)
添加此项以便在有人查找更多信息时,可能会发现这很有用。
在Peter的解决方案的基础上,我也在设置Terraform的CodeDeploy IAM角色和CodeDeploy App / Group。这就是我所拥有的:
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"]
}
}