3

Я изучаю Terraform и как его использовать для настройки среды AWS. Пока у меня есть сценарии для настройки VPC с 3 общедоступными подсетями, 3 частными подсетями, интернет-шлюзом и 3 шлюзами Nat. Однако я смущен тем, как можно было бы развернуть и перераспределить приложения в частных подсетях?Как развернуть и переустановить приложения с помощью Terraform?

В моем сценарии мы создаем микросервисы, используя Spring Boot. Идея состоит в том, чтобы перейти к состоянию, в котором у нас могут быть эластичные балансировочные нагрузки, подключенные к публичным подсетям, и размещать наши приложения в группах автомасштабирования в частных подсетях. Однако я не могу найти никаких хороших руководств относительно Terraform, которые показывают, как это сделать, чтобы приложения могли быть перераспределены из Jenkins.

До сих пор я читал о Opsworks и Code Deploy, поэтому мне нужно было бы использовать Terraform для настройки этих ресурсов, а затем запускать сценарии развертывания для отправки артефактов на S3, которые затем перераспределяются?

+1

Существует множество способов (и правильных) для достижения этого, вам следует, вероятно, исследовать дальше, а затем задать более конкретный вопрос. Но имейте в виду, что, как правило, terraform используется для части обеспечения среды/сервера (что вы уже сделали), но не так часто для развертывания приложения. –

+0

Я щелкнул здесь, чтобы узнать, есть ли на это новое мышление, но afaik @DusanBajic прав, это IaC, а не управление конфигурацией. – the0ther

ответ

1

Для развертывания/повторного развертывания вы можете использовать другое решение от Hashicorp: Nomad. Он использует тот же язык, что и Terraform, для программных задач, которые можно запускать в кластере. Задачи могут быть любыми, например: передислоцировать все экземпляры моего веб-приложения.

+0

Или Консул, также Hashicorp, может быть использован для запуска пользовательского сценария для развертывания приложения - например, клона из Github. –

2

Я использую CodeDeploy с Terraform/Chef. Настройка, которую я использую, выглядит примерно так:

1) Ручная настройка ролей CodeDeploy IAM раньше времени.

2) Запустите приложение CodeDeploy раньше времени.

3) Настройка профиль экземпляра с помощью терраформировать, как это:

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

4) Используйте Instance профиль и правильные тег (которые соответствуют вашему приложению CodeDeploy) при создании экземпляра, например:

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

5) Используйте Chef (или что-то еще, что у вас есть), чтобы установить CodeDeploy на экземпляр.

Тогда вы можете использовать CodeDeploy как обычно.

+0

Я это тот подход, к которому я сейчас иду, просто пытаюсь настроить конфигурацию сервера облаков, чтобы вытащить конфигурацию в свои частные экземпляры, а затем загрузите их, сообщит вам, как это происходит. –

+0

Хорошо, я. Кстати, если вы хотите рецепт моего шеф-повара для AWS CD, я был бы рад поделиться этим. Это ничего удивительного, просто версия для шеф-повара, если инструкции по установке Amazon. –

+0

Да, конечно, вы можете опубликовать его на GitHub :) мы в настоящее время используем Jenkins, но было бы неплохо иметь его, если нам когда-нибудь понадобится это –

1

Добавление этого для того, чтобы в случае, если кто-то ищет дополнительную информацию, может оказаться полезным.

Основываясь на решении от Peter, я также создаю роли IAM CodeDeploy и приложение и группу CodeDeploy из Terraform. Вот то, что у меня есть:

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"] 
    } 

} 
Смежные вопросы