使用Terraform来构建ElastiCache for Redis的验证环境

首先

本文介绍了如何使用Terraform构建ElastiCache for Redis的验证环境的步骤。

整体构成图

01_elasticache-test-infra.png

在这个环境中,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构建的每个资源名称。

リソース名前(デフォルト)VPC 名elasticache-test-vpcインターネットゲートウェイ名elasticahe-test-igwパブリック サブネット名elasticahe-test-public-a
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的验证有所帮助。

请参考这篇文章。

bannerAds