Я пытаюсь использовать Terraform для запуска экземпляра Redis на Elasticache и сталкиваюсь со следующей ошибкой.
* module.main.module.redis.aws_elasticache_security_group.redis: 1 error(s) occurred:
* aws_elasticache_security_group.redis: Error creating CacheSecurityGroup: InvalidParameterValue: Use of cache security groups is not permitted in this API version for your account.
Ничего из того, что я нашел в вопросах ГР, не помогло. Вот как выглядит мой Terraform (я подтвердил, что переменные передаются правильно):
resource "aws_elasticache_subnet_group" "redis" {
name = "vpc-public-subnet"
description = "subnet where redis will live"
subnet_ids = ["${var.subnet}"]
}
resource "aws_elasticache_security_group" "redis" {
name = "redis-security-group"
security_group_names = ["${var.redis_sec_group}"]
}
resource "aws_elasticache_replication_group" "redis" {
automatic_failover_enabled = true
availability_zones = ["us-east-2a"]
replication_group_id = "${var.environment}-myapp-rep-group-1"
replication_group_description = "redis rep group - ${var.environment} env"
node_type = "cache.t2.micro"
number_cache_clusters = 2
parameter_group_name = "default.redis3.2"
port = 6379
at_rest_encryption_enabled = true
transit_encryption_enabled = true
subnet_group_name = "${aws_elasticache_subnet_group.redis.name}"
security_group_ids = ["${aws_elasticache_security_group.redis.id}"]
lifecycle {
ignore_changes = ["number_cache_clusters"]
}
}
resource "aws_elasticache_cluster" "redis" {
cluster_id = "${var.environment}-myapp"
count = 1
replication_group_id = "${aws_elasticache_replication_group.redis.id}"
}
Я думал, что проблема может быть связана с моим пользователем IAM, поэтому я добавил политику AmazonElastiCacheFullAccess
, но она все еще говорит, что она не разрешена. Я сделал это после прочтения поста в документации AWS о API_CreateCacheSecurityGroup и подтвердил, что эти три политики включены в AmazonElastiCacheFullAccess
.
Похоже, что эти ресурсы содержат ошибки в работе.
https://github.com/hashicorp/terraform/issues/10127
Мое решение
Извините, пожалуйста, потерпите меня здесь. Публикация этого и полное его написание помогли мне обработать мои мысли. Я обнаружил, что aws_elasticache_security_group
не нужны, и просто решил передать ["${var.redis_sec_group}"]
непосредственно в security_group_ids
для aws_elasticache_replication_group
.
Это может показаться очевидным для того, кто уже имел дело с этим раньше, и теперь для меня это тоже так. Но входить в этот новый не было. Так что это не решение той проблемы с разрешениями, которую я получал. Но, как и во многих других вещах, я сделал шаг назад и спросил, действительно ли мне это нужно, и этот ответ был отрицательным.