TerraformでAWS CodeDeployのアプリケーションを作る
リリース時に手で展開しているバッチを、いい加減なんらかのデプロイツールでやりたい。
できる限りTerraformで環境構築したいというのもある。
参考: https://www.terraform.io/docs/providers/aws/r/codedeploy_app.html#
素の状態から簡単にアプリケーション作るなら以下のような感じ。
# アプリケーション名 resource "aws_codedeploy_app" "sample-app" { name = "sample" } # リリース時に参照するconfiguration # 設定項目はリリースの際にどの程度のホストが正常起動している必要があるかのみ resource "aws_codedeploy_deployment_config" "sample-config" { deployment_config_name = "sample-config" minimum_healthy_hosts { type = "FLEET_PERCENT" value = 50 } } # リリース対象のサーバを識別するための設定 # とりあえず `"application":"sample"` というタグがついたEC2インスタンスを対象としている resource "aws_codedeploy_deployment_group" "sample-group" { app_name = "${aws_codedeploy_app.sample-app.name}" deployment_group_name = "sample-group" service_role_arn = "${aws_iam_role.sample_codedeploy.arn}" deployment_config_name = "${aws_codedeploy_deployment_config.sample-config.id}" ec2_tag_set { ec2_tag_filter { type = "KEY_AND_VALUE" key = "application" value = "sample" } } } # 必要なIAMロールの設定 resource "aws_iam_role" "sample_codedeploy" { name = "sample_codedeploy" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "codedeploy.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF } resource "aws_iam_role_policy_attachment" "AWSCodeDeployRole" { policy_arn = "arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole" role = "${aws_iam_role.sample_codedeploy.name}" }