大量のデータを処理するための最適な選択: Kinesis Data Streams と Firehose の比較

大量のデータを処理するための最適な選択: Kinesis Data Streams と Firehose の比較

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

AWSのKinesis Data StreamsとFirehoseを比較して、大量のデータを処理するための最適な選択をご紹介します。Kinesis Data StreamsとFirehoseは、AWSのストリームデータ処理サービスです。この記事では、Kinesis Data StreamsとFirehoseの違いを比較し、どちらが大量のデータを処理するための最適な選択かを詳しく解説します。

はじめに

Kinesis Data StreamsとFirehoseは、AWSのストリームデータ処理サービスです。Kinesis Data Streamsは、大量のデータを受け取り、処理してから保存するためのサービスです。Firehoseは、受け取ったデータを受け取ってからすぐに保存するためのサービスです。Kinesis Data StreamsとFirehoseの違いを比較し、どちらが大量のデータを処理するための最適な選択かを詳しく解説します。

Kinesis Data StreamsとFirehoseの比較

Kinesis Data StreamsとFirehoseは、それぞれ異なる用途で使用されます。Kinesis Data Streamsは、大量のデータを受け取り、処理してから保存するためのサービスです。Firehoseは、受け取ったデータを受け取ってからすぐに保存するためのサービスです。

Kinesis Data Streamsを使用すると、受け取ったデータを複数のストリームに分割して処理することができます。また、ストリーム内のデータを検索したり、フィルタリングしたりすることも可能です。

Firehoseは、受け取ったデータを受け取ってからすぐに保存するためのサービスです。Firehoseを使用すると、受け取ったデータをAmazon S3やAmazon Redshiftなどのデータストアに保存することができます。Firehoseを使用すると、データを受け取ってからすぐに保存することができるため、ストリーム処理を行う必要がない場合に効率的かつ実装が容易です。

CloudFormation

Kinesis Data StreamsとFirehoseを使用するためのCloudFormationのサンプルです。

Resources:
  MyKinesisDataStream:
    Type: AWS::Kinesis::Stream
    Properties:
      Name: my-kinesis-data-stream
      RetentionPeriodHours: 24
      ShardCount: 1

  MyKinesisDataProducer:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        S3Bucket: my-lambda-code-bucket
        S3Key: my-lambda-code.zip
      Description: "My Kinesis Data Producer"
      FunctionName: "my-kinesis-data-producer"
      Handler: "lambda_function.lambda_handler"
      MemorySize: 128
      Role: "arn:aws:iam::123456789012:role/MyLambdaRole"
      Runtime: "python3.7"
      Timeout: 60
      Environment:
        Variables:
          STREAM_NAME: !Ref MyKinesisDataStream
          REGION: !Ref AWS::Region

  MyKinesisDataProducerPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !Ref MyKinesisDataProducer
      Principal: "kinesis.amazonaws.com"
      SourceArn: !GetAtt MyKinesisDataStream.Arn

  MyKinesisDataConsumer:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        S3Bucket: my-lambda-code-bucket
        S3Key: my-lambda-code.zip
      Description: "My Kinesis Data Consumer"
      FunctionName: "my-kinesis-data-consumer"
      Handler: "lambda_function.lambda_handler"
      MemorySize: 128
      Role: "arn:aws:iam::123456789012:role/MyLambdaRole"
      Runtime: "python3.7"
      Timeout: 60
      Environment:
        Variables:
          STREAM_NAME: !Ref MyKinesisDataStream
          REGION: !Ref AWS::Region

  MyKinesisDataConsumerPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !Ref MyKinesisDataConsumer
      Principal: "kinesis.amazonaws.com"
      SourceArn: !GetAtt MyKinesisDataStream.Arn

  MyKinesisDataConsumerSubscription:
    Type: AWS::Kinesis::StreamConsumer
    Properties:
      ConsumerName: "my-kinesis-data-consumer"
      StreamARN: !GetAtt MyKinesisDataStream.Arn
      RoleARN: "arn:aws:iam::123456789012:role/MyConsumerRole"
      StartingPosition: "TRIM_HORIZON"
Resources:
  MyDeliveryStream:
    Type: AWS::KinesisFirehose::DeliveryStream
    Properties:
      DeliveryStreamName: my-delivery-stream
      S3DestinationConfiguration:
        BucketARN: arn:aws:s3:::my-s3-bucket
        RoleARN: arn:aws:iam::123456789012:role/my-firehose-role
        Prefix: my-data/
        BufferingHints:
          IntervalInSeconds: 60
          SizeInMBs: 1
        CompressionFormat: UNCOMPRESSED
        CloudWatchLoggingOptions:
          Enabled: true
          LogGroupName: my-delivery-stream-logs
          LogStreamName: my-delivery-stream
      ExtendedS3DestinationConfiguration:
        RoleARN: arn:aws:iam::123456789012:role/my-firehose-role
        BucketARN: arn:aws:s3:::my-s3-bucket
        Prefix: my-data/
        ErrorOutputPrefix: my-data/errors/
        BufferingHints:
          IntervalInSeconds: 60
          SizeInMBs: 1
        CompressionFormat: UNCOMPRESSED
        CloudWatchLoggingOptions:
          Enabled: true
          LogGroupName: my-delivery-stream-logs
          LogStreamName: my-delivery-stream
        ProcessingConfiguration:
          Enabled: true
          Processors:
            - Type: Lambda
              Parameters:
                - ParameterName: "LambdaArn"
                  ParameterValue: "arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function"
        S3BackupMode: Disabled

まとめ

Kinesis Data StreamsとFirehoseは、AWSのストリームデータ処理サービスです。Kinesis Data Streamsは、大量のデータを受け取り、処理してから保存するためのサービスです。Firehoseは、受け取ったデータを受け取ってからすぐに保存するためのサービスです。Kinesis Data StreamsとFirehoseを比較し、どちらが大量のデータを処理するための最適な選択かを解説しました。

サーバーレス開発低コストなAWS開発内製化はお気軽にお問い合わせください。