如何将安全组应用于 aws_elasticache_replication_group
Posted
技术标签:
【中文标题】如何将安全组应用于 aws_elasticache_replication_group【英文标题】:how to apply security groups to aws_elasticache_replication_group 【发布时间】:2021-03-16 15:48:47 【问题描述】:我的 terraform 脚本如下:VPC 中的一切
resource "aws_security_group" "cacheSecurityGroup"
name = "$var.devname-$var.namespace-$var.stage-RedisCache-SecurityGroup"
vpc_id = var.vpc.vpc_id
tags = var.default_tags
ingress
protocol = "tcp"
from_port = 6379
to_port = 6379
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
egress
protocol = "-1"
from_port = 0
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
resource "aws_elasticache_parameter_group" "usagemonitorCacheParameterGroup"
name = "$var.devname$var.namespace$var.stage-usagemonitor-cache-parameterGroup"
family = "redis6.x"
resource "aws_elasticache_subnet_group" "redis_subnet_group"
name = "$var.devname$var.namespace$var.stage-usagemonitor-cache-subnetGroup"
subnet_ids = var.vpc.database_subnets
resource "aws_elasticache_replication_group" "replication_group_usagemonitor"
replication_group_id = "$var.devname$var.namespace$var.stage-usagemonitor-cache"
replication_group_description = "Replication group for Usagemonitor"
node_type = "cache.t2.micro"
number_cache_clusters = 2
parameter_group_name = aws_elasticache_parameter_group.usagemonitorCacheParameterGroup.name
subnet_group_name = aws_elasticache_subnet_group.redis_subnet_group.name
#security_group_names = [aws_elasticache_security_group.bar.name]
automatic_failover_enabled = true
at_rest_encryption_enabled = true
port = 6379
如果我取消注释该行
#security_group_names = [aws_elasticache_security_group.bar.name]
我得到 我收到以下错误:
Error: Error creating Elasticache Replication Group: InvalidParameterCombination: Use of cache security groups is not permitted along with cache subnet group and/or security group Ids.
status code: 400, request id: 4e70e86d-b868-45b3-a1d2-88ab652dc85e
我读到如果所有资源都在 VPC 内,我们不必使用 aws_elasticache_security_group。将安全组分配给 aws_elasticache_replication_group 的正确方法是什么???使用子网???怎么样???
【问题讨论】:
【参考方案1】:我做这样的事情,我相信这是分配所需配置的最佳方式:
resource "aws_security_group" "redis"
name_prefix = "$var.name_prefix-redis-"
vpc_id = var.vpc_id
lifecycle
create_before_destroy = true
resource "aws_elasticache_replication_group" "redis"
...
engine = "redis"
subnet_group_name = aws_elasticache_subnet_group.redis.name
security_group_ids = concat(var.security_group_ids, [aws_security_group.redis.id])
您的子网组基本上包括您的 VPC 中将在其中创建 elasticache 复制组的所有私有或公共子网。
一般来说,使用安全组 ID 而不是名称。
我已经编写了一个绝对有效的 terraform 模块,如果您有兴趣,可以通过示例https://github.com/umotif-public/terraform-aws-elasticache-redis 获得它。
【讨论】:
以上是关于如何将安全组应用于 aws_elasticache_replication_group的主要内容,如果未能解决你的问题,请参考以下文章
Cloud Formation 模板将入口规则添加到现有安全组
如何将 EBS 上 Rails 应用程序上的入站安全组限制为仅来自我的应用程序(在 S3 上)并防止其他服务器访问我的 API?