ЁЯУЗ рдзрдбрд╛ 04 тАФ Service catalog: рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧрдЦреЛрд▓реАрдЪреА рдиреЛрдВрджрд╡рд╣реА
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 04 ┬╖ рдорд╛рдЧреЗ: lesson-03-golden-paths ┬╖ рдкреБрдвреЗ: lesson-05-self-service-infra
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ03, рдЖрдгрд┐ service catalog: рдкреНрд░рддреНрдпреЗрдХ service рдЖрдгрд┐ resource рдЪреА рдПрдХ рдиреЛрдВрджрд╡рд╣реА, рддрд┐рдЪрд╛
рдорд╛рд▓рдХ рдХреЛрдг, рдЖрдгрд┐ рддреА рдХрд╢рд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЖрд╣реЗ. рддреНрдпрд╛рд╡рд░реВрди рдкрд╣рд╛рдЯреЗ 3 рд╡рд╛рдЬрддрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛
рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рдорд┐рд│рддрд╛рдд: рдореА рдХреЛрдгрд╛рд▓рд╛ рдлреЛрди рдХрд░реВ, рд╣реЗ рдмрдВрдж рдкрдбрд▓реЗ рддрд░ рдЖрдгрдЦреА рдХрд╛рдп рдмрдВрдж рдкрдбрддреЗ, рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛
services рдЪрд╛ рдЖрддрд╛ рдХреЛрдгреАрдЪ рдорд╛рд▓рдХ рдирд╛рд╣реА. idp/office.py рдордзрд▓реЗ Catalog,
idp/demo.py рдордзрд▓реЗ catalog() рдЖрдгрд┐ school_catalog().
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд╢рд╛рд│реЗрдЪреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрдЪреА рдПрдХ рдиреЛрдВрджрд╡рд╣реА ЁЯУЗ рдареЗрд╡рддреЗ: "рдЦреЛрд▓реА 12 тАФ рд╡рд┐рдЬреНрдЮрд╛рди рдкреНрд░рдпреЛрдЧрд╢рд╛рд│рд╛ тАФ рдорд╛рд▓рдХ рд╡рд┐рдЬреНрдЮрд╛рди рд╡рд┐рднрд╛рдЧ тАФ рдЧреЕрд╕рдЪреА рд▓рд╛рдЗрди рдЖрдгрд┐ рдЖрдкрддреНрдХрд╛рд▓реАрди рджрд╛рд░ рд▓рд╛рдЧрддреЗ."
рдПрдХрд╛ рд╕рдХрд╛рд│реА рдЧреЕрд╕рдЪреА рд▓рд╛рдЗрди рдмрд┐рдШрдбрддреЗ. рдХреЛрдгрд╛рд╡рд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЛ? рджреАрдкрд┐рдХрд╛ рдиреЛрдВрджрд╡рд╣реА рдЙрдШрдбрддреЗ рдЖрдгрд┐ "рд▓рд╛рдЧрддреЗ" рдЪреЗ рдмрд╛рдг рдЙрд▓рдЯреЗ рдлрд┐рд░рддреЗ: рд╡рд┐рдЬреНрдЮрд╛рди рдкреНрд░рдпреЛрдЧрд╢рд╛рд│реЗрд▓рд╛ рдЧреЕрд╕рдЪреА рд▓рд╛рдЗрди рд▓рд╛рдЧрддреЗ, рдЖрдгрд┐ рдкрд╛рд▓рдХрд╛рдВрдЪреНрдпрд╛ open day рд▓рд╛ рд╡рд┐рдЬреНрдЮрд╛рди рдкреНрд░рдпреЛрдЧрд╢рд╛рд│рд╛ рд▓рд╛рдЧрддреЗ. рдореНрд╣рдгрдЬреЗ рдПрдХ рдирд╛рд╣реА, рддрд░ рджреЛрди рдЧреЛрд╖реНрдЯреА рдЕрдбрдЪрдгреАрдд рдЖрд╣реЗрдд.
рдордЧ рддрд┐рд▓рд╛ рджреЛрди рд╡рд┐рдЪрд┐рддреНрд░ рдиреЛрдВрджреА рд╕рд╛рдкрдбрддрд╛рдд. canteen orders рдЦреЛрд▓реАрдЪрд╛ рдорд╛рд▓рдХ "2019 hackathon team" рдЕрд╕реЗ рд▓рд┐рд╣рд┐рд▓реЗ рдЖрд╣реЗ. рддреА team рд╡рд░реНрд╖рд╛рдВрдкреВрд░реНрд╡реАрдЪ рд╡рд┐рдЦреБрд░рд▓реА. fees рдЦреЛрд▓реАрд▓рд╛ рдорд╛рд▓рдХрдЪ рдирд╛рд╣реА. рдпрд╛ рдЕрдирд╛рде рдЦреЛрд▓реНрдпрд╛ рдЖрд╣реЗрдд: рдЕрдЬреВрдирд╣реА рд╡рд╛рдкрд░рд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрдг рдХреЛрдгреАрдЪ рди рд╕рд╛рдВрднрд╛рд│рдгрд╛рд▒реНрдпрд╛. рддрд┐рдереЗ рдХрд╛рд╣реА рдмрд┐рдШрдбрд▓реЗ рддрд░ рдХреЛрдгрд╛рд▓рд╛рдЪ рдлреЛрди рдЬрд╛рдд рдирд╛рд╣реА.
рдЖрдгрд┐ fees рдЦреЛрд▓реА рдореНрд╣рдгрддреЗ рдХреА рддрд┐рд▓рд╛ "payments office" рд▓рд╛рдЧрддреЗ тАФ рдкрдг рдиреЛрдВрджрд╡рд╣реАрдд payments office рдирд╛рд╡рд╛рдЪреЗ рдХрд╛рд╣реАрдЪ рдирд╛рд╣реА. рд╣рд╛ рдПрдХ рддреБрдЯрд▓реЗрд▓рд╛ рд╕рдВрджрд░реНрдн рдЖрд╣реЗ: рдПрдХрддрд░ рддреЗ рд╣рд░рд╡рд▓реЗ рдЖрд╣реЗ, рдХрд┐рдВрд╡рд╛ рдЯреАрдк рдЪреБрдХреАрдЪреА рдЖрд╣реЗ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
pp["parent-portal<br/>maths"] --> er["exam-results<br/>science"]
pp --> tt["timetable<br/>maths"]
er --> db[("results-db<br/>science")]
er --> auth["auth<br/>facilities-office"]
tt --> auth
co["canteen-orders<br/>тЪая╕П team-2019-hackathon"] --> auth
fe["fees<br/>тЪая╕П no owner"] --> auth
fe -.-> pay["тЭУ payments-api<br/>not in the catalog"]
ls["library-search<br/>library"] -.-> si["тЭУ search-index<br/>not in the catalog"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/platform-engineering/lesson-diagrams.html#l04
тЭУ рдХрд╛рдп
- Service catalog тАФ software components, рддреНрдпрд╛рдВрдЪреА metadata рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рд╕рдВрдмрдВрдз рдпрд╛рдВрдЪреА рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдпрд╛рджреА. рдмрд╣реБрддреЗрдХ developer portals рдЪреЗ рд╣реЗ рд╣реГрджрдп рдЖрд╣реЗ (Backstage рдЪрд╛ Software Catalog, Port, Cortex, OpsLevel).
- catalog-info.yaml тАФ Backstage рдЪреА рдкрджреНрдзрдд: рдкреНрд░рддреНрдпреЗрдХ repo рдордзреНрдпреЗ, code рдЪреНрдпрд╛ рд╢реЗрдЬрд╛рд░реА, entity рдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд░реА рдПрдХ YAML file. Catalog рдпрд╛ files рд╡рд╛рдЪрддреЛ, рдореНрд╣рдгреВрди рдиреЛрдВрджрд╡рд╣реА рддреА рдЬреНрдпрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рдЬрд╡рд│ рд░рд╛рд╣рддреЗ.
- Entity kinds тАФ Backstage рдЗрддрд░рд╛рдВрдмрд░реЛрдмрд░
Component(service, website, library),Resource(database, bucket, queue),API,System,Domain,GroupрдЖрдгрд┐Userрд╡рд╛рдкрд░рддреЛ. рд╣рд╛ labComponentрдЖрдгрд┐Resourceрд╡рд╛рдкрд░рддреЛ. - Owner тАФ
spec.owner: entity рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ group. "рдореА рдХреЛрдгрд╛рд▓рд╛ рдлреЛрди рдХрд░реВ?" рдпрд╛рдЪреЗ рд╣реЗ рдЙрддреНрддрд░ рдЖрд╣реЗ. Owner рд╣реА рдПрдХ рд╡реНрдпрдХреНрддреА рдирд╕реВрди team рдЕрд╕рд╛рд╡реА, рдореНрд╣рдгрдЬреЗ рд╕реБрдЯреНрдЯреНрдпрд╛ рдЖрдгрд┐ рдиреЛрдХрд░реА рдмрджрд▓ рдпрд╛рддреВрди рддреА рдЯрд┐рдХрддреЗ. - Lifecycle тАФ Backstage рдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдордзреНрдпреЗ
experimental,productionрдХрд┐рдВрд╡рд╛deprecated. рд╡рд╛рдЪрдгрд╛рд▒реНрдпрд╛рдВрдирд╛ рддреЗ рд╕рд╛рдВрдЧрддреЗ рдХреА рддреНрдпрд╛рд╡рд░ рдХрд┐рддреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рд╛рдпрдЪрд╛ рдЖрдгрд┐ рдХрд┐рддреА рдЕрд╡рд▓рдВрдмреВрди рд░рд╛рд╣рд╛рдпрдЪреЗ. - Dependencies тАФ
spec.dependsOn: рдпрд╛ entity рд▓рд╛ рдХрд╛рдп рд▓рд╛рдЧрддреЗ. рдЙрд▓рдЯреЗ рдлрд┐рд░рд▓реЗ рдХреА рддреЗ blast radius рджреЗрддрд╛рдд: рдПрдХ рдЧреЛрд╖реНрдЯ рдмрдВрдж рдкрдбрд▓реА рддрд░ рдмрдВрдж рдкрдбреВ рд╢рдХрдгрд╛рд░реЗ рд╕рдЧрд│реЗ. - Orphan (рдпрд╛ lab рдордзреНрдпреЗ) тАФ owner рдирд╕рд▓реЗрд▓реА entity, рдХрд┐рдВрд╡рд╛ рдЬреНрдпрд╛рдЪрд╛ owner group рдЖрддрд╛ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд
рдирд╛рд╣реА рдЕрд╢реА. тЪая╕П Backstage рд╕реНрд╡рддрдГ "orphan" рд╣рд╛ рд╢рдмреНрдж рд╡реЗрдЧрд│реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрд╕рд╛рдареА рд╡рд╛рдкрд░рддреЛ: рдЕрд╢реА entity рдЬрд┐рд▓рд╛
рддрд┐рдЪреЗ source location рдЖрддрд╛ рддрдпрд╛рд░ рдХрд░рдд рдирд╛рд╣реА (рддрд┐рдЪреНрдпрд╛рд╡рд░
backstage.io/orphan: 'true'рд╣реА annotation рд▓рд╛рд╡рд▓реЗрд▓реА рдЕрд╕рддреЗ). рд╢рдмреНрдж рдПрдХрдЪ, рд╕рдорд╕реНрдпрд╛ рд╡реЗрдЧрд│реА тАФ рджреЛрдиреНрд╣реА рд╕рд╛рдл рдХрд░рд╛рдпрд▓рд╛ рд╣рд╡реНрдпрд╛рдд. - Broken reference тАФ
dependsOncatalog рд▓рд╛ рдорд╛рд╣реАрдд рдирд╕рд▓реЗрд▓реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЛ.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг рдореЛрдареНрдпрд╛ рд╕рдВрд╕реНрдереЗрдд incident рдЪреНрдпрд╛ рд╡реЗрд│реА рд╕рд░реНрд╡рд╛рдд рдорд╣рд╛рдЧрдбрд╛ рдкреНрд░рд╢реНрди рдЕрд╕рддреЛ "рд╣реЗ рдХреЛрдгрд╛рдЪреЗ рдЖрд╣реЗ?". Catalog рдирд╕реЗрд▓ рддрд░ рдЙрддреНрддрд░ chat рдЪреНрдпрд╛ рдЗрддрд┐рд╣рд╛рд╕рд╛рдд рдЖрдгрд┐ рд▓реЛрдХрд╛рдВрдЪреНрдпрд╛ рдбреЛрдХреНрдпрд╛рдд рд░рд╛рд╣рддреЗ. Catalog рдЕрд╕реЗрд▓ рддрд░ рддреЗ рдлрдХреНрдд рд╢реЛрдзрдгреЗ рдЕрд╕рддреЗ. рдпрд╛ рдХреЛрд░реНрд╕рдордзрд▓реНрдпрд╛ рдкреБрдврдЪреНрдпрд╛ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдЧрд│реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдВрдЪрд╛ рдкрд╛рдпрд╛ рд╕реБрджреНрдзрд╛ catalog рдЖрд╣реЗ: scorecards (рдзрдбрд╛ 10) catalog рдиреЛрдВрджреАрдВрдирд╛ рдЧреБрдг рджреЗрддрд╛рдд, portal (рдзрдбрд╛ 12) рддреНрдпрд╛рд╡рд░ рдмрд╛рдВрдзрд▓реЗ рдЬрд╛рддреЗ, рдЖрдгрд┐ policies (рдзрдбрд╛ 09) рдкреНрд░рддреНрдпреЗрдХ service рд▓рд╛ owner рдЕрд╕рдгреЗ рдмрдВрдзрдирдХрд╛рд░рдХ рдХрд░реВ рд╢рдХрддрд╛рдд.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
idp/office.py рдордзрд▓реЗ Catalog(groups) catalog-info.yaml рд╕рд╛рд░рдЦреНрдпрд╛ рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛
рдиреЛрдВрджреА рдареЗрд╡рддреЗ: kind, name, owner, lifecycle, depends_on. owned_by(group)
рдПрдХрд╛ group рдЪреНрдпрд╛ рдиреЛрдВрджреАрдВрдЪреА рдпрд╛рджреА рджреЗрддреЗ; orphans() рдЬреНрдпрд╛рдВрдЪрд╛ owner рдирд╛рд╣реА рдХрд┐рдВрд╡рд╛ рдорд╛рд╣реАрдд рдЕрд╕рд▓реЗрд▓рд╛ group
рдирд╛рд╣реА рдЕрд╢рд╛ рдиреЛрдВрджреА рд╢реЛрдзрддреЗ; broken_refs() catalog рдордзреНрдпреЗ рдирд╕рд▓реЗрд▓реА depends_on рдирд╛рд╡реЗ рд╢реЛрдзрддреЗ; рдЖрдгрд┐
dependents(name) dependency рдЪреЗ рдмрд╛рдг рдЙрд▓рдЯреЗ, рд╕рд╛рдЦрд│реНрдпрд╛ рдкрдХрдбрдд рдлрд┐рд░рддреЗ рдЖрдгрд┐ blast radius рджреЗрддреЗ.
idp/demo.py рдордзрд▓реЗ school_catalog() рд╢рд╛рд│реЗрдЪреНрдпрд╛ 8 рдиреЛрдВрджреА рдмрдирд╡рддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 idp/demo.py catalog
python3 - <<'EOF'
import sys; sys.path.insert(0, "idp"); from demo import school_catalog
c = school_catalog()
print("if timetable breaks:", c.dependents("timetable"))
print("if exam-results breaks:", c.dependents("exam-results"))
c.register("Component", "canteen-orders", "facilities-office", lifecycle="experimental", depends_on=["auth"]) # adopted
c.register("Resource", "search-index", "library") # declared
print("orphans now:", c.orphans(), "┬╖ broken references now:", c.broken_refs())
print("library owns:", c.owned_by("library"))
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
catalog рд╣реЗ рдЫрд╛рдкрддреЗ:
тФАтФА the catalog holds 8 entries owned by groups ['science', 'maths', 'library', 'facilities-office']
science owns ['exam-results', 'results-db']
orphans (no owner, or the owner group is gone): ['canteen-orders', 'fees']
broken references: [('fees', 'payments-api'), ('library-search', 'search-index')]
тФАтФА blast radius тАФ if auth breaks, these depend on it: ['canteen-orders', 'exam-results', 'fees', 'parent-portal', 'timetable']
if results-db breaks: ['exam-results', 'parent-portal']
рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:
if timetable breaks: ['parent-portal']
if exam-results breaks: ['parent-portal']
orphans now: ['fees'] ┬╖ broken references now: [('fees', 'payments-api')]
library owns: ['library-search', 'search-index']
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
results-db рдЪрд╛ рдереЗрдЯ user рдПрдХрдЪ рдЖрд╣реЗ, exam-results, рдкрдг рддрд┐рдЪрд╛ blast radius рджреЛрди рдЖрд╣реЗ:
parent-portal рд╣реЗ exam-results рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЖрд╣реЗ, рдореНрд╣рдгреВрди рддреНрдпрд╛рд▓рд╛рд╣реА рдлрдЯрдХрд╛ рдмрд╕рддреЛ. рд╕рд╛рдЦрд│реА рдлрд┐рд░рдгреЗ
рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ. auth рд╣рд╛ рд╢рд╛рд│реЗрддрд▓рд╛ рд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрдд рд╡рд╛рдЯреВрди рдШреЗрддрд▓реЗрд▓рд╛ рднрд╛рдЧ рдЖрд╣реЗ тАФ 5 рдиреЛрдВрджреА рддреНрдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди
рдЖрд╣реЗрдд тАФ рдЖрдгрд┐ рдореНрд╣рдгреВрдирдЪ рддреНрдпрд╛рдЪрд╛ рдорд╛рд▓рдХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдп рдЖрд╣реЗ. рдЖрдгрд┐ рдиреЛрдВрджрд╡рд╣реА рдЬрд╛рд╣реАрд░ рдХрд░реВрди рдирд╛рд╣реА, рддрд░
рдХрд░реВрди рд╕реБрдзрд╛рд░рддреЗ: рдПрдХрд╛ adoption рдиреЗ canteen рдЪреЗ рдЕрдирд╛рдердкрдг рджреВрд░ рдХреЗрд▓реЗ, рдПрдХрд╛ рдЬрд╛рд╣реАрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ resource рдиреЗ
рдПрдХ рддреБрдЯрд▓реЗрд▓рд╛ рд╕рдВрджрд░реНрдн рджреБрд░реБрд╕реНрдд рдХреЗрд▓рд╛. fees рдЕрдЬреВрдирд╣реА рддреБрдЯрд▓реЗрд▓реНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рд╕рд╣ рдЕрдирд╛рде рдЖрд╣реЗ тАФ рд╣реЗрдЪ рдкреБрдврдЪреЗ рдХрд╛рдо.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдПрдХрджрд╛ рд╣рд╛рддрд╛рдиреЗ рднрд░рд▓реЗрд▓рд╛ рдЖрдгрд┐ рдХрдзреАрдЪ рдЕрджреНрдпрдпрд╛рд╡рдд рди рдХреЗрд▓реЗрд▓рд╛ catalog тАФ рддреНрдпрд╛рдРрд╡рдЬреА file рдкреНрд░рддреНрдпреЗрдХ repo рдордзреНрдпреЗ рдареЗрд╡рд╛
- groups рдРрд╡рдЬреА рд╡реНрдпрдХреНрддреА рдЕрд╕рд▓реЗрд▓реЗ owners ("Aishwarya") тАФ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдХрд░реА рдмрджрд▓рд╛рдмрд░реЛрдмрд░ рддреЗ рдЬреБрдиреЗ рд╣реЛрддрд╛рдд
- рдХреЛрдгрддреНрдпрд╛рдЪ dependencies рдЬрд╛рд╣реАрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдирд╛рд╣реАрдд, рдореНрд╣рдгреВрди blast radius рдиреЗрд╣рдореА "рдХреЛрдгреАрдЪ рдирд╛рд╣реА"
- catalog рд▓рд╛ scorecards рдЖрдгрд┐ policy рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓рд╛ data рди рдорд╛рдирддрд╛ рдлрдХреНрдд documentation рдорд╛рдирдгреЗ
- orphans рдЖрдгрд┐ broken references рдЪрд╛ рдирд┐рдпрдорд┐рдд рдЕрд╣рд╡рд╛рд▓ рдирд╛рд╣реА тАФ рддреЗ рдлрдХреНрдд рд╡рд╛рдврдд рдЬрд╛рддрд╛рдд
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
exam-results рд╕рд╛рдареА рдЦрд░реА Backstage catalog-info.yaml, рддрд┐рдЪреНрдпрд╛ repo рдЪреНрдпрд╛ root рд╡рд░ рдареЗрд╡рд▓реЗрд▓реА:
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: exam-results
description: Publishes exam results to students and parents
annotations:
github.com/project-slug: school/exam-results
spec:
type: service
lifecycle: production
owner: group:science
dependsOn:
- resource:results-db
- component:auth
Backstage рдЕрд╢рд╛ files рддреНрдпрд╛рдЪреНрдпрд╛ app-config.yaml рдордзрд▓реНрдпрд╛ catalog.locations рдордзреВрди, рдХрд┐рдВрд╡рд╛
рд╕рдВрд╕реНрдереЗрдЪреНрдпрд╛ repositories scan рдХрд░рдгрд╛рд▒реНрдпрд╛ discovery provider рдордзреВрди рд╢реЛрдзрддреЛ. рдЦрд▒реНрдпрд╛ instance рд╡рд░,
catalog REST API рдорд╛рд▓рдХреАрдЪреНрдпрд╛ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдереЗрдЯ рдЙрддреНрддрд░реЗ рджреЗрддреЛ:
curl -s "https://backstage.school.example/api/catalog/entities/by-query?filter=spec.owner=group:default/science" \
-H "Authorization: Bearer $TOKEN" | jq -r '.items[].metadata.name'
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: incident рдЪреНрдпрд╛ рд╡реЗрд│реА рдпреЛрдЧреНрдп рд▓реЛрдХрд╛рдВрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рдЬрд▓рдж рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ catalog. "рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реЗрд▓рд╛ owner рдЖрд╣реЗ" рд╣рд╛ рдПрдХ рдирд┐рдпрдо (рдзрдбрд╛ 09) рдЖрдгрд┐ рдПрдХ scorecard check (рдзрдбрд╛ 10) рдмрдирд╡рд╛, рдлрдХреНрдд рдЖрд╢рд╛ рдирд╛рд╣реА.
тПня╕П рдкреБрдвреЗ
рднрд╛рдЧ 1 рдкреВрд░реНрдг рдЭрд╛рд▓рд╛: рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ рдХрд╛, рдЖрдзреА рдХрд╛рдп рдмрдирд╡рд╛рдпрдЪреЗ, service рдХрд╢реА рд╕реБрд░реВ рдХрд░рд╛рдпрдЪреА рдЖрдгрд┐ рддрд┐рдЪрд╛ owner рдХрд╕рд╛ рд╢реЛрдзрд╛рдпрдЪрд╛. рднрд╛рдЧ 2 рдзрдбрд╛ 02 рдордзрд▓реНрдпрд╛ рд╕рд░реНрд╡рд╛рдд рдореЛрдареНрдпрд╛ рддреНрд░рд╛рд╕рд╛рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрддреЛ: ticket рд╢рд┐рд╡рд╛рдп database рдорд┐рд│рд╡рдгреЗ.
git checkout lesson-05-self-service-infra