0.9.11.
data "aws_ecs_task_definition" "my-service" {
task_definition = "${aws_ecs_task_definition.my-service.family}"
}
resource "aws_ecs_task_definition" "my-service" {
family = "${var.environment_name}-${var.service_name}-${var.instance_name}"
network_mode = "bridge"
container_definitions = "${data.template_file.my-service.rendered}"
}
resource "aws_ecs_service" "my-service" {
...
#Track the latest ACTIVE revision
task_definition = "${aws_ecs_task_definition.my-services.family}:${max("${aws_ecs_task_definition.my-service.revision}", "${data.aws_ecs_task_definition.my-service.revision}")}"
...
}
리μμ€κ°μλ κ²½μ° μ aws_ecs_task_definition μμ± κ·Έλ μ§ μμΌλ©΄ μ΅μ aws_ecs_task_definition λ²μ μ¬μ©
μ΄ μ½λλ Terraform v0.9.2μμ μ μλν©λλ€.
: μμ
μ μλ₯Ό κ°μ Έ μ€μ§ λͺ»νμ΅λλ€. ClientException : μμ
μ μλ₯Ό μ€λͺ
ν μ μμ΅λλ€.
μν μ½λ : 400, μμ² ID : "my-service"
terraform apply
terraform 1.0μμλ μ¬ν
λλ κ°μ λ¬Έμ κ° λ°μν©λλ€! ν₯λ―Έλ‘μ΄ μ μ λ°λλΌ μν (μμ ν λΉμ΄ μμ)λ₯Ό μ¬μ©νμ¬ κ²μμ μλ ν λ μμλλ‘ μμ μ κ³ννκ³ μ μ©νλ€λ κ²μ λλ€. μλνμ§ μλ κΈ°μ‘΄ μν νμΌμ΄μμ λλ§ λ°μν©λλ€.
λ κΆκΈν κ²μ 리μμ€κ° μ΄λ»κ² λ μν νμΌμ μ‘΄μ¬νμ§ μμ§λ§ μ€ν¨νλ€λ κ²μ λλ€. π€
λλ²κΉ
μ λν΄ μμΈν μ΄ν΄λ³΄λ©΄ func dataSourceAwsEcsTaskDefinitionRead
κ° λ°λλΌ νλ‘μ νΈμμ νΈμΆλμ§ μκ³ κΈ°μ‘΄ νλ‘μ νΈμμ νΈμΆλλ€λ κ²μ μκ²λμμ΅λλ€. μ΄κ²μ ν
λΌ νΌ ν¨ν΄μΌλ‘ 보μ
λλ€. λ¨Όμ κ°λ¨ν 리μμ€ (보μ κ·Έλ£Ή)λ₯Ό λ§λ λ€μ μ‘°νλ₯Ό μλνμ¬μ΄λ₯Ό μ¬ν ν μμμμ΅λλ€. 리μμ€κ° μν νμΌ (μ΄ κ²½μ° λ³΄μ κ·Έλ£Ή)μ μ΄λ―Έμμ λ κ³νμ΄ μ€ν¨νμ΅λλ€. μ‘΄μ¬νμ§ μλ 보μ κ·Έλ£Ήμ μ‘°ννλ λ€λ₯Έ λ°μ΄ν° μμ€λ μμ±νμ¬ λ΄ κ°μ€μ νμΈνμ΅λλ€. μ΄μ λν κ³νλ μ€ν¨νμ΅λλ€.
λ°μ΄ν° μΈμ€ν΄μ€μ μΈμμ μμ§ μμ±λμ§ μμ 리μμ€μ μμ±κ³Ό κ°μ κ³μ° λ κ°μ λν μ°Έμ‘°κ° ν¬ν¨λμ§ μμ κ²½μ° λ°μ΄ν° μΈμ€ν΄μ€λ₯Ό μ½κ³ ν΄λΉ μνκ° Terraformμ "μλ‘ κ³ μΉ¨"λ¨κ³ λμ μ λ°μ΄νΈλ©λλ€.μ΄ λ¨κ³λ κΈ°λ³Έμ μΌλ‘ μ΄μ μ μ€νλ©λλ€. κ³ν λ§λ€κΈ°. μ΄λ κ²νλ©΄ κ²μλ λ°μ΄ν°λ₯Ό κ³ν μ€μ μ¬μ©ν μ μμΌλ©° diffλ μ»μ μ€μ κ°μ νμν©λλ€.
λ°μ΄ν° μΈμ€ν΄μ€ μΈμλ κ³μ° λ κ°μ μ°Έμ‘° ν μ μμΌλ©°,μ΄ κ²½μ° λͺ¨λ μΈμκ° μ μ λ λκΉμ§ μΈμ€ν΄μ€ μ체μ μμ±μ νμΈν μ μμ΅λλ€. μ΄ κ²½μ° λ°μ΄ν° μΈμ€ν΄μ€ μλ‘ κ³ μΉ¨μ "μ μ©"λ¨κ³κΉμ§ μ°κΈ°λλ©° λ°μ΄ν° μΈμ€ν΄μ€ μμ±μ λͺ¨λ 보κ°μ κ°μ΄ μμ§ μλ €μ§μ§ μμκΈ° λλ¬Έμ κ³νμμ "κ³μ° λ¨"μΌλ‘ νμλ©λλ€.
μ΄κ²μ λμκ² λ λ°°λ‘ ν₯λ―Έ λ‘μ΅λλ€. μμ λ¬Έμλ₯Ό κΈ°λ°μΌλ‘ data.aws_ecs_task_definition.my-service
μ΄ aws_ecs_task_definition.my-service.family
μ μμ‘΄νκΈ° λλ¬Έμ OPμ ꡬμ±μ΄ μ€ν¨ν΄μλ μλμ§λ§ κ³ν * λ¨κ³μμ μ€ν¨νμ΅λλ€ (λ΄ λ¬Έμ λ λ§μ°¬κ°μ§μ
λλ€). μλ§λ μ΄κ²μ 곡κΈμ μμ€μ΄ μλ ν
λΌ νΌ μμ€μ λ²κ·ΈμΌκΉμ?
@radeksimko μ°λ¦¬κ° μ΄κ²μ λΉμ μ λμ μ»μ μ μμ΅λκΉ? ν λΌ νΌ λ¬Έμ κ° μλ κ²½μ° λ©μΈ μ μ₯μλ₯Ό μ€νΈνκ³ μΆμ§ μμ΅λλ€.
μ΄ λ¬Έμ λλ³΄κ³ μμ΅λλ€.
μ€μ λ‘ λμΌν νμΌμμ λμΌν λ°μ΄ν°μ 리μμ€κ° νμνμ§ μμ΅λλ€. λλ λ°μ΄ν°λ₯Ό μ£Όμ μ²λ¦¬νμΌλ©° μ΄μ λ μ μλνλ κ² κ°μ΅λλ€.
λ°μ΄ν° μμ€μ "depends_on"μ μΆκ°νμ¬μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μμμμ΅λλ€.
resource "aws_ecs_task_definition" "task" {
...
}
data "aws_ecs_task_definition" "task" {
depends_on = [ "aws_ecs_task_definition.task" ]
...
}
λμμ΄ λμκΈ°λ₯Ό λ°λλλ€.
μ€μ λ‘ λ²κ·Έκ° μλλ©° @parruda μ μ루μ
μ΄ μ νν©λλ€. resource aws_ecs_service
λ° data aws_ecs_task_definition
λͺ¨λ κ΄λ ¨ resource aws_ecs_task_definition
μ΄ (κ°) μ΄λ―Έ μμ±λμ΄ μμ΄μΌνλ€κ³ μμν©λλ€.
λμΌν λ¬Έμ κ° λ°μνκΈ° λλ¬Έμ @KIVagant κ° μλ―Έκ° μμ΅λλ€.
data
κ°μ²΄μ ν¨κ» μ¬μ©λλ resource
νμμ λν Terraform λ¬Έμλμ΄λ₯Ό λ°μνλλ‘ μ
λ°μ΄νΈν΄μΌνλ€κ³ λ§νκ³ μΆμ΅λλ€. νμ¬ λ¬Έμλ 리μμ€κ° μ‘΄μ¬νμ§ μμΌλ©΄ μ€ν¨νμ§ μμμΌ ν¨μ μμν©λλ€.
κ·Έλ μ§ μμΌλ©΄ @parruda μ루μ μ΄ λμκ² μλ―Έκ° μμ΅λλ€.
Ya λλ μλ§λ λ΅μ₯νκΈ° μ μ μμ μ μλν΄μΌνμ§λ§ μλνμ§λ§ μ§μμ μΈ λ³κ²½ κ°μ§κ° λ°μν©λλ€.
μμ / μνλ κ²°κ³Όκ° μλ
@parruda μ μμ μ΄ μ μκ² depends_on
κ° λͺ¨λ tf μ€νμμ λ΄ μμ
μ μμ λν μ
λ°μ΄νΈλ₯Ό νΈλ¦¬κ±°ν©λλ€. μ΄λ₯Ό λ°©μ§νκΈ°μν λͺ¨λ² μ¬λ‘κ° μμ΅λκΉ? Terraform v0.11.5λ₯Ό μ¬μ©νκ³ μμ΅λλ€.
λ° provider.aws v1.10.0.
@dendrochronology , λλ λ€μκ³Ό κ°μ΄ μ¬μ©ν©λλ€.
data "aws_ecs_task_definition" "blabla" {
task_definition = "${aws_ecs_task_definition.blabla.family}"
depends_on = [ "aws_ecs_task_definition.blabla" ]
}
resource "aws_ecs_task_definition" "..." {
family = "..."
task_role_arn = "${aws_iam_role.blabla.arn}"
container_definitions = "${data.template_file.task_definition.rendered}"
depends_on = [
"data.template_file.task_definition",
]
lifecycle {
ignore_changes = [
"container_definitions" # if template file changed, do nothing, believe that human's changes are source of truth
]
}
}
resource "aws_ecs_service" "blabla" {
name = "blabla"
cluster = "${aws_ecs_cluster.cluster_name.id}"
task_definition = "${aws_ecs_task_definition.blabla.family}:${max("${aws_ecs_task_definition.blabla.revision}", "${data.aws_ecs_task_definition.blabla.revision}")}"
desired_count = 1
iam_role = "${aws_iam_role.ecs_service.name}"
// Not compatible with placement_constraints:distinctInstance, commented
// placement_strategy {
// type = "binpack"
// field = "cpu"
// }
placement_constraints {
type = "distinctInstance"
}
load_balancer {
elb_name = "${aws_elb.blabla.name}"
container_name = "internal"
container_port = "${var.blabla_port}"
}
depends_on = [
"aws_iam_role.ecs_service",
"aws_elb.blabla",
"aws_iam_role.blabla",
"aws_ecs_task_definition.blabla"
]
lifecycle {
ignore_changes = ["task_definition"] # the same here, do nothing if it was already installed
}
}
@KIVagant μ , μ λ ignore_changes
λΌμ΄ν μ¬μ΄ν΄ νν¬λ₯Ό κ°μ§κ³ λκ² μ΅λλ€!
μ, μ’μ, λλ κ·Έκ±Έ κ°μ§κ³ λκ². κ·Έλ¬λ©΄ μμ
μ μ ν
νλ¦Ώ νμΌμ λ³κ²½ν λ μλμΌλ‘ taint
ν΄μΌν©λκΉ?
κ·Έκ²μ λΉμ μ λͺ©νμ λ¬λ € μμ΅λλ€. μ°λ¦¬μ κ²½μ° ν νλ¦Ώμλ Terraformμ΄ μ²μ μ€μΉ ν ν μ±μ°λ λΉλ°μ λν λΉ κ³΅κ°μ΄ ν¬ν¨λμ΄ μμΌλ©° κΈ°μ‘΄ μμ μ μλ₯Ό λ³κ²½νλ κ²μ νμ©νμ§ μμ΅λλ€. κ·Έλ¦¬κ³ μ²μ μ€μΉ ν μλμΌλ‘ μ μ΄ν©λλ€.
@dendrochronology μλ΅μ΄ μμ΄μ μ£μ‘ν©λλ€. 맀 μ€νλ§λ€ μμ μ μλ₯Ό μ λ°μ΄νΈνκΈ°λ₯Ό μνκΈ° λλ¬Έμ μ€μ λ‘ λ¬Έμ λ₯Ό λ°κ²¬νμ§ λͺ»νμ΅λλ€. ν΄κ²°μ± μ μ°ΎμΌ μ ¨κΈ°λ₯Ό λ°λλλ€.
μ΄κ²μ μ¬μ ν ββλ¬Έμ μΈ κ² κ°μ΅λλ€. λ¬Έμμμλ κ²μ μ¬μ©νλ©΄ λ€μκ³Ό κ°μ κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€.
Error: Error running plan: 1 error(s) occurred:
* module.frontshop_staging.data.aws_ecs_task_definition.frontshop: 1 error(s) occurred:
* module.frontshop_staging.data.aws_ecs_task_definition.frontshop: Resource 'aws_ecs_task_definition.frontshop' not found for variable 'aws_ecs_task_definition.frontshop.family'
μ μΌν λ³κ²½ μ¬νμ μ΄κ²μ΄ λͺ¨λ λ΄λΆμ μκ³ μ΄λ¦μ΄ frontshopμ΄λΌλ κ²μ
λλ€. λͺ¨λκ³Ό κ΄λ ¨μ΄ μμ΅λκΉ?
λλ λν dependent_onμΌλ‘ μλνμ§λ§ μλνμ§ μμ΅λλ€. 리μμ€λ₯Ό μμ±νκΈ° μν΄ μ²« λ²μ§Έ λ²μ μ μ μ©ν λ€μ maxμ ν¨κ» λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ μ΅μ λ²μ μ κ°μ Έμ¬ μκ°μ
λλ€.
μ¬μ€, λ΄κ° λ§ν κ²μ κ±°μ§μ
λλ€. 컨ν
μ΄λ μ μμ μλͺ»λ JSONμ΄ μκ³ λ΄ κ²μ΄ heredoc ꡬ문μ μ¬μ©νμ§ μκ³ ν
νλ¦Ώμ΄μλ json νμΌμ μ¬μ©νλ κ²½μ° λ¬Έμ κ°μλ κ²μ²λΌ 보μ΄λ©° 컨ν
μ΄λμ λ°°μ΄μ΄μ΄μΌν©λλ€. λ¨ νλμ μ£Όμ κ°μ²΄.
μ¬κΈ°μμ λ΄κ° μ°Ύμ κ³³ https://github.com/terraform-providers/terraform-provider-aws/issues/2026
μ’μ μ¬λ @jaysonsantos. μ κ²½μ°μλ json ꡬ문 μ€λ₯λ‘ μΈν΄ μ€λ₯κ° λ°μνμ΅λλ€.
곡κΈμλ₯Ό 1.59 λ° terraform 11.11λ‘ μ κ·Έλ μ΄λν΄λ μ¬μ νμ΄ μ€λ₯κ° νμλ©λλ€.
terraform destroyκ° μ€λ₯μμ΄ μλ£λλ©΄ dependent_onμμ΄ μ μμ μΌλ‘ μλν©λλ€.
κ·Έλ¬λ μλ₯Ό λ€μ΄ terraform destroyκ° λ€λ₯Έ μμ μμ μ€ν¨νλ κ²½μ° :
Error removing user, role, or group list from IAM Policy Detach bootstrap-iam-group-attach1:
β NoSuchEntity
ecs μλΉμ€μ κ΄λ ¨μ΄ μμ΅λλ€. ν λΌ νΌμ μ€ννλ©΄ λ λ²μ§Έλ‘ νκ΄΄λλ λ¬Έμ κ° ν΄κ²°λ©λλ€. λ λ²μ§Έ ν¨μ€μμ
Failed getting task definition ClientException: Unable to describe task definition.
μ€λ₯κ° λ€μ λ°μνκ³ μν νμΌμ΄ μμλμμ΅λλ€.
μ΄ λ¬Έμ λ μ μκ² λͺ ννμ§ μμ΅λλ€. μΌλΆ μ¬λλ€μ μμ μ μλ₯Ό μν΄ λ°μ΄ν° μμ€μμ dependent_onμ μ¬μ©ν΄μλ μλλ€κ³ μ£Όμ₯νλ κ²μ²λΌ 보μ΄μ§λ§ μ²μ μ€ννλ©΄ 리μμ€κ° μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ νμ μ€ν¨ν©λλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ λ€λ₯Έ λͺ¨λ μ¬λμμν μ°Έκ³ μλ£ : @skorfmann μμ΄ MR https://github.com/terraform-providers/terraform-provider-aws/pull/10247μ μ€λͺ
λμ΄ μμΌλ©° aws_ecs_task_definition.self.revision
μ¬μ©νλ λ λμ ν΄κ²° λ°©λ² κ³Ό κ·Έ μ΄μ λ₯Ό μ€λͺ
ν©λλ€. λ
Όμ λ depends_on
μ κ·Ό λ°©μμ λΉμ μ΄ μνλ κ²μ΄ μλλλ€!
μ΄κ²μ μμμ΄ μ²μμ λ‘€μμ λ λ μμ μ μκ°μλ λ¬Έμ λ₯Ό ν΄κ²°νλ κ²μ λλ€. "task_family"λ₯Ό μ§μ μ°Έμ‘°νλ λ¬Έμν μμ λ μλνμ§ μκ³ μ²μ μ μ© ν λ μ€λ₯μ ν¨κ» μ’ λ£λ©λλ€. μ΄ νΈ # 1274 μ°Έμ‘°
κ·Έ μ΄μ λ λ°μ΄ν° μμ€κ° λλ½ λ λ°μ΄ν°λ₯Ό μ μμ μΌλ‘ μ²λ¦¬νμ§ μκΈ° λλ¬Έμ λλ€. λΆννλ μ¬κΈ°μ μΈκΈ λλλ‘ hashicorp / terraform # 16380 (μ£Όμ)μ ν΄κ²°λμ§ μμ΅λλ€. μ μ λ ν΄κ²° λ°©λ² μ€ νλλ
depends_on
μ μΆκ°νλ κ²μ λλ€. κ·Έλ¬λ μ΄λ‘ μΈν΄ μ€μ λ‘ λ³κ²½λμ§λ μλλΌλ ν λΌ νΌ κ³ν μΆλ ₯μ μ μ¬μ μΈ λ³κ²½μ΄ λ°μν©λλ€. λν Terraform λ¬Έμ μ체μ μν΄ κΆμ₯λμ§ μμ΅λλ€.μ΄ μ€λ λλ λͺ κ°μ§ λ€λ₯Έ ν΄κ²° λ°©λ²μ μΈκΈνμ§λ§ κ·Έμ€ μ΄λ κ²λ μ μ ν hashicorp / terraform # 16380μΌλ‘ 보μ΄μ§ μμ΅λλ€.
aws_ecs_task_definition.self.revision
λ 리μμ€κ° μμ± λ νμ λ§ ββμ°Έμ‘° ν μ μμ΅λλ€ (μ½λμ μ΄λ―Έμλ ν¨λ°λ¦¬μ λ¬λ¦¬). λΆλͺ ν μ΄κ²μ Terraformμ΄ μ’ μμ±μ μ¬λ°λ₯΄κ² ν΄κ²°νκ³ λ°μ΄ν° μμ€κ° μμλλ‘ μλνλλ‘ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
λ°μ΄ν° μμ€μ "depends_on"μ μΆκ°νμ¬μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μμμμ΅λλ€.
λμμ΄ λμκΈ°λ₯Ό λ°λλλ€.