我正在尝试使用Terraform在Elasticache上启动Redis实例并遇到以下错误。
* 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.
我在GH问题上找到的任何内容都没有帮助。这是我的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
政策,但它仍然说不允许这样做。我在阅读有关API_CreateCacheSecurityGroup的AWS文档的帖子后做到了这一点,并确认这三项政策已包含在AmazonElastiCacheFullAccess
中。
围绕这些资源似乎存在一些错误行为
https://github.com/hashicorp/terraform/issues/10127
对不起,请在这里忍受我。发布这个并完全写出来确实帮助我处理了我的想法。我发现aws_elasticache_security_group
是不必要的,只是决定将["${var.redis_sec_group}"]
直接传递给security_group_ids
aws_elasticache_replication_group
。
对于之前已经处理过此问题的人来说,这似乎是显而易见的,现在对我来说也是如此。但进入这个全新的事实并非如此。所以这不是我得到的权限问题的解决方案。但是,和许多事情一样,我退后一步,质疑我是否真的需要它,答案是否定的。