使用Terraform来构建ElastiCache for Redis的验证环境
首先
本文介绍了如何使用Terraform构建ElastiCache for Redis的验证环境的步骤。
整体构成图

在这个环境中,ElastiCache for Redis的集群模式将被禁用。
提前阅读一下资料会很有帮助。
弹性缓存(ElastiCache)的BlackBelt资料
亚马逊云缓存的资源。
Redis客户端的安装步骤
Terraform 的代码和配置
$ tree aws-tf-elasticahe-test-infra
aws-tf-elasticahe-test-infra
├── modules
│ ├── network
│ │ ├── vpc.tf
│ │ ├── internet_gateway.tf
│ │ ├── subnet.tf
│ │ ├── route_table.tf
│ │ ├── variables.tf
│ │ ├── outputs.tf
│ ├── ec2
│ │ ├── instance.tf
│ │ ├── user_data.sh
│ │ ├── eip.tf
│ │ ├── security_group.tf
│ │ ├── iam_role.tf
│ │ ├── ec2_trust_policy.json
│ │ ├── variables.tf
│ │ └── outputs.tf
│ └── elasticahe
│ ├── replication_group.tf
│ ├── subnet_group.tf
│ ├── security_group.tf
│ ├── variables.tf
│ └── outputs.tf
├── main.tf
├── provider.tf
├── terraform.tfvars.org
├── variables.tf
└── outputs.tf
使用Terraform构建的每个资源名称。
elasticahe-test-public-cプライベート サブネット名elasticahe-test-private-a
elasticahe-test-private-cEC2 インスタンス名elasticache-test-ec2EC2 EIP名elasticache-test-eipEC2 セキュリティグループ名elasticache-test-ec2-sgEC2 IAM ロール名elasticache-test-ec2-roleelasticahe クラスター名elasticahe-test-rediselasticahe サブネットグループ名elasticahe-test-redis-subnetelasticahe セキュリティグループ名elasticahe-test-redis-sg
事前准备
・安装Terraform
・安装tfenv
・为执行Terraform所需安装IAM访问密钥和秘密密钥
Terraform的操作确认环境
$ terraform -version
Terraform v1.0.0
on darwin_amd64
+ provider registry.terraform.io/hashicorp/aws v3.52.0
使用Terraform建立环境的步骤。
请假设本步骤在Mac环境下执行。
下载Terraform代码。
git clone https://github.com/okubo-t/aws-tf-elasticahe-test-infra.git
移動到有 Terraform 代碼的目錄中。
$ cd aws-tf-elasticahe-test-infra/
创建一个 terraform.tfvars 文件。
$ cp -p terraform.tfvars.org terraform.tfvars
根据环境的需求,任意修改terraform.tfvars文件中每个参数的设置。(以下键为示例。)
# アクセスキー
aws_access_key = "AKIAIOSFODNN7EXAMPLE"
# シークレットキー
aws_secret_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
# リージョン
aws_region = "ap-northeast-1"
# リソース名のプレフィックス
prefix = "elasticahe"
# リソースの環境
env = "test"
# EC2に SSHアクセスする時の送信元 IPアドレス
remote_ip = "0.0.0.0/0"
# SSH キー名
key_name = "key name"
使用以下命令,进行Terraform的初始设置。
$ terraform init
如果您想要调整每个资源的参数,请修改下方文件中的参数。
module "network" {
source = "./modules/network"
vpc = {
name = "${var.prefix}-${var.env}-vpc"
cidr = "10.0.0.0/16"
}
igw_name = "${var.prefix}-${var.env}-igw"
public_subnet_a = {
name = "${var.prefix}-${var.env}-public-a"
cidr = "10.0.1.0/24"
}
public_subnet_c = {
name = "${var.prefix}-${var.env}-public-c"
cidr = "10.0.2.0/24"
}
private_subnet_a = {
name = "${var.prefix}-${var.env}-private-a"
cidr = "10.0.10.0/24"
}
private_subnet_c = {
name = "${var.prefix}-${var.env}-private-c"
cidr = "10.0.20.0/24"
}
}
# get latest ami Id for amazonlinux2
data "aws_ssm_parameter" "amzn2_ami_latest" {
name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}
module "ec2" {
source = "./modules/ec2"
## network
vpc_id = module.network.vpc_id
subnet_id = module.network.public_subnet_a_id
remote_ip = var.remote_ip
## base
ec2_name = "${var.prefix}-${var.env}-ec2"
ami_id = data.aws_ssm_parameter.amzn2_ami_latest.value
instance_type = "t3.micro"
volume_size = 30
key_name = var.key_name
}
module "elasticahe" {
source = "./modules/elasticahe"
## network
vpc_id = module.network.vpc_id
vpc_cidr_block = module.network.vpc_cidr_block
subnet_ids = [
module.network.private_subnet_a_id,
module.network.private_subnet_c_id,
]
## base for redis(cluster mode disabled)
cluster_name = "${var.prefix}-${var.env}-redis"
node_type = "cache.t3.micro"
engine_version = "5.0.6"
family = "redis5.0"
number_cache_clusters = 2
## not available for t1/t2 instances
automatic_failover_enabled = true
## automatic Failover must also be enabled
multi_az_enabled = true
}
使用以下命令来执行环境部署。
$ terraform apply
部署完成后,记录输出字段的内容。(以下数值仅为示例。)
Apply complete! Resources: 23 added, 0 changed, 0 destroyed.
Outputs:
instance_eip = "xxx.xxx.xxx.xxx"
primary_endpoint_address = "elasticahe-test-redis.xxxxx.ng.0001.apne1.cache.amazonaws.com"
reader_endpoint_address = "elasticahe-test-redis-ro.xxxxxx.ng.0001.apne1.cache.amazonaws.com"
现在,使用Terraform构建环境已经完成了。
您可以使用以下命令来查看已构建的AWS环境组件。
$ terraform state list
一个简单的ElastiCache for Redis验证示例。
通过SSH访问已创建的EC2(instance_eip是记录的Outputs内容)。
$ ssh -i {SSH キー名} ec2-user@{instance_eip}
使用以下命令连接到ElastiCache。(primary_endpoint_address为记录的Outputs内容。)
已安装redis-cli。(参考 module/ec2/user_data.sh)
$ ./redis-stable/src/redis-cli -h {primary_endpoint_address} -p 6379
elasticahe-test-redis.xxxxx.ng.0001.apne1.cache.amazonaws.com:6379>
设定值。
elasticahe-test-redis.xxxxxx.ng.0001.apne1.cache.amazonaws.com:6379> set key1 "value1"
OK
elasticahe-test-redis.xxxxxx.ng.0001.apne1.cache.amazonaws.com:6379> get key1
"value1"

在故障转移期间,尝试连接到ElastiCache。 > 连接失败。
$ ./redis-stable/src/redis-cli -h elasticahe-test-redis.xxxxxx.ng.0001.apne1.cache.amazonaws.com -p 6379
失败转移完成后,重新连接至ElastiCache 并确认值是否保持不变。> 是的,值是保持不变的。
$ ./redis-stable/src/redis-cli -h elasticahe-test-redis.xxxxxx.ng.0001.apne1.cache.amazonaws.com -p 6379
elasticahe-test-redis.xxxxxx.ng.0001.apne1.cache.amazonaws.com:6379> get key1
"value1"
整理残局
请使用以下命令删除通过Terraform创建的AWS环境。
$ terraform destroy
最后
希望能对ElastiCache for Redis的验证有所帮助。