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,那么就不需要测试了