Membuat crawler untuk S3 bucket ini betul-betul menguji kesabaran. Setup yang sama cuba folder dalam bucket sahaja berbeza.
Jadi kali ini saya bawakan ansible playbook untuk mencipta Glue Crawler pula. Module yan digunakan adalah glue_crawler
Kod seperti dibawah
---
- name: Deployment for Data Offloading
hosts: localone
connection: local
vars:
crawlers_info_raw:
- s3bucket_dir: txn_main
crawler_name: workshop_txn_raw
- s3bucket_dir: txn_categories
crawler_name: workshop_txn_categories_raw
- s3bucket_dir: txn_subcategories
crawler_name: workshop_txn_subcategories_raw
tasks:
- name: Create new Crawler RAWS files [Look GOOD]
community.aws.glue_crawler:
name: "workshop_{{ item.crawler_name }}"
database_name: "workshop-db"
role: "CrawlerUserAWS"
schema_change_policy:
delete_behavior: DEPRECATE_IN_DATABASE
update_behavior: UPDATE_IN_DATABASE
recrawl_policy:
recrawl_behavior: CRAWL_EVERYTHING
targets:
S3Targets:
- Path: "s3://workshop-data-raw/{{ item.s3bucket_dir }}/"
Exclusions:
- "**.XYZ"
table_prefix: "workshop_"
state: present
with_items: '{{ crawlers_info_raw }}'
Ini bahagian crawler variables. Disebabkan bucket directory dan crawler ini sepasang saya buat variable dalam bentuk sebegini.
crawlers_info_raw:
- s3bucket_dir: txn_main
crawler_name: workshop_txn_raw
- s3bucket_dir: txn_categories
crawler_name: workshop_txn_categories_raw
- s3bucket_dir: txn_subcategories
crawler_name: workshop_txn_subcategories_raw
Ini pula bahagian task.
- name: Create new Crawler RAWS files [Look GOOD]
community.aws.glue_crawler:
name: "workshop_{{ item.crawler_name }}"
database_name: "workshop-db"
role: "CrawlerUserAWS"
schema_change_policy:
delete_behavior: DEPRECATE_IN_DATABASE
update_behavior: UPDATE_IN_DATABASE
recrawl_policy:
recrawl_behavior: CRAWL_EVERYTHING
targets:
S3Targets:
- Path: "s3://workshop-data-raw/{{ item.s3bucket_dir }}/"
Exclusions:
- "**.XYZ"
table_prefix: "workshop_"
state: present
with_items: '{{ crawlers_info_raw }}'
Berikut adalah komponen-komponen yang ada:
name
adalah nama crawler tersebut
name: "workshop_{{ item.crawler_name }}"
database_name
adalah database dalam glue catalog (boleh diaccess melalui athena). Pastikan anda mencipta database ini dahulu sebelum anda map database ini kepada crawler.
database_name: "workshop-db"
role
ini adalah role yang digunakan oleh crawler untuk menjalankan glue crawler ini. Pastikan role ini mempunyai access kepada S3 bucket tersebut dan mempunyai access kepada penggunaan Glue Crawler.
role: "CrawlerUserAWS"
Bahagian ini menjawab apa yang akan berlaku jika schema dalam objek(file) anda berubah? delete_behavior
menentukan perkara yang akan berlaku jika ada objek yang dihapuskan. update_behavior
menentukan perkara yang berlaku jika schema berubah.
schema_change_policy:
delete_behavior: DEPRECATE_IN_DATABASE
update_behavior: UPDATE_IN_DATABASE
recrawl_policy menentukan perilaku crawler anda. Ingin crawl semua folder semula gunakan CRAWL_EVERYTHING .
Untuk folder baharu sahaja gunakan CRAWL_NEW_FOLDERS_ONLY
recrawl_policy:
recrawl_behavior: CRAWL_EVERYTHING
targets
merujuk kepada path data anda. Dalam contoh saya, target saya adalah S3 jadi saya gunakan S3Target
. Sekiranya saya ingin crawl database RDS saya boleh gunakan JdbcTargets
. Path
adalah S3 path . Exclusions
digunakan jika anda ingin menapis file format atau file name yang tidak diingini.
targets:
S3Targets:
- Path: "s3://workshop-data-raw/{{ item.s3bucket_dir }}/"
Exclusions:
- "**.XYZ"
Anda boleh meletakkan prefix table anda jika anda mahu. Sebagai contoh jika folder yang anda crawl itu adalah txn_main
dengan prefix ini table anda akan jadi workshop_txn_main
table_prefix: "workshop_"
Seperti biasa bahagian ini adalah untuk menyatakan sama ada anda ingin buat atau delete. Jika present
bermakna anda ingin wujudkan crawler ini dan jika absent
and ingin hapuskan crawler ini.
state: present
Selamat bereksperimen