AWS云计算入门

技术栈

AWS GLUE

etl工具,可以使用pyspark脚本来处理数据,通过编辑job来配置入参

import sys
from awsglue.utils import getResolvedOptions
from awsglue.context import GlueContext
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

# 获取传递的参数
args = getResolvedOptions(sys.argv, ['JOB_NAME', 'SOURCE_PATH', 'TARGET_PATH'])

# 创建 Spark 和 Glue 上下文
sc = SparkContext()
glueContext = GlueContext(sc)
spark = SparkSession.builder.appName('AWS Glue ETL Job').getOrCreate()

# 从 S3 读取 CSV 数据
# 'SOURCE_PATH' 是从 AWS Glue 作业参数中获取的源路径
source_df = spark.read.csv(args['SOURCE_PATH'], header=True, inferSchema=True)

# 打印读取的数据(用于调试)
source_df.show()

# 数据转换示例:选择特定的列
# 这里选择了 'column1' 和 'column2' 列
transformed_df = source_df.select('column1', 'column2')

# 打印转换后的数据(用于调试)
transformed_df.show()

# 将转换后的数据写入到目标 S3 存储桶
# 'TARGET_PATH' 是从 AWS Glue 作业参数中获取的目标路径
transformed_df.write.mode('overwrite').parquet(args['TARGET_PATH'])

print("ETL job completed successfully.")

AWS LAMBDA

一种无服务器的计算服务,可以编写代码,根据触发事件(如 S3 上传、DynamoDB 更新、SNS 消息等)自动执行代码

import boto3
import json
import time

def lambda_handler(event, context):
    """
    Lambda 函数的入口点。执行 Athena 查询并将结果保存到 S3。
    
    参数:
    event (dict): 事件数据(可以包含查询参数)。
    context (object): Lambda 函数的上下文信息。
    
    返回:
    dict: 返回状态码和消息的字典。
    """
    
    # 创建 Athena 客户端
    client = boto3.client('athena')
    
    # 定义查询语句(可以从事件中获取)
    query = "SELECT * FROM sample_table LIMIT 10"
    
    # 执行 Athena 查询
    response = client.start_query_execution(
        QueryString=query,  # 查询语句
        QueryExecutionContext={
            'Database': 'sample_database'  # 查询所在数据库
        },
        ResultConfiguration={
            'OutputLocation': 's3://your-bucket/query-results/'  # 查询结果保存到 S3 存储桶
        }
    )
    
    # 获取查询执行 ID
    query_execution_id = response['QueryExecutionId']
    
    # 等待查询完成(简单的轮询方法)
    while True:
        result = client.get_query_execution(QueryExecutionId=query_execution_id)
        status = result['QueryExecution']['Status']['State']
        if status in ['SUCCEEDED', 'FAILED', 'CANCELLED']:
            break
        time.sleep(5)  # 每隔 5 秒检查一次查询状态
    
    # 检查查询是否成功,并生成结果消息
    if status == 'SUCCEEDED':
        message = f"Query succeeded. Results are available at s3://your-bucket/query-results/{query_execution_id}.csv"
    else:
        message = f"Query failed or was cancelled. Status: {status}"
    
    # 返回查询结果的状态信息
    return {
        'statusCode': 200,
        'body': json.dumps(message)  # 返回的消息
    }


AWS Athena

交互式查询,可以将结果储存到s3或者bi中,可以指定储存的格式例如csv,json等,还可以将athena通过lambda进行集成处理

AWS REDSHIFT

数据仓库

AWS S3

数据湖

AWS AIRFLOW

DAG 文件是定义工作流的 Python 脚本,使用 Airflow 的 DAG 和任务 API 创建任务和依赖关系。

from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.python_operator import PythonOperator
from datetime import datetime

def hello_world():
    print("Hello World")
    
default_args = {#一个字典,定义 DAG 或任务的默认参数。
    'owner': 'airflow',#DAG 的所有者,通常设置为 'airflow'
    'depends_on_past': False,#是否依赖于过去的任务运行。如果设置为 False,任务不会依赖于历史运行。
    'email_on_failure': False,# 是否在任务失败或重试时发送电子邮件。
    'email_on_retry': False,
    'retries': 1,#任务失败时的重试次数。
    'retry_delay': timedelta(minutes=5),#任务重试之间的延迟时间。
}

    
dag = DAG(
    'hello_world_dag',#DAG 的 ID,用于唯一标识这个 DAG。
    default_args=default_args,#使用前面定义的默认参数
    description='A simple hello world DAG',#对 DAG 的描述,帮助用户了解这个 DAG 的功能。
    schedule_interval='@daily',#调度间隔,这里设置为 @daily,表示每天执行一次。
    start_date=datetime(2023, 1, 1),#开始执行的日期和时间。
    catchup=False,#是否补追过去的执行。设置为 False,表示不补追过去的任务运行,只从 start_date 开始执行。
)
    
start = DummyOperator(task_id='start', dag=dag)#一个 DummyOperator 任务,标识工作流的开始。
hello = PythonOperator(task_id='hello', python_callable=hello_world, dag=dag)
#一个 PythonOperator 任务,执行 hello_world 函数。
end = DummyOperator(task_id='end', dag=dag)
#一个 DummyOperator 任务,标识工作流的结束。

start >> hello >> end

AWS DBT

核心功能是将 SQL 查询脚本转换成可重用的数据模型,并在数据仓库中进行自动化管理和测试。

#schema.yml
version: 2

sources:
  - name: sales
    tables:
      - name: sales_data
        description: "The table containing sales data"

-- models/sales_summary.sql

with raw_sales as (
    select
        product_id,
        quantity,
        price
    from {{ source('sales', 'sales_data') }}
)
--第一个参数 'sales' 是数据源的名称。在 schema.yml 文件中,你定义了数据源的名称和相关表的详细信息。这个名称是数据源的逻辑标识符,用于在 dbt 中引用它。
--第二个参数 'sales_data' 是数据源中实际的表名或视图名。这个名称对应于数据库中实际存在的数据表。

select
    product_id,
    sum(quantity * price) as total_sales
from raw_sales
group by product_id

CloudWatch与Relic

要实现 AWS CloudWatch 与 AWS 平台各组件的集成,并将监控数据发送到 New Relic 进行深入分析和可视化,您可以采用以下步骤来设计和实现解决方案:

步骤 1: 在 AWS 中启用和配置 CloudWatch
首先,确保您已为需要监控的所有 AWS 服务启用了 CloudWatch。CloudWatch 可以收集、监控和报告来自如 Amazon EC2, Amazon RDS, Amazon S3 等服务的指标和日志:

启用 CloudWatch 指标:

对于 EC2,确保在实例启动时启用了详细的监控。
对于其他服务,如 RDS 和 S3,检查相应的 CloudWatch 指标是否已经被捕获和启用。
配置 CloudWatch 日志:

设置日志组和流,捕获如 Lambda 函数和容器服务的日志。
步骤 2: 使用 AWS Lambda 将 CloudWatch 日志转发到 New Relic
由于 AWS 没有直接支持将 CloudWatch 日志或指标发送到 New Relic,您需要使用 AWS Lambda 来创建一个中间层,该层负责从 CloudWatch 捕获日志并发送到 New Relic:

创建 Lambda 函数:

使用 Python 或 Node.js 创建一个 Lambda 函数,此函数将触发于 CloudWatch 日志的新事件。
在 Lambda 函数中,编写代码以处理 CloudWatch 日志数据,将其格式化为 New Relic 需要的格式。
使用 New Relic 提供的集成库:

New Relic 提供了多种编程语言的库(例如 newrelic-telemetry-sdk-python),以方便将数据推送到其平台。
设置 IAM 角色和权限:

确保 Lambda 函数有足够的权限访问 CloudWatch 日志和发送 HTTP 请求到 New Relic 的 API。
设置 CloudWatch 日志触发器:

配置 CloudWatch 日志触发 Lambda 函数的执行。
步骤 3: 将 CloudWatch 指标发送到 New Relic
虽然 CloudWatch 日志可以通过 Lambda 中转到 New Relic,但对于指标,您可以考虑使用 New Relic 的 AWS CloudWatch 集成:

配置 New Relic 的 AWS 集成:

在 New Relic 中启用 AWS 集成,并按照指南授权 New Relic 访问您的 AWS 账户。
选择您希望监控的 AWS 服务和相应的 CloudWatch 指标。
设置数据抓取频率:

配置 New Relic 如何频繁地从 CloudWatch 拉取指标数据。
步骤 4: 监控和调整
验证数据流:

确认从 AWS 服务到 CloudWatch,再到 New Relic 的数据流是否顺畅且无误。
优化和调整:

根据实际监控需求调整指标的抓取频率和日志的细节级别。
监控 Lambda 函数的性能和成本,必要时进行调整。
通过这种方式,您可以利用 New Relic 强大的分析和可视化工具,对 AWS 资源的性能和健康状况进行更深入的监控和分析。
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值