AWS ElasticacheでRedisサーバを立ち上げる
Redisを使用するのでelasticacheのredisでmaster-slaveのレプリケーション構成を作ります。 手順は以下のようになります。
- パラメータグループを新規作成、一部のパラメータを変更する(aof,timeout)
- このパラメータグループを使うノードを作成する(マスターノードとなる)
- このノードをマスターとするレプリケーショングループを作成する
- このレプリケーショングループに所属するノードをつくる(スレーブノードとなる)
AWS Mamagement Consoleからでもさくさくと作れますが、複製を作るかもしれないのでスクリプトにしておきます。
なお、アプリからredisに接続する時のエンドポイントはレプリケーショングループID.xxx.0001.apne1.cache.amazonaws.com:6379
といた具合になります。
master = "#{stage}-master-1" slave = "#{stage}-slave-1" repl_group = "#{stage}-redis-1" subnet_group = "#{stage}-redis-subnet" param_group = "#{stage}-redis26" family_param_group = "redis2.6" availability_zones = ["ap-northeast-1a", "ap-northeast-1c"] node_type = "cache.m1.small" arn = "xxx" security_group = "xxx" subnets = ["subnet-xxx", "subnet-xxx"] redis_version = "2.6.13" client = AWS::ElastiCache::Client.new #パラメータグループの作成 client.create_cache_parameter_group( :cache_parameter_group_name => param_group, :cache_parameter_group_family => family_param_group, :description => "#{param_group}", ) #パラメータ変更 client.modify_cache_parameter_group( :cache_parameter_group_name => param_group, :parameter_name_values => [ {:parameter_name => "timeout", :parameter_value => "300"}, {:parameter_name => "appendonly", :parameter_value => "yes"} ] ) #サブネットグループの作成 client.create_cache_subnet_group( :cache_subnet_group_name => subnet_group, :cache_subnet_group_description => "#{stage} redis subnet group", :subnet_ids => [subnets[0]] ) #マスターノードの作成 client.create_cache_cluster( :cache_cluster_id => master, :num_cache_nodes => 1, :cache_node_type => node_type, :engine => "redis", :engine_version => redis_version, :cache_parameter_group_name => param_group, :cache_subnet_group_name => subnet_group, :security_group_ids => [security_group], :preferred_availability_zone => availability_zones[0], :preferred_maintenance_window => "mon:19:00-mon:20:00", :notification_topic_arn => arn, :auto_minor_version_upgrade => false ) #マスターの作成を待つ while "available" != client.describe_cache_clusters(:cache_cluster_id => master)[:cache_clusters][0][:cache_cluster_status] sleep 30 end #レプリケーショングループの作成 client.create_replication_group( :replication_group_id => repl_group, :primary_cluster_id => master, :replication_group_description => "#{stage} replication group" ) #レプリケーショングループの作成を待つ while "available" != client.describe_replication_groups(:replication_group_id => repl_group)[:replication_groups][0][:status] sleep 30 end #スレーブノードの作成 client.create_cache_cluster( :cache_cluster_id => slave, :replication_group_id => repl_group, )