Infrastructure as Code part1

🌻TruthfulΒ·2023λ…„ 9μ›” 13일

πŸ“šν•™μŠ΅λͺ©ν‘œ

πŸ“Œ ν΄λΌμš°λ“œ μ†”λ£¨μ…˜μ—μ„œ μŠ€ν¬λ¦½νŒ…μ΄ μ€‘μš”ν•œ 이유 μ΄ν•΄ν•˜κΈ°

πŸ“Œ AZ cli 슀크립트 μ‹€ν–‰ν•˜κΈ°

πŸ“Œ AZ CLIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ήμ•± λ°°ν¬ν•˜κΈ°.


Infrastructure as Code

"Infrastructure as Code" (IaC)λŠ” 기본적으둜 IT μž₯λΉ„λ‚˜ μ‹œμŠ€ν…œ μ„€μ • 같은 인프라λ₯Ό μˆ˜λ™μœΌλ‘œ μ„€μ •ν•˜λŠ” λŒ€μ‹  μ½”λ“œλ‘œ λ§Œλ“€μ–΄μ„œ μžλ™μœΌλ‘œ μ„€μ •ν•˜λŠ” 방법을 λ§ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ„œλ²„λ₯Ό μ…‹νŒ…ν•˜λ €λ©΄ 운영체제λ₯Ό μ„€μΉ˜ν•˜κ³ , ν•„μš”ν•œ ν”„λ‘œκ·Έλž¨μ„ μ„€μΉ˜ν•˜κ³ , λ„€νŠΈμ›Œν¬ 섀정을 ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이 λͺ¨λ“  μž‘μ—…μ„ μˆ˜λ™μœΌλ‘œ ν•˜λ©΄ μ‹œκ°„λ„ 많이 λ“€κ³ , 였λ₯˜λ„ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ IaCλ₯Ό μ‚¬μš©ν•˜λ©΄ 이 λͺ¨λ“  섀정을 μ½”λ“œλ‘œ μž‘μ„±ν•˜κ³ , κ·Έ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ μžλ™μœΌλ‘œ μ„œλ²„κ°€ μ›ν•˜λŠ” μ„€μ •λŒ€λ‘œ μ€€λΉ„λ©λ‹ˆλ‹€.

ν΄λΌμš°λ“œ μ†”λ£¨μ…˜μ—μ„œ μŠ€ν¬λ¦½νŒ…μ΄ μ€‘μš”ν•œ 이유 μ΄ν•΄ν•˜κΈ°

❓ ν΄λΌμš°λ“œ μ†”λ£¨μ…˜μ—μ„œ μŠ€ν¬λ¦½νŒ…

νŠΉμ • λͺ…λ Ήμ–΄λ‚˜ μ½”λ“œ 쑰각을 μ‚¬μš©ν•˜μ—¬ ν΄λΌμš°λ“œ λ¦¬μ†ŒμŠ€μ™€ μ„œλΉ„μŠ€λ₯Ό μžλ™ν™”ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ν΄λΌμš°λ“œμ— 컴퓨터(μ„œλ²„)λ₯Ό μ„ΈνŒ…ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

이 μ„œλ²„λ₯Ό μ„ΈνŒ…ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ—¬λŸ¬ λ‹¨κ³„μ˜ μ„€μ •κ³Ό μž‘μ—…μ΄ ν•„μš”ν•©λ‹ˆλ‹€.
예λ₯Ό λ“€λ©΄, 운영 체제 μ„€μΉ˜, ν•„μš”ν•œ ν”„λ‘œκ·Έλž¨ μ„€μΉ˜, λ„€νŠΈμ›Œν¬ μ„€μ •, λ³΄μ•ˆ μ„€μ • 등이 있죠.

이 λͺ¨λ“  μž‘μ—…μ„ 직접 μˆ˜λ™μœΌλ‘œ 클릭과 μž…λ ₯을 톡해 ν•˜κ²Œ 되면 μ‹œκ°„λ„ 많이 λ“€κ³ , μ‹€μˆ˜ν•  ν™•λ₯ λ„ λ†’μ•„μ§‘λ‹ˆλ‹€.

이제, 이 λͺ¨λ“  μž‘μ—…μ„ ν•œ λ²ˆμ— μžλ™μœΌλ‘œ μˆ˜ν–‰ν•  수 있게 ν•˜λŠ” 'λ ˆμ‹œν”Ό'λ‚˜ 'λͺ…λ Ήμ„œ'κ°€ μžˆλ‹€κ³  μƒμƒν•΄λ³΄μ„Έμš”. 이 'λ ˆμ‹œν”Ό'λ₯Ό μ‹€ν–‰λ§Œ ν•˜λ©΄, λͺ¨λ“  μ„€μ •κ³Ό μ„€μΉ˜κ°€ μžλ™μœΌλ‘œ μ™„λ£Œλœλ‹€λ©΄ νŽΈλ¦¬ν•˜μ§€ μ•Šμ„κΉŒμš”?

ν΄λΌμš°λ“œ μŠ€ν¬λ¦½νŒ…μ€ λ°”λ‘œ 이런 'λ ˆμ‹œν”Ό'λ‚˜ 'λͺ…λ Ήμ„œ'와 κ°™μŠ΅λ‹ˆλ‹€.

νŠΉμ • μž‘μ—…μ΄λ‚˜ 일련의 과정을 μžλ™ν™”ν•˜κΈ° μœ„ν•œ μ½”λ“œλ‚˜ λͺ…λ Ήμ–΄ 쑰각을 λ§ν•˜λŠ” 것이죠.

결과적으둜, ν΄λΌμš°λ“œ μ†”λ£¨μ…˜μ—μ„œμ˜ μŠ€ν¬λ¦½νŒ…μ€ 효율적인 λ¦¬μ†ŒμŠ€ 관리, μ‹œκ°„ μ ˆμ•½, 그리고 μΌκ΄€λœ μž‘μ—… μˆ˜ν–‰μ„ μœ„ν•΄ κΌ­ ν•„μš”ν•œ λ„κ΅¬μž…λ‹ˆλ‹€.


ν΄λΌμš°λ“œ μ†”λ£¨μ…˜μ—μ„œ μŠ€ν¬λ¦½νŒ…μ€ μ™œ μ€‘μš”ν•œκ°€μš”β“

μžλ™ν™”(Automation): ν΄λΌμš°λ“œμ—μ„œλŠ” 수백 λ˜λŠ” 수천의 λ¦¬μ†ŒμŠ€λ₯Ό 관리해야 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μˆ˜λ™μœΌλ‘œ ν•˜λ €λ©΄ μ‹œκ°„μ΄ 많이 걸리며 μ‹€μˆ˜μ˜ μ—¬μ§€κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. 슀크립트λ₯Ό μ‚¬μš©ν•˜λ©΄ 반볡적인 μž‘μ—…μ„ μžλ™ν™”ν•  수 μžˆμ–΄ νš¨μœ¨μ„±μ΄ 크게 ν–₯μƒλ©λ‹ˆλ‹€.

일관성(Consistency): 슀크립트λ₯Ό μ‚¬μš©ν•˜λ©΄ λ™μΌν•œ μˆœμ„œμ™€ λ°©μ‹μœΌλ‘œ λ¦¬μ†ŒμŠ€λ₯Ό 생성, μˆ˜μ •, μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μΌκ΄€λœ ν™˜κ²½ ꡬ좕을 도와주며, μ‹€μˆ˜λ₯Ό μ€„μ—¬μ€λ‹ˆλ‹€.

ν™•μž₯μ„±(Scalability): 슀크립트λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•„μš”μ— 따라 λ¦¬μ†ŒμŠ€λ₯Ό λΉ λ₯΄κ²Œ ν™•μž₯ν•˜κ±°λ‚˜ μΆ•μ†Œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, νŠΉμ • μ‹œκ°„λŒ€μ— νŠΈλž˜ν”½μ΄ μ¦κ°€ν•˜λ©΄ μžλ™μœΌλ‘œ μΆ”κ°€ μ„œλ²„λ₯Ό λ°°ν¬ν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ 슀크립트둜 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ„œν™”(Documentation): μŠ€ν¬λ¦½νŠΈλŠ” 자체적으둜 μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”μ§€μ— λŒ€ν•œ λ¬Έμ„œμ˜ 역할을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉, νŒ€μ›μ΄λ‚˜ ν›„μž„μžκ°€ ν•΄λ‹Ή 슀크립트λ₯Ό 보면 ν΄λΌμš°λ“œ ν™˜κ²½μ— μ–΄λ–€ μž‘μ—…μ΄ μˆ˜ν–‰λ˜μ—ˆλŠ”μ§€ μ‰½κ²Œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€.

AZ CLI 슀크립트 μ‹€ν–‰ν•˜κΈ°

CLI μ‹œμž‘ν•˜κΈ°

μš°μ„  visual studio code μ΅μŠ€ν…μ…˜ μ€‘μ—μ„œ Azure CLI Toolsλ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

VSCode ν„°λ―Έλ„μ—μ„œ μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œ μ œλŒ€λ‘œ μ„€μΉ˜κ°€ λ˜μ—ˆλŠ”μ§€, μ–΄λ–€ λ²„μ „μœΌλ‘œ μ„€μΉ˜κ°€ λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

az --version

그리고 λ‘œκ·ΈμΈμ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

az login

μ•„λž˜λŠ” 자주 μ‚¬μš©ν•˜λ©΄ λͺ…령어에 λŒ€ν•œ ν‘œμž…λ‹ˆλ‹€.

Common Azure Command

λͺ…λ Ήμ–΄λ₯Ό 찾으렀면 az find λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•©λ‹ˆλ‹€.

az find secret // μ˜ˆμ‹œμž…λ‹ˆλ‹€.

λ˜λŠ” --helpλ₯Ό μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

az network nsg --help

λͺ¨λ“  λͺ…령어에 μ‚¬μš©λ˜λŠ” arguments듀은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • --helpλŠ” λͺ…령어와 κ·Έλ“€μ˜ μΈμˆ˜μ— λŒ€ν•œ CLI μ°Έμ‘° 정보λ₯Ό 좜λ ₯ν•˜κ³  μ‚¬μš© κ°€λŠ₯ν•œ ν•˜μœ„ κ·Έλ£Ήκ³Ό λͺ…λ Ήμ–΄λ₯Ό λ‚˜μ—΄ν•©λ‹ˆλ‹€.

  • --output은 좜λ ₯ ν˜•μ‹μ„ λ³€κ²½ν•©λ‹ˆλ‹€.
    μ‚¬μš© κ°€λŠ₯ν•œ 좜λ ₯ ν˜•μ‹μ€ json, jsonc (μ»¬λŸ¬ν™”λœ JSON), tsv (νƒ­μœΌλ‘œ κ΅¬λΆ„λœ κ°’), table (μ‚¬λžŒμ΄ 읽을 수 μžˆλŠ” ASCII ν…Œμ΄λΈ”), 그리고 yamlμž…λ‹ˆλ‹€.
    기본적으둜 CLIλŠ” json을 좜λ ₯ν•©λ‹ˆλ‹€. μ‚¬μš© κ°€λŠ₯ν•œ 좜λ ₯ ν˜•μ‹μ— λŒ€ν•΄ 더 μ•Œμ•„λ³΄λ €λ©΄, Azure CLI의 좜λ ₯ ν˜•μ‹μ„ μ°Έμ‘°ν•˜μ„Έμš”.

  • --queryλŠ” JMESPath 쿼리 μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ Azure μ„œλΉ„μŠ€μ—μ„œ λ°˜ν™˜λœ 좜λ ₯을 ν•„ν„°λ§ν•©λ‹ˆλ‹€.

  • --verboseλŠ” μž‘μ—… 쀑에 Azureμ—μ„œ μƒμ„±λœ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 정보와 기타 μœ μš©ν•œ 정보λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. (verboseλŠ” "μƒμ„Έν•˜λ‹€" λΌλŠ” λœ»μž…λ‹ˆλ‹€)

  • --debugλŠ” CLI μž‘μ—…μ— λŒ€ν•œ 더 λ§Žμ€ 정보λ₯Ό 좜λ ₯ν•˜λ©° 디버깅 λͺ©μ μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
    버그λ₯Ό λ°œκ²¬ν•˜λ©΄ 버그 리포트 제좜 μ‹œ --debug ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±λœ 좜λ ₯을 μ œκ³΅ν•˜μ„Έμš”.


Interactive Mode μ‚¬μš©ν•΄λ³΄κΈ°

μ‚¬μš©μžμ™€ λŒ€ν™” ν˜•μ‹μœΌλ‘œ μƒν˜Έ μž‘μš©ν•˜λŠ” λͺ…λ Ή 쀄 μΈν„°νŽ˜μ΄μŠ€ λͺ¨λ“œλŠ” μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό 톡해 μ‹€ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

az interactive

Azure CLIλ₯Ό μ΄μš©ν•΄μ„œ λ°μ΄ν„°λ² μ΄μŠ€ λ§Œλ“€κΈ°

λ¨Όμ € subscription idλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

az account set --subscription <subscription id>

My SQLμ„œλ²„λ₯Ό μœ„ν•œ Azure λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄λ΄…μ‹œλ‹€.

az group create --name myresourcegroup --location westus

az group create: Azure CLIμ—μ„œ λ¦¬μ†ŒμŠ€ 그룹을 μƒμ„±ν•˜κΈ° μœ„ν•œ λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

β—οΈμ°Έκ³ λ‘œ λ¦¬μ†ŒμŠ€ κ·Έλ£Ήμ΄λž€ ν΄λΌμš°λ“œ ν™˜κ²½μ—μ„œ μƒμ„±ν•˜λŠ” λ‹€μ–‘ν•œ λ¦¬μ†ŒμŠ€λ“€ (가상 λ¨Έμ‹ , λ°μ΄ν„°λ² μ΄μŠ€, λ„€νŠΈμ›Œν¬, μŠ€ν† λ¦¬μ§€ λ“±)을 κ·Έλ£Ήν™”ν•˜μ—¬ 관리할 수 있게 ν•΄μ€λ‹ˆλ‹€.

--name myresourcegroup: 생성할 λ¦¬μ†ŒμŠ€ 그룹의 이름을 μ§€μ •ν•˜λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€. μ˜ˆμ œμ—μ„œλŠ” myresourcegroupμ΄λΌλŠ” 이름을 μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

--location westus: λ¦¬μ†ŒμŠ€ 그룹이 생성될 Azure 리전(데이터 μ„Όν„° μœ„μΉ˜)λ₯Ό μ§€μ •ν•˜λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€. "westus"λŠ” λ―Έκ΅­ μ„œλΆ€μ— μœ„μΉ˜ν•œ Azure 리전을 μ˜λ―Έν•©λ‹ˆλ‹€.

λ§Œμ•½μ— λ¦¬μ†ŒμŠ€ 그룹이 μ—†λ‹€λ©΄ μ–΄λ–€ 일이 λ°œμƒν• κΉŒμš”β“

κ΄€λ¦¬μ˜ 어렀움: λͺ¨λ“  λ¦¬μ†ŒμŠ€κ°€ κ°œλ³„μ μœΌλ‘œ μ‘΄μž¬ν•˜λ©΄ κ·Έλ“€ κ°„μ˜ κ΄€κ³„λ‚˜ μ˜μ‘΄μ„±μ„ νŒŒμ•…ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. λ¦¬μ†ŒμŠ€ 그룹을 μ‚¬μš©ν•˜λ©΄ κ΄€λ ¨ λ¦¬μ†ŒμŠ€λ₯Ό ν•¨κ»˜ λ¬Άμ–΄ ν•œλ²ˆμ— 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•ˆμ „μ„± κ°μ†Œ: νŠΉμ • ν”„λ‘œμ νŠΈλ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ€‘λ‹¨ν•˜κ±°λ‚˜ μ‚­μ œν•΄μ•Ό ν•  λ•Œ κ΄€λ ¨λœ λͺ¨λ“  λ¦¬μ†ŒμŠ€λ₯Ό ν•œλ²ˆμ— μ‚­μ œν•˜κΈ°κ°€ μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 λΆˆν•„μš”ν•œ λ¦¬μ†ŒμŠ€κ°€ 계속 μ‹€ν–‰λ˜λ©΄μ„œ λΉ„μš©μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

톡합 μ •μ±… 적용의 어렀움: νŠΉμ • λ¦¬μ†ŒμŠ€ κ·Έλ£Ή 전체에 λ³΄μ•ˆ μ •μ±…, μ•‘μ„ΈμŠ€ μ œμ–΄, νƒœκ·Έ 등을 μΌκ΄€λ˜κ²Œ μ μš©ν•˜λŠ” 것이 μ–΄λ €μ›Œμ§‘λ‹ˆλ‹€.

λΉ„μš© μΆ”μ μ˜ λ³΅μž‘μ„±: λ¦¬μ†ŒμŠ€ κ·Έλ£Ήλ³„λ‘œ λΉ„μš©μ„ μΆ”μ ν•˜λ©΄ νŠΉμ • ν”„λ‘œμ νŠΈλ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉ„μš©μ„ μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그룹이 μ—†μœΌλ©΄ μ΄λŸ¬ν•œ 뢄석이 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.


Azure Database for MySQL serverλ₯Ό λ§Œλ“­λ‹ˆλ‹€.

az mysql server create --resource-group myresourcegroup --name mydemoserver --location westus --admin-user myadmin --admin-password <server_admin_password> --sku-name GP_Gen5_2

λΉ„λ°€λ²ˆν˜ΈλŠ” λ”°λ‘œ μ„€μ •ν•΄μ£Όκ³ , μ € 같은 κ²½μš°λŠ” 이름이 κ²ΉμΉœλ‹€λŠ” μ—λŸ¬λ„ μžˆμ–΄μ„œ name도 λ°”κΏ¨μŠ΅λ‹ˆλ‹€.

각 μ½”λ“œμ— λŒ€ν•œ μ„€λͺ…은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

az mysql server create: Azure CLIμ—μ„œ MySQL μ„œλ²„λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ λͺ…λ Ήμž…λ‹ˆλ‹€.

--resource-group myresourcegroup: 이 MySQL μ„œλ²„κ°€ 생성될 λ¦¬μ†ŒμŠ€ 그룹을 μ§€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” "myresourcegroup"μ΄λΌλŠ” μ΄λ¦„μ˜ λ¦¬μ†ŒμŠ€ 그룹을 μ‚¬μš©ν•˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

--name mydemoserver: 생성될 MySQL μ„œλ²„μ˜ 이름을 μ§€μ •ν•©λ‹ˆλ‹€. 이 μ˜ˆμ—μ„œλŠ” "mydemoserver"λΌλŠ” 이름이 μ‚¬μš©λ©λ‹ˆλ‹€.

--location westus: μ„œλ²„λ₯Ό ν˜ΈμŠ€νŒ…ν•  Azure 지역을 μ§€μ •ν•©λ‹ˆλ‹€. 이 κ²½μš°μ—λŠ” "westus"(λ―Έκ΅­ μ„œλΆ€) 지역에 μ„œλ²„κ°€ μƒμ„±λ©λ‹ˆλ‹€.

--admin-user myadmin: MySQL μ„œλ²„μ˜ κ΄€λ¦¬μž 계정 이름을 μ§€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” "myadmin"μ΄λΌλŠ” 이름이 μ‚¬μš©λ©λ‹ˆλ‹€.

--admin-password <server_admin_password>: κ΄€λ¦¬μž κ³„μ •μ˜ λΉ„λ°€λ²ˆν˜Έλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. <server_admin_password>λŠ” μ‹€μ œλ‘œ μ‚¬μš©ν•˜λ €λŠ” λΉ„λ°€λ²ˆν˜Έλ‘œ λ°”κΏ”μ•Ό ν•©λ‹ˆλ‹€.

--sku-name GP_Gen5_2: μ„œλ²„μ˜ SKU(μ œν’ˆ λͺ…μ„Έ 및 가격)λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. "GP_Gen5_2"λŠ” General Purpose, Generation 5의 2 vCoreλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŠ” ν•΄λ‹Ή μ„œλ²„μ˜ μ„±λŠ₯κ³Ό μš©λŸ‰μ„ κ²°μ •ν•˜λŠ” μš”μ†Œ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.


λ°©ν™”λ²½ κ·œμΉ™ μ„€μ •ν•˜κΈ°

az mysql server firewall-rule create λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„μ—μ„œ λ°©ν™”λ²½ κ·œμΉ™μ„ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λ ‡κ²Œ ν•˜λ©΄ λ‘œμ»¬μ—μ„œ μ„œλ²„μ— μ—°κ²°ν•  수 있게 λ©λ‹ˆλ‹€.

az mysql server firewall-rule create --resource-group myresourcegroup --server mydemoserver --name AllowMyIP --start-ip-address 192.168.0.1 --end-ip-address 192.168.0.1

이 λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄, mydemoserverλΌλŠ” MySQL μ„œλ²„λŠ” 였직 192.168.0.1 IP μ£Όμ†Œμ—μ„œμ˜ μ ‘μ†λ§Œ ν—ˆμš©ν•˜κ²Œ λ©λ‹ˆλ‹€.

μ΄μ™Έμ˜ λ‹€λ₯Έ IP μ£Όμ†Œμ—μ„œμ˜ 접속 μ‹œλ„λŠ” 방화벽에 μ˜ν•΄ μ°¨λ‹¨λ©λ‹ˆλ‹€.

az mysql server firewall-rule create: Azure CLIμ—μ„œ Azure Database for MySQL μ„œλ²„μ˜ λ°©ν™”λ²½ κ·œμΉ™μ„ μƒμ„±ν•˜κΈ° μœ„ν•œ λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

--resource-group myresourcegroup: λ¦¬μ†ŒμŠ€ 그룹을 μ§€μ •ν•©λ‹ˆλ‹€. myresourcegroup은 ν•΄λ‹Ή MySQL μ„œλ²„κ°€ ν¬ν•¨λœ λ¦¬μ†ŒμŠ€ 그룹의 μ΄λ¦„μž…λ‹ˆλ‹€.

--server mydemoserver: λ°©ν™”λ²½ κ·œμΉ™μ„ μΆ”κ°€ν•  MySQL μ„œλ²„μ˜ 이름을 μ§€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” mydemoserverλΌλŠ” μ΄λ¦„μ˜ μ„œλ²„μ— κ·œμΉ™μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

--name AllowMyIP: 생성될 λ°©ν™”λ²½ κ·œμΉ™μ˜ 이름을 μ§€μ •ν•©λ‹ˆλ‹€. 이 μ˜ˆμ—μ„œλŠ” AllowMyIPλΌλŠ” μ΄λ¦„μœΌλ‘œ κ·œμΉ™μ΄ μƒμ„±λ©λ‹ˆλ‹€.

--start-ip-address 192.168.0.1 및 --end-ip-address 192.168.0.1: 이 IP λ²”μœ„λŠ” λ°©ν™”λ²½ κ·œμΉ™μœΌλ‘œ ν—ˆμš©λ  IP μ£Όμ†Œμ˜ λ²”μœ„λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” μ‹œμž‘ IP와 끝 IPκ°€ λ™μΌν•˜λ―€λ‘œ, 단일 IP μ£Όμ†ŒμΈ 192.168.0.1만 ν—ˆμš©ν•˜κ²Œ λ©λ‹ˆλ‹€.


connection 정보 μ–»κΈ°

μ„œλ²„μ— 연결을 ν•˜λ €λ©΄ host information 그리고 access credentials을 μ–»μ–΄μ•Ό ν•©λ‹ˆλ‹€.

이것은 μ•„λž˜μ˜ λͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

az mysql server show --resource-group myresourcegroup --name mydemoserver

이 λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ JSON 파일둜 κ²°κ³Όλ₯Ό 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

fullyQualifiedDomainName 그리고 administratorLogin은 λ©”λͺ¨λ₯Ό ν•©μ‹œλ‹€.


mysql command-line client을 μ΄μš©ν•΄μ„œ Azure λ°μ΄ν„°λ² μ΄μŠ€μ— μ—°κ²°ν•˜κΈ°

μ•„κΉŒ λ©”λͺ¨ν•΄ 놓은 λ‚΄μš©μ„ λ°”νƒ•μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

mysql -h mydemoserver.mysql.database.azure.com -u myadmin@mydemoserver -p

-h: 이 μ˜΅μ…˜μ€ μ ‘μ†ν•˜λ €λŠ” MySQL μ„œλ²„μ˜ 호슀트 이름 λ˜λŠ” IP μ£Όμ†Œλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

-u: 이 μ˜΅μ…˜μ€ MySQL μ„œλ²„μ— λ‘œκ·ΈμΈν•  λ•Œ μ‚¬μš©ν•  μ‚¬μš©μž 이름을 μ§€μ •ν•©λ‹ˆλ‹€.

-p: 이 μ˜΅μ…˜μ€ μž…λ ₯ν•œ μ‚¬μš©μž μ΄λ¦„μ˜ λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•˜λΌλŠ” ν”„λ‘¬ν”„νŠΈλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

λ§Œμ•½ 연결에 μ„±κ³΅ν–ˆλ‹€λ©΄ λ‹€μŒκ³Ό 같은 λ‚΄μš©μ΄ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

Welcome to the MySQL monitor.  Commands end with ; or \g.

참고둜 λ‚˜κ°€λŠ” 방법은 quit을 μž…λ ₯ν•˜λ©΄ λ©λ‹ˆλ‹€.


λ¦¬μ†ŒμŠ€ κ·Έλ£Ή, mysql μ„œλ²„ μ‚­μ œν•˜κΈ°

az group delete --name myresourcegroup
az mysql server delete --resource-group myresourcegroup --name mydemoserver

AZ CLIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ήμ•± λ°°ν¬ν•˜κΈ°

μƒ˜ν”Œ 예제 λ‹€μš΄λ°›κΈ°

μ•„λž˜ μ½”λ“œλ‘œ ν΄λ‘ ν•©λ‹ˆλ‹€.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

μƒ˜ν”Œ ν΄λ”λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

cd msdocs-python-flask-webapp-quickstart

앱을 μœ„ν•œ κ°€μƒν™˜κ²½μ„ λ§Œλ“­λ‹ˆλ‹€.

python3 -m venv .venv
source .venv/bin/activate

dependenciesλ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

pip install -r requirements.txt

앱을 ν•˜λ‹¨μ˜ μ½”λ“œλ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

flask run

CLI둜 Azure에 μ›Ήμ•± λ§Œλ“€κΈ°

μš°μ„  λ‘œκ·ΈμΈλΆ€ν„° ν•΄μ€μ‹œλ‹€.

az login

μ§€μ—­ 폴더에 μžˆλŠ” μ½”λ“œλ₯Ό 기반으둜 Azure App Service에 μ›Ή 앱을 μƒμ„±ν•©λ‹ˆλ‹€.

az webapp up --runtime PYTHON:3.9 --sku B1 --logs

az webapp up: 이 λͺ…λ Ήμ–΄λŠ” ν˜„μž¬ λ””λ ‰ν† λ¦¬μ˜ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ Azureμ—μ„œ μ›Ή 앱을 μƒμ„±ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

--runtime PYTHON:3.9: 이 μ˜΅μ…˜μ€ μ›Ή μ•±μ˜ λŸ°νƒ€μž„ μŠ€νƒμ„ μ„€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” Python 3.9 버전을 μ‚¬μš©ν•˜μ—¬ μ›Ή 앱을 μ‹€ν–‰ν•˜λ„λ‘ μ§€μ •ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

--sku B1: 이 μ˜΅μ…˜μ€ μ›Ή μ•±μ˜ μ„œλΉ„μŠ€ κ³„νš(Service Plan)의 SKU(Stock Keeping Unit)λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. B1은 Basic 계측에 ν•΄λ‹Ήν•˜λŠ” SKUμž…λ‹ˆλ‹€. Basic 계측은 개발 및 ν…ŒμŠ€νŠΈμ— μ ν•©ν•˜λ©°, 무료 κ³„μΈ΅λ³΄λ‹€λŠ” 더 λ§Žμ€ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

--logs: 이 μ˜΅μ…˜μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 μ›Ή μ„œλ²„ 둜그λ₯Ό ν™œμ„±ν™”ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ›Ή μ•±μ˜ λ™μž‘κ³Ό κ΄€λ ¨λœ 둜그 정보λ₯Ό μˆ˜μ§‘ν•˜κ³  뢄석할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜μ™€ 같이 문ꡬ가 뜨면 μ„±κ³΅μž…λ‹ˆλ‹€.

Deployment endpoint responded with status code 202
You can launch the app at http://thankful-dune-587e746a16104f88b672ddc0031f96fb.azurewebsites.net
Configuring default logging for the app, if not already enabled
2023-09-14T14:44:31  Welcome, you are now connected to log-streaming service.

resources μ œκ±°ν•˜κΈ°

az group delete \
    --name msdocs-python-webapp-quickstart \
    --no-wait

πŸ“ 참고자료

VSCodeμ—μ„œ Azure CLI Tools μ„€μΉ˜

Azure CLI μ‹œμž‘ν•˜κΈ°

Azure CLIλ₯Ό μ΄μš©ν•΄ λ°μ΄ν„°λ² μ΄μŠ€ λ§Œλ“€κΈ°

Azure App Service에 μ›Ήμ•± λ°°ν¬ν•˜κΈ°

profile
"μΈμƒμ˜ λͺ©μ μ€ 타인을 λ”°λ₯΄λŠ” 것이 μ•„λ‹ˆλΌ μžμ‹ μ„ μ°½μ‘°ν•˜λŠ” 것이닀."

0개의 λŒ“κΈ€