使用Athena分析在S3上的WAF Log

一、背景

在使用WAF保护业务系统的过程中,经常需要查询历史日志,分析特定防护对象的防护效果,查看拦截的请求,或查看访问特定URL的防护效果。这时候就需要用到WAF日志功能。

AWS WAF支持将日志输出到CloudWatch Log Groups,Kinesis,以及S3。将日志输出到CloudWatch Log Groups使用方便,但是存储成本高;将日志输出到Kinesis后可连接多种投递方式,灵活且延迟低,但技术架构稍微复杂。将WAF日志存储到S3数据湖,可实现最低低成本储存日志,通过Athena可快速方便查询。

Continue reading “使用Athena分析在S3上的WAF Log”

如何在多账号和单账号选择

提示:本文详细阅读需要20-30分钟时间

概述:本文以使用S3+Glue+Redshift+MWAA(Airflow)为例,介绍使用两种不同方式区分Prod环境和Test环境的权限。

目录如下:

  • 一、如何定义多账号和单账号
  • 二、多账号的隔离效果测试
  • 三、单账号下多用户的隔离效果测试
  • 四、二者对比
  • 五、小结
Continue reading “如何在多账号和单账号选择”

在使用Graviton处理器的ARM架构的EC2构建JAVA应用

一、背景

AWS Graviton是AWS推出的ARM架构处理器,目前已经在AWS中国区域、全球区域大规模可用。使用Graviton处理器的EC2机型,以及基于Graviton处理器的托管服务包括RDS、Redis、OpenSearch,可获得比同配置的Intel处理器机型更高的性能,且同配置对比成本更低。

更多信息可参考:

https://aws.amazon.com/cn/ec2/graviton/
https://aws.amazon.com/cn/campaigns/graviton/

本文将展示Java的跨平台特性,即可以在ARM架构的EC2上构建Java应用,也可以在Intel处理器上构建好JAR包后,直接复制到ARM架构上运行。

Continue reading “在使用Graviton处理器的ARM架构的EC2构建JAVA应用”

在Redshift上使用comment语句

一、背景

Redshift是用于大量数据分析的列式数据仓库。Redshift并不支持所有PostgreSQL的语法。

关于Redshift支持的的限制,可参考这里 Unsupported PostgreSQL functions 的文档。

在这篇文章中,明确提到Comment information functions是不被支持的。

不过,在Redshift上可使用comment命令来为数据库的表、列添加注释。

Continue reading “在Redshift上使用comment语句”

使用CloudFront发布EC2上的应用并使用Managed prefix功能限制EC2只接受CloudFront回源流量

一、背景

CloudFront使用的一般场景是发布ALB上的应用,而ALB又是发布一组EC2应用。CloudFront也支持直接发布EC2不使用ALB。当然这是不推荐的,因为ALB会提供了更好的多机流量调度,通过目标组实现健康检查,确保要发布的应用正常对外提供服务,并具备水平扩展能力。

此前,如果希望对ALB和EC2做限制,使其只允许来自CloudFront回源流量,并且不再接受其他互联网访问,那么这个需求常见的解决方案是:

Continue reading “使用CloudFront发布EC2上的应用并使用Managed prefix功能限制EC2只接受CloudFront回源流量”

Direct Connect 101 & 配置说明

一、背景

Direct Connect是AWS的专线接入服务,主要场景:

  • 连接客户IDC与AWS云
  • 连接其他云厂家与AWS云
  • 连接AWS中国和AWS海外区域

Direct Connect涉及网络知识较多,名词和术语多,配置步骤复杂。其中一个相对很难学习的地方在于Direct Connect无法自助学习配置,当没有真实专线连接的时候,Direct Connect云端界面无法完全模拟所有操作,因此给动手实验带来很大的困难。针对这个问题,本文将Direct Connect主要配置流程和方法进行梳理,并辅以截图进行讲解。

Continue reading “Direct Connect 101 & 配置说明”

Redshift 跨库查询使用方法

一、背景

Redshift默认会创建名为dev的数据库,在其中又包含名为public的schema,然后用户在其中创建表和视图。如果希望在同一个Redshift集群内同时创建多个数据库,并且进行跨数据库访问,那么可参照本文的方法。

注:本功能仅支持RA3机型,老的dc2/ds2机型上不支持。

Continue reading “Redshift 跨库查询使用方法”

Kinesis入门之三部曲系列

注:2024年2月起,Kinesis Data Firehose也成为了独立产品Data Firehose。再加上之前成为独立产品的Managed Flink,Kinesis的三套件目前都成为了独立产品。

之前很多同学觉得Kinesis比较复杂,这里做一系列入门实验,方便快速采纳服务。点击每个标题后的连接跳转到对应文档。

典型的Kinesis数据流如下图。

场景1:KDF准实时流式入湖(1分钟级)+ 低频查询

使用Kinesis Data Firehose将数据导入S3数据湖,设置分区键,并转换为Parquet列格式。通过Athena可以极低的开销做低频查询。本方案成本低效果好,对现有系统不侵入,可作为现有大数据分析手段的补充。点击跳转:文档视频

场景2:KDF准实时流式入仓(1分钟级)+ 高频查询

使用Kinesis Data Firehose将原始数据以GZIP压缩方式在S3落盘,并按照60秒的间隔自动加载到数Redshift数据仓库。Redshift为MPP架构分布式数仓,支持通过JDBC方式调用,满足BI系统多并发的高频查询要求。点击跳转:文档

场景3:KDS实时流式入仓(秒级)+ 高频查询

使用Kinesis Data Stream将原始数据放在Kinesis流中,可使用多种消费方式包括KDA(托管Flink)、Redshift等方式消费。本方案采用Redshift的物化视图方式对Kinesis数据流进行消费,并通过自动刷新物化视图实现秒级的延迟。Redshift可满足BI系统多并发的高频查询要求。点击跳转:文档

Redshift Realtime Ingress 实时数据摄入之Kinesis Data Stream方案

注:2024年2月起,Kinesis Data Firehose也成为了独立产品Data Firehose。再加上之前成为独立产品的Managed Flink,Kinesis的三套件目前都成为了独立产品。

一、背景

Redshift实时数据摄取功能是面向需要实时数据分析客户、对报表低延迟要求极高的客户的最佳选择之一。与使用Data Firehose相比,延迟从1分钟到1分半提升到秒级。

Continue reading “Redshift Realtime Ingress 实时数据摄入之Kinesis Data Stream方案”

Kinesis Data Firehose 准实时写入数据到Redshift方案

注:2024年2月起,Kinesis Data Firehose也成为了独立产品Data Firehose。再加上之前成为独立产品的Managed Flink,Kinesis的三套件目前都成为了独立产品。

一、背景

Kinesis作为AWS流式数据服务的核心产品,支持多种数据服务作为投递对象。通过Kinesis Data Firehose将数据持久化落盘到S3并自动加载到Redshift数据仓库,可实现最低一分钟的分析间隔,且无需额外配置脚本或计划任务用于加载和数据转换。

本文通过自定义脚本生成测试数据,并加载到Redshift。

Continue reading “Kinesis Data Firehose 准实时写入数据到Redshift方案”

Kinesis Data Firehose 写入S3动态分区并转换为Parquet格式

注:2024年2月起,Kinesis Data Firehose也成为了独立产品Data Firehose。再加上之前成为独立产品的Managed Flink,Kinesis的三套件目前都成为了独立产品。

本文有关操作Demo请参考这个视频。本篇为具体技术配置过程。

一、背景和需求分析

1、Kinesis介绍

Kinesis简介From AWS官网:

Amazon Kinesis Data Firehose (KDF) 是将流数据加载到数据存储和分析工具的最简单方式。Kinesis Data Firehose是一项完全托管式服务,让您可以轻松地从数十万个来源中捕获、转换大量流数据,并将其加载到 Amazon S3、Amazon Redshift、Amazon OpenSearch Service、Kinesis Data Analytics、通用 HTTP 终端节点,以及 Datadog、New Relic、MongoDB 和 Splunk 等的服务提供商中,从而获得近乎实时的分析与见解。

2、Kinesis分区需求

测试Kinesis发送数据流时候,经常使用Kinesis控制台上的生成测试数据按钮,这个按钮将生成如下四个字段:

Continue reading “Kinesis Data Firehose 写入S3动态分区并转换为Parquet格式”

使用Python Boto3从CloudWatch获取S3存储桶大小的Metric值

一、背景

对象式存储S3是用于存储海量文件的,当文件达到百万、千万、上亿的时候,S3可正常响应查询、写入的请求,而普通OS上的文件系统在这个数量级必须引入目录散列,并且伴随着性能下降,且如果是虚拟机本地盘还可能出现inodes使用满的情况。这种场景下,S3对象存储针对海量文件是非常友好的。因此使用S3是很有必要的。

S3也有不方便的地方,例如统计文件大小。传统的文件系统方式是做遍历后求和。那么S3上数百万个文件做一次遍历,开销极其巨大,而且产生了巨大的读取费用(List也算读取,参考S3收费文档)。由此,S3有个功能是S3 Inventory,即每天一次生成文件清单,并可通过Athena做进一步查询文件名称和大小。此外,还可以通过S3 Storage Lens查看各存储桶的总数据量和类型。

Continue reading “使用Python Boto3从CloudWatch获取S3存储桶大小的Metric值”

如何读懂一份AWS账单的EC2预留实例匹配关系

一、预留实例的计费逻辑

在一份账单中占比最大的部分可能就是EC2,EC2部分也包含了诸如EKS集群使用的node节点等用量。在部分机型是On-demand按需运行,部分机型是有多个RI预留时候,账单可能显示的比较复杂,晦涩难懂。那么如何解读账单中体现的EC2用量呢?本文以某个场景为例进行分析和解读。在开始解读账单之前,首先要看下RI预留实例的计费逻辑。

Continue reading “如何读懂一份AWS账单的EC2预留实例匹配关系”