From edf8948d525c46757d2f96781f09c462e50a40ae Mon Sep 17 00:00:00 2001 From: Clint Shryock Date: Mon, 6 Jul 2015 16:19:15 -0600 Subject: [PATCH] provider/aws: Add support for restoring from Redis backup stored in S3 Fixes #2377 --- .../aws/resource_aws_elasticache_cluster.go | 23 +++++++++++++++++++ .../aws/r/elasticache_cluster.html.markdown | 4 ++++ 2 files changed, 27 insertions(+) diff --git a/builtin/providers/aws/resource_aws_elasticache_cluster.go b/builtin/providers/aws/resource_aws_elasticache_cluster.go index d47b275c7dc5..df73e413f2fd 100644 --- a/builtin/providers/aws/resource_aws_elasticache_cluster.go +++ b/builtin/providers/aws/resource_aws_elasticache_cluster.go @@ -105,6 +105,22 @@ func resourceAwsElasticacheCluster() *schema.Resource { }, }, + // A single-element string list containing an Amazon Resource Name (ARN) that + // uniquely identifies a Redis RDB snapshot file stored in Amazon S3. The snapshot + // file will be used to populate the node group. + // + // See also: + // https://github.com/aws/aws-sdk-go/blob/4862a174f7fc92fb523fc39e68f00b87d91d2c3d/service/elasticache/api.go#L2079 + "snapshot_arns": &schema.Schema{ + Type: schema.TypeSet, + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: func(v interface{}) int { + return hashcode.String(v.(string)) + }, + }, + "tags": tagsSchema(), // apply_immediately is used to determine when the update modifications @@ -154,6 +170,13 @@ func resourceAwsElasticacheClusterCreate(d *schema.ResourceData, meta interface{ req.CacheParameterGroupName = aws.String(v.(string)) } + snaps := d.Get("snapshot_arns").(*schema.Set).List() + if len(snaps) > 0 { + s := expandStringList(snaps) + req.SnapshotARNs = s + log.Printf("[DEBUG] Restoring Redis cluster from S3 snapshot: %#v", s) + } + _, err := conn.CreateCacheCluster(req) if err != nil { return fmt.Errorf("Error creating Elasticache: %s", err) diff --git a/website/source/docs/providers/aws/r/elasticache_cluster.html.markdown b/website/source/docs/providers/aws/r/elasticache_cluster.html.markdown index bbc52ac2cf7a..1ede63facd6a 100644 --- a/website/source/docs/providers/aws/r/elasticache_cluster.html.markdown +++ b/website/source/docs/providers/aws/r/elasticache_cluster.html.markdown @@ -65,6 +65,10 @@ names to associate with this cache cluster `false`. See [Amazon ElastiCache Documentation for more information.][1] (Available since v0.6.0) +* `snapshot_arns` – (Optional) A single-element string list containing an +Amazon Resource Name (ARN) of a Redis RDB snapshot file stored in Amazon S3. +Example: `arn:aws:s3:::my_bucket/snapshot1.rdb` + * `tags` - (Optional) A mapping of tags to assign to the resource.