如何使用terraform将kinesis流与流水传输流连接

问题描述:

我的日志记录系统使用连接到写入S3存储桶的流水传输流的kinesis流。可以通过AWS控制台手动配置firehose流的“Source”属性为kinesis流。我想使用terraform并在代码中捕获此设置。如何使用terraform将kinesis流与流水传输流连接

aws_kinesis_firehose_delivery_stream和aws_kinesis_stream terraform资源都没有属性(我可以找到)设置Source属性的属性。我克隆terraform源,并通过它看,我看到:

createInput := &firehose.CreateDeliveryStreamInput{ 
    DeliveryStreamName: aws.String(sn), 
} 

我的下一个想法是,看看我是否可以编辑代码设置源属性。所以,我看着通过AWS API流水找到属性名称,我发现这一点:

DeliveryStreamType

交付流类型。此参数可以是以下值之一:

DirectPut:提供商应用程序直接访问传送流。

KinesisStreamAsSource:传送流使用Kinesis流作为源。 类型:字符串

有效值:DirectPut | KinesisStreamAsSource

鉴于此,我想我只是编辑terraform代码来设置DeliveryStreamType与必要的配置,“KinesisStreamSourceConfiguration。”。无论如何,我在terraform repo中找不到对aws sdk代码中的DeliveryStreamType的引用。但是我看到了DeliveryStreamName。

是否可以使用terraform连接kinesis和firehose流?如果不是,这是一个即将到来的功能吗?

在此先感谢。

我已经尝试实现这个功能&都提出了PR here

+0

真棒!我最终在本地实施了这项工作,但如果你已经有一个公关待决,那么这很棒。你知道这种事情通常需要多长时间才能合并?感谢你! – CAS

+0

不确定,我第一次参与这个项目 – Peter

我克隆了最新的https://github.com/aws/aws-sdk-go,并确认terraform只是使用不支持DeliveryStreamType的go aws API的旧版本。 Terraform代码:

type CreateDeliveryStreamInput struct { 
_ struct{} `type:"structure"` 

    // The name of the delivery stream. This name must be unique per AWS account 
    // in the same region. You can have multiple delivery streams with the same 
    // name if they are in different accounts or different regions. 
    // 
    // DeliveryStreamName is a required field 
    DeliveryStreamName *string `min:"1" type:"string" required:"true"` 
    ... 
} 

当前AWS-SDK-去回购:

type CreateDeliveryStreamInput struct { 
_ struct{} `type:"structure"` 

    // The name of the delivery stream. This name must be unique per AWS account 
    // in the same region. If the delivery streams are in different accounts or 
    // different regions, you can have multiple delivery streams with the same name. 
    // 
    // DeliveryStreamName is a required field 
    DeliveryStreamName *string `min:"1" type:"string" required:"true"` 

    // The delivery stream type. This parameter can be one of the following values: 
    // 
    // * DirectPut: Provider applications access the delivery stream directly. 
    // 
    // * KinesisStreamAsSource: The delivery stream uses a Kinesis stream as 
    // a source. 
    DeliveryStreamType *string `type:"string" enum:"DeliveryStreamType"` 
    ... 
    // When a Kinesis stream is used as the source for the delivery stream, a KinesisStreamSourceConfiguration 
    // containing the Kinesis stream ARN and the role ARN for the source stream. 
    KinesisStreamSourceConfiguration *KinesisStreamSourceConfiguration `type:"structure"` 
    ... 
} 

所以这个回答我的问题,基本上terraform回购需要更新使用当前AWS-SDK运行的代码。