1.     首先准备了Glue job,并且没有利用明文来记录access key和secret key id,利用IAM来进行测试读取本账号的Table

2.     选择不同的方式测试bookmark,区别在于Athena的表是不是在Data Catalog中存在

主要存在的问题是,对于S3桶并不是在自己账号下的Table,主要存在着这样的情况。

即在Databases能查看到对应的数据库,但是点击进去之后没有对应的Table

3.     Bookmark的使用

https://docs.aws.amazon.com/zh_cn/glue/latest/dg/monitor-continuations.html

创建了一个个glue job 并enable 了bookmark

但是在第一次导入数据成功之后,后来再执行任务,仍然是全量刷新了,是存在什么问题吗,transformation_ctx?

如果是这个原因,能绕过这个参数吗?

经确认是这个参数导致的,所以获取DataFrame的逻辑改为了

Csv df = glueContext.create_dynamic_frame.from_options(connection_type=”s3″, connection_options={“paths”: [s3_path]}, format=”parquet”, format_options={“withHeader”:”true”, “escaper”:'”‘,”quoteChar”:”\””},transformation_ctx=args[‘JOB_NAME’])
parquet df = glueContext.create_dynamic_frame.from_options(connection_type=”s3″, connection_options={“paths”: [s3_path]}, format=”parquet”,transformation_ctx=args[‘JOB_NAME’])

未来由于可能一个表一个对应的JOB_Name,所以可能transformation_ctx设置为JOB_NAME 正好

4.     确认当JOB运行失败的时候,得到的信息

只是监听Glue job的状态,则直接上EventBridge即可

首先是在EventBridge中创建了一个规则,选择Glue Job State Change,实践格式基本如下

{

“version”: “0”,

“id”: “abcdef00-1234-5678-9abc-def012345678”,

“detail-type”: “Glue Job State Change”,

“source”: “aws.glue”,

“account”: “123456789012”,

“time”: “2017-09-07T18:57:21Z”,

“region”: “us-east-1”,

“resources”: [],

“detail”: {

“jobName”: “MyJob”,

“severity”: “INFO”,

“state”: “SUCCEEDED”,

“jobRunId”: “jr_abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789”,

“message”: “Job run succeeded”

}

}

这里目标是status为FAILED或者TIMEOUT的实践

所以创建了事件模式为

{

“source”: [“aws.glue”],

“detail-type”: [“Glue Job State Change”],

“detail”: {

“state”: [“FAILED”, “TIMEOUT”]

}

}

选择目标为SNS,并创建对应的接收SNS

在测试环境,修改代码让Glue job陷入一个固定失败的状态

得到的邮件内容为

{

“version”: “0”,

“id”: “dd8336ae-dba5-3433-aeb9-5445e086529a”,

“detail-type”: “Glue Job State Change”,

“source”: “aws.glue”,

“account”: “424679663445”,

“time”: “2023-10-10T05:55:06Z”,

“region”: “cn-north-1”,

“resources”: [],

“detail”: {

“jobName”: “te_aosp_store_cancel_download_idc”,

“severity”: “ERROR”,

“state”: “FAILED”,

“jobRunId”: “jr_b83860d1685e666b18b29febd3d839dd66668c5a5275d12f4ec546b5a76203ad”,

“message”: “An error occurred while calling o100.getDynamicFrame. `s3a://xxxxx/xxxxx’: getFileStatus on s3a://xxxx/xxxx: com.amazonaws.services.s3.model.AmazonS3Exception: The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: MRD4KFT2E41FE8MV; S3 Extended Request ID: Sk/6ycn+5qbMcrlImyyONphEqnEKUEZNdrVqD2eXIXskfixxYNUfnmmCTEnVk3czymvz+CupsqE=; Proxy: null), S3 Extended Request ID: Sk/6ycn+5qbMcrlImyyONphEqnEKUEZNdrVqD2eXIXskfixxYNUfnmmCTEnVk3czymvz+CupsqE=:NoSuchBucket: The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: MRD4KFT2E41FE8MV; S3 Extended Request ID: Sk/6ycn+5qbMcrlImyyONphEqnEKUEZNdrVqD2eXIXskfixxYNUfnmmCTEnVk3czymvz+CupsqE=; Proxy: null)”

}

}

其中可以看到错误信息,jobname等关键信息

同理AWS Glue Workflow支持EventBridge进行触发,触发文档可以参考如下

https://docs.aws.amazon.com/zh_cn/glue/latest/dg/starting-workflow-eventbridge.html

当然这是最为标准的,如果希望只针对特定的glue job,要么是持续不断的更新规则

要么就是在监听策略中,利用前缀匹配或者后缀匹配来做,同时确保动态生成的job’名称携带对应的前缀

5.     确认能否跨账号使用bookmark

首先在选择一个跨账号的,数据体量小的数据集来进行测试

选择了此table进行读取”xxxxxx”.”te_data_”

测试得到,可以跨账号读取

再次测试是否可以支持bookmark

在第一次读取后,truncate table,并运行第二次任务,得到结果是进行了事务性记录,并没有重复执行,按理bookmark可行

6.     测试是否可以长时间使用sts

按照现在预期的话,如果直接使用access_key,那么就不需要测试了

发表评论

邮箱地址不会被公开。 必填项已用*标注