3

私はTerraformを調べて、それを使ってAWS環境をセットアップする方法を検討しています。これまでは、3つのパブリックサブネット、3つのプライベートサブネット、インターネットゲートウェイ、3つのNatゲートウェイでVPCを設定するためのスクリプトを用意しました。しかし私は、プライベートサブネットにアプリケーションを展開して再デプロイする方法について混乱していますか?Terraformでアプリケーションを配備および再配備する方法は?

私のシナリオでは、Springブートを使用してマイクロサービスを構築します。アイデアは、Elastic Load Balancerをパブリックサブネットに接続して、プライベートサブネット内のオートスケールグループでアプリケーションをホストできる状態に移行することです。しかし、私は、アプリケーションをJenkinsから再配備できるようにする方法を示すTerraformに関する良いチュートリアルは見つかりません。

これまでOpsworksとCode Deployについては、Terraformを使用してこれらのリソースを設定し、次に展開スクリプトを起動してS3にアーティファクトを再配布する必要がありますか?

+1

これを達成するためにはさまざまな方法がありますが、おそらくさらに調査し、さらに具体的な質問をしてください。しかし、一般的に、テラフォームは環境/サーバプロビジョニングのために使用されていますが、アプリの導入にはそれほど頻繁ではありません。 –

+0

私はこれについて新しい考えがあるかどうかを見るためにここをクリックしましたが、afaik @DusanBajicは正しいです、それはIaCではなくConfig Managementです。 – the0ther

答えて

1

展開/再デプロイメントの場合は、別の解決策をHashicorp:Nomadで使用できます。 Terraformと同じ言語を使用して、クラスタで実行できるタスクをプログラミングします。タスクは何でもかまいません。たとえば、すべてのWebアプリケーションインスタンスを再デプロイします。

+0

また、HusicorpのConsulもカスタムスクリプトを起動してアプリをデプロイすることができます。例えば、Githubのクローンです。 –

2

私はテラフォーム/シェフとCodeDeployを使用しています。 CodeDeploy IAMロール前もって

1)を手動でセットアップ:私が使用しているセットアップは、次のようなものになります。

2)CodeDeployのアプリケーション/グループを事前に設定します。

3)セットアップこのようなテラフォームを使用してインスタンス・プロファイル、:

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)インスタンスでCodeDeployを設定するには、シェフ(またはプロビジョニング担当者が何であれ)を使用します。

次に、CodeDeployを通常のように使用するとよいでしょう。

+0

Iこれはあなたがそれが行く方法を知っているようになる、ちょうど私のプライベートインスタンスにして設定を引くし、それらをブートストラップするために、クラウドのconfigサーバの設定を取得しようと、私は現在のために行くよなアプローチです。 –

+0

Btw、AWS CDのシェフレシピが必要な場合は、それを分かち合うことができます。 Amazonのインストール手順があれば、それは素晴らしいことではなく、シェフのバージョンです。 –

+0

GitHubに投稿することができます:私たちは現在Jenkinsを使用していますが、 –

1

これを追加すると、誰かが詳細情報を探している場合に便利です。

Peterからのソリューションに基づいて、私はCodeDeploy IAMロールと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"] 
    } 

} 
関連する問題