2015-11-09 23:44:26 +01:00
|
|
|
package aws
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2015-11-10 17:24:33 +01:00
|
|
|
"log"
|
2015-12-21 21:46:25 +01:00
|
|
|
"os"
|
2015-11-09 23:44:26 +01:00
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
|
|
"github.com/aws/aws-sdk-go/service/firehose"
|
2016-06-30 22:03:31 +02:00
|
|
|
"github.com/hashicorp/terraform/helper/acctest"
|
2015-11-09 23:44:26 +01:00
|
|
|
"github.com/hashicorp/terraform/helper/resource"
|
|
|
|
"github.com/hashicorp/terraform/terraform"
|
|
|
|
)
|
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
func TestAccAWSKinesisFirehoseDeliveryStream_s3basic(t *testing.T) {
|
2015-11-09 23:44:26 +01:00
|
|
|
var stream firehose.DeliveryStreamDescription
|
2016-06-30 22:03:31 +02:00
|
|
|
ri := acctest.RandInt()
|
|
|
|
config := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_s3basic,
|
|
|
|
ri, os.Getenv("AWS_ACCOUNT_ID"), ri, ri, ri)
|
2015-11-10 17:24:33 +01:00
|
|
|
|
|
|
|
resource.Test(t, resource.TestCase{
|
2016-06-30 22:03:31 +02:00
|
|
|
PreCheck: testAccKinesisFirehosePreCheck(t),
|
2015-11-10 17:24:33 +01:00
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckKinesisFirehoseDeliveryStreamDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
2016-11-14 22:18:11 +01:00
|
|
|
{
|
2015-11-10 17:24:33 +01:00
|
|
|
Config: config,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream),
|
2016-08-08 02:21:18 +02:00
|
|
|
testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream, nil, nil, nil),
|
2015-11-10 17:24:33 +01:00
|
|
|
),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2016-09-02 11:50:04 +02:00
|
|
|
func TestAccAWSKinesisFirehoseDeliveryStream_s3WithCloudwatchLogging(t *testing.T) {
|
|
|
|
var stream firehose.DeliveryStreamDescription
|
|
|
|
ri := acctest.RandInt()
|
|
|
|
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
PreCheck: testAccKinesisFirehosePreCheck(t),
|
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckKinesisFirehoseDeliveryStreamDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
2016-11-14 22:18:11 +01:00
|
|
|
{
|
2016-09-02 11:50:04 +02:00
|
|
|
Config: testAccKinesisFirehoseDeliveryStreamConfig_s3WithCloudwatchLogging(os.Getenv("AWS_ACCOUNT_ID"), ri),
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream),
|
|
|
|
testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream, nil, nil, nil),
|
|
|
|
),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2015-11-10 17:24:33 +01:00
|
|
|
func TestAccAWSKinesisFirehoseDeliveryStream_s3ConfigUpdates(t *testing.T) {
|
|
|
|
var stream firehose.DeliveryStreamDescription
|
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
ri := acctest.RandInt()
|
|
|
|
preConfig := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_s3basic,
|
|
|
|
ri, os.Getenv("AWS_ACCOUNT_ID"), ri, ri, ri)
|
2015-12-21 21:46:25 +01:00
|
|
|
postConfig := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_s3Updates,
|
2016-06-30 22:03:31 +02:00
|
|
|
ri, os.Getenv("AWS_ACCOUNT_ID"), ri, ri, ri)
|
|
|
|
|
|
|
|
updatedS3DestinationConfig := &firehose.S3DestinationDescription{
|
|
|
|
BufferingHints: &firehose.BufferingHints{
|
|
|
|
IntervalInSeconds: aws.Int64(400),
|
|
|
|
SizeInMBs: aws.Int64(10),
|
|
|
|
},
|
|
|
|
}
|
2015-11-10 17:24:33 +01:00
|
|
|
|
2015-11-09 23:44:26 +01:00
|
|
|
resource.Test(t, resource.TestCase{
|
2016-06-30 22:03:31 +02:00
|
|
|
PreCheck: testAccKinesisFirehosePreCheck(t),
|
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckKinesisFirehoseDeliveryStreamDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
2016-11-14 22:18:11 +01:00
|
|
|
{
|
2016-06-30 22:03:31 +02:00
|
|
|
Config: preConfig,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream),
|
2016-08-08 02:21:18 +02:00
|
|
|
testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream, nil, nil, nil),
|
2016-06-30 22:03:31 +02:00
|
|
|
),
|
|
|
|
},
|
|
|
|
|
2016-11-14 22:18:11 +01:00
|
|
|
{
|
2016-06-30 22:03:31 +02:00
|
|
|
Config: postConfig,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream),
|
2016-08-08 02:21:18 +02:00
|
|
|
testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream, updatedS3DestinationConfig, nil, nil),
|
2016-06-30 22:03:31 +02:00
|
|
|
),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestAccAWSKinesisFirehoseDeliveryStream_RedshiftConfigUpdates(t *testing.T) {
|
|
|
|
var stream firehose.DeliveryStreamDescription
|
|
|
|
|
|
|
|
ri := acctest.RandInt()
|
|
|
|
preConfig := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_RedshiftBasic,
|
|
|
|
ri, os.Getenv("AWS_ACCOUNT_ID"), ri, ri, ri, ri)
|
|
|
|
postConfig := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_RedshiftUpdates,
|
|
|
|
ri, os.Getenv("AWS_ACCOUNT_ID"), ri, ri, ri, ri)
|
|
|
|
|
|
|
|
updatedRedshiftConfig := &firehose.RedshiftDestinationDescription{
|
|
|
|
CopyCommand: &firehose.CopyCommand{
|
|
|
|
CopyOptions: aws.String("GZIP"),
|
2015-12-21 21:46:25 +01:00
|
|
|
},
|
2016-06-30 22:03:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
PreCheck: testAccKinesisFirehosePreCheck(t),
|
2015-11-09 23:44:26 +01:00
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckKinesisFirehoseDeliveryStreamDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
2016-11-14 22:18:11 +01:00
|
|
|
{
|
2016-06-30 22:03:31 +02:00
|
|
|
Config: preConfig,
|
2015-11-10 17:24:33 +01:00
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream),
|
2016-08-08 02:21:18 +02:00
|
|
|
testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream, nil, nil, nil),
|
2015-11-10 17:24:33 +01:00
|
|
|
),
|
|
|
|
},
|
|
|
|
|
2016-11-14 22:18:11 +01:00
|
|
|
{
|
2015-11-10 17:24:33 +01:00
|
|
|
Config: postConfig,
|
2015-11-09 23:44:26 +01:00
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream),
|
2016-08-08 02:21:18 +02:00
|
|
|
testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream, nil, updatedRedshiftConfig, nil),
|
|
|
|
),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestAccAWSKinesisFirehoseDeliveryStream_ElasticsearchConfigUpdates(t *testing.T) {
|
|
|
|
var stream firehose.DeliveryStreamDescription
|
|
|
|
|
|
|
|
ri := acctest.RandInt()
|
|
|
|
awsAccountId := os.Getenv("AWS_ACCOUNT_ID")
|
|
|
|
preConfig := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_ElasticsearchBasic,
|
|
|
|
ri, awsAccountId, ri, ri, ri, awsAccountId, awsAccountId, ri, ri)
|
|
|
|
postConfig := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_ElasticsearchUpdate,
|
|
|
|
ri, awsAccountId, ri, ri, ri, awsAccountId, awsAccountId, ri, ri)
|
|
|
|
|
|
|
|
updatedElasticSearchConfig := &firehose.ElasticsearchDestinationDescription{
|
|
|
|
BufferingHints: &firehose.ElasticsearchBufferingHints{
|
|
|
|
IntervalInSeconds: aws.Int64(500),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
PreCheck: testAccKinesisFirehosePreCheck(t),
|
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckKinesisFirehoseDeliveryStreamDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
2016-11-14 22:18:11 +01:00
|
|
|
{
|
2016-08-08 02:21:18 +02:00
|
|
|
Config: preConfig,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream_es", &stream),
|
|
|
|
testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream, nil, nil, nil),
|
|
|
|
),
|
|
|
|
},
|
2016-11-14 22:18:11 +01:00
|
|
|
{
|
2016-08-08 02:21:18 +02:00
|
|
|
Config: postConfig,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream_es", &stream),
|
|
|
|
testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream, nil, nil, updatedElasticSearchConfig),
|
2015-11-09 23:44:26 +01:00
|
|
|
),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func testAccCheckKinesisFirehoseDeliveryStreamExists(n string, stream *firehose.DeliveryStreamDescription) resource.TestCheckFunc {
|
|
|
|
return func(s *terraform.State) error {
|
|
|
|
rs, ok := s.RootModule().Resources[n]
|
2015-11-10 17:24:33 +01:00
|
|
|
log.Printf("State: %#v", s.RootModule().Resources)
|
2015-11-09 23:44:26 +01:00
|
|
|
if !ok {
|
|
|
|
return fmt.Errorf("Not found: %s", n)
|
|
|
|
}
|
|
|
|
|
|
|
|
if rs.Primary.ID == "" {
|
|
|
|
return fmt.Errorf("No Kinesis Firehose ID is set")
|
|
|
|
}
|
|
|
|
|
|
|
|
conn := testAccProvider.Meta().(*AWSClient).firehoseconn
|
|
|
|
describeOpts := &firehose.DescribeDeliveryStreamInput{
|
|
|
|
DeliveryStreamName: aws.String(rs.Primary.Attributes["name"]),
|
|
|
|
}
|
|
|
|
resp, err := conn.DescribeDeliveryStream(describeOpts)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
*stream = *resp.DeliveryStreamDescription
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-08-08 02:21:18 +02:00
|
|
|
func testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(stream *firehose.DeliveryStreamDescription, s3config interface{}, redshiftConfig interface{}, elasticsearchConfig interface{}) resource.TestCheckFunc {
|
2015-11-09 23:44:26 +01:00
|
|
|
return func(s *terraform.State) error {
|
2015-11-10 17:24:33 +01:00
|
|
|
if !strings.HasPrefix(*stream.DeliveryStreamName, "terraform-kinesis-firehose") {
|
2015-11-09 23:44:26 +01:00
|
|
|
return fmt.Errorf("Bad Stream name: %s", *stream.DeliveryStreamName)
|
|
|
|
}
|
|
|
|
for _, rs := range s.RootModule().Resources {
|
|
|
|
if rs.Type != "aws_kinesis_firehose_delivery_stream" {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
if *stream.DeliveryStreamARN != rs.Primary.Attributes["arn"] {
|
|
|
|
return fmt.Errorf("Bad Delivery Stream ARN\n\t expected: %s\n\tgot: %s\n", rs.Primary.Attributes["arn"], *stream.DeliveryStreamARN)
|
|
|
|
}
|
2016-06-30 22:03:31 +02:00
|
|
|
|
|
|
|
if s3config != nil {
|
|
|
|
s := s3config.(*firehose.S3DestinationDescription)
|
|
|
|
// Range over the Stream Destinations, looking for the matching S3
|
|
|
|
// destination. For simplicity, our test only have a single S3 or
|
|
|
|
// Redshift destination, so at this time it's safe to match on the first
|
|
|
|
// one
|
|
|
|
var match bool
|
|
|
|
for _, d := range stream.Destinations {
|
|
|
|
if d.S3DestinationDescription != nil {
|
|
|
|
if *d.S3DestinationDescription.BufferingHints.SizeInMBs == *s.BufferingHints.SizeInMBs {
|
|
|
|
match = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !match {
|
|
|
|
return fmt.Errorf("Mismatch s3 buffer size, expected: %s, got: %s", s, stream.Destinations)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if redshiftConfig != nil {
|
|
|
|
r := redshiftConfig.(*firehose.RedshiftDestinationDescription)
|
|
|
|
// Range over the Stream Destinations, looking for the matching Redshift
|
|
|
|
// destination
|
|
|
|
var match bool
|
|
|
|
for _, d := range stream.Destinations {
|
|
|
|
if d.RedshiftDestinationDescription != nil {
|
|
|
|
if *d.RedshiftDestinationDescription.CopyCommand.CopyOptions == *r.CopyCommand.CopyOptions {
|
|
|
|
match = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !match {
|
|
|
|
return fmt.Errorf("Mismatch Redshift CopyOptions, expected: %s, got: %s", r, stream.Destinations)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-08-08 02:21:18 +02:00
|
|
|
if elasticsearchConfig != nil {
|
|
|
|
es := elasticsearchConfig.(*firehose.ElasticsearchDestinationDescription)
|
|
|
|
// Range over the Stream Destinations, looking for the matching Elasticsearch destination
|
|
|
|
var match bool
|
|
|
|
for _, d := range stream.Destinations {
|
|
|
|
if d.ElasticsearchDestinationDescription != nil {
|
|
|
|
match = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !match {
|
|
|
|
return fmt.Errorf("Mismatch Elasticsearch Buffering Interval, expected: %s, got: %s", es, stream.Destinations)
|
|
|
|
}
|
|
|
|
}
|
2015-11-09 23:44:26 +01:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func testAccCheckKinesisFirehoseDeliveryStreamDestroy(s *terraform.State) error {
|
|
|
|
for _, rs := range s.RootModule().Resources {
|
|
|
|
if rs.Type != "aws_kinesis_firehose_delivery_stream" {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
conn := testAccProvider.Meta().(*AWSClient).firehoseconn
|
|
|
|
describeOpts := &firehose.DescribeDeliveryStreamInput{
|
|
|
|
DeliveryStreamName: aws.String(rs.Primary.Attributes["name"]),
|
|
|
|
}
|
|
|
|
resp, err := conn.DescribeDeliveryStream(describeOpts)
|
|
|
|
if err == nil {
|
|
|
|
if resp.DeliveryStreamDescription != nil && *resp.DeliveryStreamDescription.DeliveryStreamStatus != "DELETING" {
|
|
|
|
return fmt.Errorf("Error: Delivery Stream still exists")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
func testAccKinesisFirehosePreCheck(t *testing.T) func() {
|
|
|
|
return func() {
|
|
|
|
testAccPreCheck(t)
|
|
|
|
if os.Getenv("AWS_ACCOUNT_ID") == "" {
|
|
|
|
t.Fatal("AWS_ACCOUNT_ID must be set")
|
|
|
|
}
|
|
|
|
}
|
2015-12-21 21:46:25 +01:00
|
|
|
}
|
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
const testAccKinesisFirehoseDeliveryStreamBaseConfig = `
|
2015-12-21 21:46:25 +01:00
|
|
|
resource "aws_iam_role" "firehose" {
|
2016-06-30 22:03:31 +02:00
|
|
|
name = "tf_acctest_firehose_delivery_role_%d"
|
|
|
|
assume_role_policy = <<EOF
|
2015-12-21 21:46:25 +01:00
|
|
|
{
|
|
|
|
"Version": "2012-10-17",
|
|
|
|
"Statement": [
|
|
|
|
{
|
|
|
|
"Sid": "",
|
|
|
|
"Effect": "Allow",
|
|
|
|
"Principal": {
|
|
|
|
"Service": "firehose.amazonaws.com"
|
|
|
|
},
|
|
|
|
"Action": "sts:AssumeRole",
|
|
|
|
"Condition": {
|
|
|
|
"StringEquals": {
|
|
|
|
"sts:ExternalId": "%s"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
2015-11-10 17:24:33 +01:00
|
|
|
resource "aws_s3_bucket" "bucket" {
|
2016-06-30 22:03:31 +02:00
|
|
|
bucket = "tf-test-bucket-%d"
|
|
|
|
acl = "private"
|
2015-11-10 17:24:33 +01:00
|
|
|
}
|
2015-11-09 23:44:26 +01:00
|
|
|
|
2015-12-21 21:46:25 +01:00
|
|
|
resource "aws_iam_role_policy" "firehose" {
|
2016-06-30 22:03:31 +02:00
|
|
|
name = "tf_acctest_firehose_delivery_policy_%d"
|
|
|
|
role = "${aws_iam_role.firehose.id}"
|
|
|
|
policy = <<EOF
|
2015-12-21 21:46:25 +01:00
|
|
|
{
|
|
|
|
"Version": "2012-10-17",
|
|
|
|
"Statement": [
|
|
|
|
{
|
|
|
|
"Sid": "",
|
|
|
|
"Effect": "Allow",
|
|
|
|
"Action": [
|
|
|
|
"s3:AbortMultipartUpload",
|
|
|
|
"s3:GetBucketLocation",
|
|
|
|
"s3:GetObject",
|
|
|
|
"s3:ListBucket",
|
|
|
|
"s3:ListBucketMultipartUploads",
|
|
|
|
"s3:PutObject"
|
|
|
|
],
|
|
|
|
"Resource": [
|
|
|
|
"arn:aws:s3:::${aws_s3_bucket.bucket.id}",
|
|
|
|
"arn:aws:s3:::${aws_s3_bucket.bucket.id}/*"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
`
|
|
|
|
|
2016-09-02 11:50:04 +02:00
|
|
|
func testAccKinesisFirehoseDeliveryStreamConfig_s3WithCloudwatchLogging(accountId string, rInt int) string {
|
|
|
|
return fmt.Sprintf(`
|
|
|
|
resource "aws_iam_role" "firehose" {
|
|
|
|
name = "tf_acctest_firehose_delivery_role_%d"
|
|
|
|
assume_role_policy = <<EOF
|
|
|
|
{
|
|
|
|
"Version": "2012-10-17",
|
|
|
|
"Statement": [
|
|
|
|
{
|
|
|
|
"Sid": "",
|
|
|
|
"Effect": "Allow",
|
|
|
|
"Principal": {
|
|
|
|
"Service": "firehose.amazonaws.com"
|
|
|
|
},
|
|
|
|
"Action": "sts:AssumeRole",
|
|
|
|
"Condition": {
|
|
|
|
"StringEquals": {
|
|
|
|
"sts:ExternalId": "%s"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_iam_role_policy" "firehose" {
|
|
|
|
name = "tf_acctest_firehose_delivery_policy_%d"
|
|
|
|
role = "${aws_iam_role.firehose.id}"
|
|
|
|
policy = <<EOF
|
|
|
|
{
|
|
|
|
"Version": "2012-10-17",
|
|
|
|
"Statement": [
|
|
|
|
{
|
|
|
|
"Sid": "",
|
|
|
|
"Effect": "Allow",
|
|
|
|
"Action": [
|
|
|
|
"s3:AbortMultipartUpload",
|
|
|
|
"s3:GetBucketLocation",
|
|
|
|
"s3:GetObject",
|
|
|
|
"s3:ListBucket",
|
|
|
|
"s3:ListBucketMultipartUploads",
|
|
|
|
"s3:PutObject"
|
|
|
|
],
|
|
|
|
"Resource": [
|
|
|
|
"arn:aws:s3:::${aws_s3_bucket.bucket.id}",
|
|
|
|
"arn:aws:s3:::${aws_s3_bucket.bucket.id}/*"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"Effect": "Allow",
|
|
|
|
"Action": [
|
|
|
|
"logs:putLogEvents"
|
|
|
|
],
|
|
|
|
"Resource": [
|
|
|
|
"arn:aws:logs::log-group:/aws/kinesisfirehose/*"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_s3_bucket" "bucket" {
|
|
|
|
bucket = "tf-test-bucket-%d"
|
|
|
|
acl = "private"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_cloudwatch_log_group" "test" {
|
|
|
|
name = "example-%d"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_cloudwatch_log_stream" "test" {
|
|
|
|
name = "sample-log-stream-test-%d"
|
|
|
|
log_group_name = "${aws_cloudwatch_log_group.test.name}"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_kinesis_firehose_delivery_stream" "test_stream" {
|
|
|
|
depends_on = ["aws_iam_role_policy.firehose"]
|
|
|
|
name = "terraform-kinesis-firehose-basictest-cloudwatch"
|
|
|
|
destination = "s3"
|
|
|
|
s3_configuration {
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
bucket_arn = "${aws_s3_bucket.bucket.arn}"
|
|
|
|
cloudwatch_logging_options {
|
|
|
|
enabled = true
|
|
|
|
log_group_name = "${aws_cloudwatch_log_group.test.name}"
|
|
|
|
log_stream_name = "${aws_cloudwatch_log_stream.test.name}"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`, rInt, accountId, rInt, rInt, rInt, rInt)
|
|
|
|
}
|
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
var testAccKinesisFirehoseDeliveryStreamConfig_s3basic = testAccKinesisFirehoseDeliveryStreamBaseConfig + `
|
2015-11-10 17:24:33 +01:00
|
|
|
resource "aws_kinesis_firehose_delivery_stream" "test_stream" {
|
2016-06-30 22:03:31 +02:00
|
|
|
depends_on = ["aws_iam_role_policy.firehose"]
|
|
|
|
name = "terraform-kinesis-firehose-basictest-%d"
|
|
|
|
destination = "s3"
|
|
|
|
s3_configuration {
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
bucket_arn = "${aws_s3_bucket.bucket.arn}"
|
|
|
|
}
|
2015-11-10 17:24:33 +01:00
|
|
|
}`
|
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
var testAccKinesisFirehoseDeliveryStreamConfig_s3Updates = testAccKinesisFirehoseDeliveryStreamBaseConfig + `
|
|
|
|
resource "aws_kinesis_firehose_delivery_stream" "test_stream" {
|
|
|
|
depends_on = ["aws_iam_role_policy.firehose"]
|
|
|
|
name = "terraform-kinesis-firehose-s3test-%d"
|
|
|
|
destination = "s3"
|
|
|
|
s3_configuration {
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
bucket_arn = "${aws_s3_bucket.bucket.arn}"
|
|
|
|
buffer_size = 10
|
|
|
|
buffer_interval = 400
|
|
|
|
compression_format = "GZIP"
|
|
|
|
}
|
|
|
|
}`
|
2015-12-21 21:46:25 +01:00
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
var testAccKinesisFirehoseDeliveryStreamBaseRedshiftConfig = testAccKinesisFirehoseDeliveryStreamBaseConfig + `
|
|
|
|
resource "aws_redshift_cluster" "test_cluster" {
|
|
|
|
cluster_identifier = "tf-redshift-cluster-%d"
|
|
|
|
database_name = "test"
|
|
|
|
master_username = "testuser"
|
|
|
|
master_password = "T3stPass"
|
|
|
|
node_type = "dc1.large"
|
|
|
|
cluster_type = "single-node"
|
|
|
|
}`
|
2015-11-10 17:24:33 +01:00
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
var testAccKinesisFirehoseDeliveryStreamConfig_RedshiftBasic = testAccKinesisFirehoseDeliveryStreamBaseRedshiftConfig + `
|
|
|
|
resource "aws_kinesis_firehose_delivery_stream" "test_stream" {
|
|
|
|
depends_on = ["aws_iam_role_policy.firehose", "aws_redshift_cluster.test_cluster"]
|
|
|
|
name = "terraform-kinesis-firehose-basicredshifttest-%d"
|
|
|
|
destination = "redshift"
|
|
|
|
s3_configuration {
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
bucket_arn = "${aws_s3_bucket.bucket.arn}"
|
|
|
|
}
|
|
|
|
redshift_configuration {
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
cluster_jdbcurl = "jdbc:redshift://${aws_redshift_cluster.test_cluster.endpoint}/${aws_redshift_cluster.test_cluster.database_name}"
|
|
|
|
username = "testuser"
|
|
|
|
password = "T3stPass"
|
|
|
|
data_table_name = "test-table"
|
|
|
|
}
|
|
|
|
}`
|
2015-12-21 21:46:25 +01:00
|
|
|
|
2016-06-30 22:03:31 +02:00
|
|
|
var testAccKinesisFirehoseDeliveryStreamConfig_RedshiftUpdates = testAccKinesisFirehoseDeliveryStreamBaseRedshiftConfig + `
|
2015-11-10 17:24:33 +01:00
|
|
|
resource "aws_kinesis_firehose_delivery_stream" "test_stream" {
|
2016-06-30 22:03:31 +02:00
|
|
|
depends_on = ["aws_iam_role_policy.firehose", "aws_redshift_cluster.test_cluster"]
|
|
|
|
name = "terraform-kinesis-firehose-basicredshifttest-%d"
|
|
|
|
destination = "redshift"
|
|
|
|
s3_configuration {
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
bucket_arn = "${aws_s3_bucket.bucket.arn}"
|
|
|
|
buffer_size = 10
|
|
|
|
buffer_interval = 400
|
|
|
|
compression_format = "GZIP"
|
|
|
|
}
|
|
|
|
redshift_configuration {
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
cluster_jdbcurl = "jdbc:redshift://${aws_redshift_cluster.test_cluster.endpoint}/${aws_redshift_cluster.test_cluster.database_name}"
|
|
|
|
username = "testuser"
|
|
|
|
password = "T3stPass"
|
|
|
|
data_table_name = "test-table"
|
|
|
|
copy_options = "GZIP"
|
|
|
|
data_table_columns = "test-col"
|
|
|
|
}
|
2015-11-10 17:24:33 +01:00
|
|
|
}`
|
2016-08-08 02:21:18 +02:00
|
|
|
|
|
|
|
var testAccKinesisFirehoseDeliveryStreamBaseElasticsearchConfig = testAccKinesisFirehoseDeliveryStreamBaseConfig + `
|
|
|
|
resource "aws_elasticsearch_domain" "test_cluster" {
|
|
|
|
domain_name = "es-test-%d"
|
|
|
|
|
|
|
|
access_policies = <<CONFIG
|
|
|
|
{
|
|
|
|
"Version": "2012-10-17",
|
|
|
|
"Statement": [
|
|
|
|
{
|
|
|
|
"Effect": "Allow",
|
|
|
|
"Principal": {
|
|
|
|
"AWS": "arn:aws:iam::%s:root"
|
|
|
|
},
|
|
|
|
"Action": "es:*",
|
|
|
|
"Resource": "arn:aws:es:us-east-1:%s:domain/es-test-%d/*"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
CONFIG
|
|
|
|
}`
|
|
|
|
|
|
|
|
var testAccKinesisFirehoseDeliveryStreamConfig_ElasticsearchBasic = testAccKinesisFirehoseDeliveryStreamBaseElasticsearchConfig + `
|
|
|
|
resource "aws_kinesis_firehose_delivery_stream" "test_stream_es" {
|
|
|
|
depends_on = ["aws_iam_role_policy.firehose", "aws_elasticsearch_domain.test_cluster"]
|
|
|
|
name = "terraform-kinesis-firehose-es-%d"
|
|
|
|
destination = "elasticsearch"
|
|
|
|
s3_configuration {
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
bucket_arn = "${aws_s3_bucket.bucket.arn}"
|
|
|
|
}
|
|
|
|
elasticsearch_configuration {
|
|
|
|
domain_arn = "${aws_elasticsearch_domain.test_cluster.arn}"
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
index_name = "test"
|
|
|
|
type_name = "test"
|
|
|
|
}
|
|
|
|
}`
|
|
|
|
|
|
|
|
var testAccKinesisFirehoseDeliveryStreamConfig_ElasticsearchUpdate = testAccKinesisFirehoseDeliveryStreamBaseElasticsearchConfig + `
|
|
|
|
resource "aws_kinesis_firehose_delivery_stream" "test_stream_es" {
|
|
|
|
depends_on = ["aws_iam_role_policy.firehose", "aws_elasticsearch_domain.test_cluster"]
|
|
|
|
name = "terraform-kinesis-firehose-es-%d"
|
|
|
|
destination = "elasticsearch"
|
|
|
|
s3_configuration {
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
bucket_arn = "${aws_s3_bucket.bucket.arn}"
|
|
|
|
}
|
|
|
|
elasticsearch_configuration {
|
|
|
|
domain_arn = "${aws_elasticsearch_domain.test_cluster.arn}"
|
|
|
|
role_arn = "${aws_iam_role.firehose.arn}"
|
|
|
|
index_name = "test"
|
|
|
|
type_name = "test"
|
|
|
|
buffering_interval = 500
|
|
|
|
}
|
|
|
|
}`
|