Вы называете политику IAM одинаковой независимо от того, где вы используете модуль. В политиках IAM они однозначно идентифицируются по своему имени, а не по некоторому случайному идентификатору (например, экземплярам EC2, которые идентифицируются как i-...
), поэтому вы не можете иметь 2 политики IAM с одинаковым именем в одной учетной записи AWS.
Вместо этого вы должны добавить некоторую дополнительную уникальность к имени, например, с помощью параметра к модулю, добавленному к имени с чем-то вроде этого:
module "test1" {
source = "./modules"
enviroment = "foo"
}
module "test1" {
source = "./modules"
enviroment = "bar"
}
и в вашем модуле у вас будет следующее:
variable "enviroment" {}
resource "aws_iam_policy" "api_dbaccess_policy" {
name = "lambda_dbaccess_policy_${var.enviroment}"
policy = "${file("${path.module}/api-dynamodb-policy.json")}"
}
В качестве альтернативы, если у вас нет полезной вещи, которую вы можете использовать, такой как name
или environment
и т. Д., Тогда вы можете просто использовать некоторую случайность:
resource "random_pet" "random" {}
resource "aws_iam_policy" "api_dbaccess_policy" {
name = "lambda_dbaccess_policy_${random_pet.random.id}"
policy = "${file("${path.module}/api-dynamodb-policy.json")}"
}