Microsoft Azure
Microsoft-ի cloud-ը՝ App Service, Container Apps, AKS և Azure SQL, որոնք միավորված են Entra ID-ով։
30 վայրկյանում
Azure-ը Microsoft-ի public cloud-ն է։ Այն առաջարկում է նույն կառուցողական բլոկները, ինչ AWS-ը և Google Cloud-ը (վիրտուալ մեքենաներ, managed բազաներ, container-ներ, serverless function-ներ, storage), բայց նրա ամենամեծ ուժը Microsoft-ի աշխարհի հետ ինտեգրացիան է՝ Entra ID identity-ի համար, .NET, SQL Server, Office 365 և enterprise agreement-ներ։ Ռեսուրսները խմբավորվում են subscription-ների և resource group-երի մեջ, իսկ ամեն գործողություն անցնում է Azure Resource Manager-ով։
Իմ ամենօրյա stack-ում չէ․ գիտեմ հիմնական գաղափարները և մանրամասները կսովորեմ, երբ նախագիծը դա պահանջի։
Ինչու է սա կարևոր
- Շատ խոշոր ընկերություններ արդեն Microsoft-ի վրա են․ նրանց օգտատերերը Entra ID-ում են, license-ները՝ enterprise agreement-ում, իսկ հավելվածները .NET են SQL Server-ով։ Azure-ը նրանց համար ամենակարճ ճանապարհն է։
- App Service-ը և Container Apps-ը թույլ են տալիս թիմին host անել վեբ հավելվածներ և container-ներ առանց սերվերներ կառավարելու՝ deployment slot-երով, autoscaling-ով և managed certificate-ներով։
- Managed identity-ները հավելվածի կոդից հանում են secret-ների մեծ մասը, ինչը config ֆայլերում գաղտնաբառերի համեմատ անվտանգության իրական բարելավում է։
- Client-ների հետ աշխատանքում Azure-ն իմանալը կարևոր է, որովհետև cloud-ի ընտրությունը հաճախ անում է client-ի IT բաժինը, ոչ թե developer-ը։
Ինչպես է աշխատում
01Մտածողության մոդելը՝ tenant, subscription-ներ, resource group-եր
Ամենավերևում tenant-ն է՝ քո կազմակերպության Entra ID directory-ն, որը պահում է օգտատերերին, խմբերը և app registration-ները։ Դրա տակ subscription-ներն են, որոնք billing-ի և quota-ի սահմաններ են․ տարածված օրինաչափություն է մեկ subscription production-ի և մեկը non-production-ի համար։ Management group-երը subscription-ներից վեր են՝ policy-ն միանգամից շատերի վրա կիրառելու համար։ Subscription-ի ներսում ամեն ռեսուրս ապրում է resource group-ում՝ մի folder նույն կյանքի ցիկլը կիսող բաների համար, օրինակ՝ մեկ միջավայրի հավելվածը, նրա բազան և Key Vault-ը։ Resource group-ը ջնջելը ջնջում է դրա ներսի ամեն ինչ, ինչը շատ հարմար է test միջավայրերը մաքրելու համար։ Ամեն create, update և delete անցնում է Azure Resource Manager-ով (ARM)՝ անկախ նրանից՝ portal ես օգտագործում, az CLI, Bicep թե Terraform։ AWS-ի համեմատ subscription-ը մոտ է AWS account-ին, իսկ resource group-ը ճշգրիտ համարժեք չունի․ այն ավելի մոտ է tag-ների վրա հիմնված խմբավորման, որի հետ կարող ես գործողություններ անել։
- Tenant (Entra ID) → management group-եր → subscription-ներ → resource group-եր → ռեսուրսներ։
- Մեկ resource group յուրաքանչյուր հավելվածի և միջավայրի համար պարզ է պահում մաքրումն ու թույլտվությունները։
- Ամեն ինչ ARM ռեսուրս է ID-ով, ուստի կարելի է նկարագրել որպես կոդ։
02Hosting-ի տարբերակներ՝ App Service, Container Apps, AKS, Functions
App Service-ը վեբ հավելվածների դասական պլատֆորմն է․ ընտրում ես runtime (Node, PHP, .NET, Python, Java) կամ container, և այն հոգում է սերվերները, TLS-ը և scaling-ը։ Վճարում ես App Service plan-ի համար՝ VM-ների հավաքածու, որը կարող է host անել մի քանի հավելված, ուստի արժեքը ֆիքսված է ըստ plan-ի չափի, ոչ թե ըստ request-ի։ Deployment slot-երը թույլ են տալիս deploy անել staging slot, տաքացնել այն և swap անել production-ի հետ՝ առանց downtime-ի։ Azure Container Apps-ը container-ները գործարկում է serverless ձևով Kubernetes-ի վրա՝ առանց այն բացահայտելու․ autoscaling KEDA կանոններով (HTTP, queue-ներ, cron), scale մինչև զրո, revision-ներ և traffic splitting։ Սա Google Cloud Run-ի ամենամոտ համարժեքն է։ AKS-ը լիարժեք managed Kubernetes է այն թիմերի համար, որոնց պետք է Kubernetes API-ն։ Azure Functions-ը գործարկում է event-driven կոդ․ նոր serverless հավելվածների համար Microsoft-ը խորհուրդ է տալիս Flex Consumption plan-ը, իսկ Linux Consumption plan-ը դադարեցվում է 2028-ի սեպտեմբերին։
03Container-ի deploy Azure Container Apps-ում
Տիպիկ հոսքը՝ ստեղծիր resource group, Azure Container Registry և Container Apps environment (ընդհանուր ցանցի և logging-ի սահման հավելվածների խմբի համար)։ Build և push արա image-ը registry, ապա ստեղծիր container app-ը։ Հավելվածին տուր managed identity և registry-ի վրա AcrPull, որպեսզի registry-ի գաղտնաբառ պետք չլինի։ Ingress-ը այն հասանելի է դարձնում HTTPS-ով գեներացված domain-ի վրա, և կարող ես ավելացնել custom domain անվճար managed certificate-ով։ Scale կանոնները որոշում են replica-ների նվազագույն և առավելագույն քանակը․ զրո նվազագույնը ամենաէժանն է, մեկը՝ խուսափում է cold start-երից։ Secret-ները կարող են ուղիղ հղվել Key Vault-ին, ուստի հավելվածը դրանք կարդում է որպես environment variable-ներ՝ առանց դրանք երբևէ քո pipeline-ում հայտնվելու։
az group create --name rg-app-prod --location westeurope
az acr create --resource-group rg-app-prod --name exampleappacr --sku Basic
az acr build --registry exampleappacr --image api:1.4.2 .
az containerapp env create --name cae-app-prod \
--resource-group rg-app-prod --location westeurope
az containerapp create --name api \
--resource-group rg-app-prod --environment cae-app-prod \
--image exampleappacr.azurecr.io/api:1.4.2 \
--registry-server exampleappacr.azurecr.io --registry-identity system \
--target-port 3000 --ingress external \
--min-replicas 0 --max-replicas 10
04Տվյալներ՝ Azure SQL, PostgreSQL Flexible Server, Cosmos DB, Storage
Azure SQL Database-ը managed SQL Server է cloud-ում։ Այն գնում ես vCore կամ ավելի հին DTU մոդելներով․ serverless tier-ը կարող է ավտոմատ pause լինել պարապ ժամանակ և compute-ը գանձել վայրկյանով, ինչը հիանալի է dev բազաների համար։ Open-source stack-երի համար Azure Database for PostgreSQL Flexible Server-ը և MySQL Flexible Server-ը managed instance-ներ են ավտոմատ backup-ներով, zone-redundant high availability-ով և non-production-ի համար stop/start-ով։ Cosmos DB-ն գլոբալ բաշխված NoSQL բազա է մի քանի API-ով (NoSQL, MongoDB, Cassandra)․ այն գանձվում է request unit-ներով, ուստի վատ նախագծված query-ն կամ partition key-ը իրական փող արժե։ Azure Storage account-ները պահում են blob-եր (ֆայլեր), queue-ներ, table-ներ և file share-եր՝ hot, cool, cold և archive tier-երով։ Azure Cache for Redis-ին փոխարինում է Azure Managed Redis-ը, ուստի նոր project սկսելուց առաջ ստուգիր, թե որն է արդիական։
- .NET + SQL Server → Azure SQL Database։
- Laravel / Node + Postgres → PostgreSQL Flexible Server։
- Գլոբալ, ցածր latency-ով NoSQL կանխատեսելի partition-ներով → Cosmos DB։
05Identity՝ Entra ID, RBAC և managed identity-ներ
Entra ID-ն (Azure Active Directory-ի նոր անունը) և՛ քո աշխատակիցների directory-ն է, և՛ քո հավելվածների identity provider-ը։ Մարդկանց համար այն անում է single sign-on, MFA և conditional access, իսկ հավելվածների համար՝ OAuth 2.0 / OpenID Connect app registration-ների միջոցով։ Azure ռեսուրսների վրա թույլտվությունները օգտագործում են Azure RBAC․ role (Reader, Contributor, Storage Blob Data Reader…) նշանակում ես principal-ին որոշակի scope-ում (management group, subscription, resource group կամ առանձին ռեսուրս)։ Developer-ների համար ամենաօգտակար հնարավորությունը managed identity-ն է․ Azure-ը քո App Service-ին, Container App-ին կամ Function-ին տալիս է identity, որը կարող է ավտոմատ token-ներ ստանալ։ Այդ identity-ին role տուր Key Vault-ի, Storage-ի կամ բազայի վրա, և քո կոդը միանում է DefaultAzureCredential-ով՝ առանց որևէ գաղտնաբառի։ CI-ի համար GitHub Actions-ը կարող է login լինել workload identity federation-ով (OIDC)՝ պահված client secret-ի փոխարեն։
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
// Works locally (az login) and in Azure (managed identity), no secrets in code
const credential = new DefaultAzureCredential();
const vault = new SecretClient("https://kv-app-prod.vault.azure.net", credential);
const secret = await vault.getSecret("stripe-api-key");
console.log(secret.name, "loaded");
06Production խորհուրդներ և գնային թակարդներ
Azure-ը շատ բաներ գանձում է ժամով՝ անկախ նրանից՝ օգտագործում ես, թե ոչ։ App Service plan-ը նույնն արժե զրո կամ տասը հավելվածով։ VM-ը, որը անջատված է OS-ի ներսից, դեռ գանձվում է․ այն պետք է deallocate անես։ Premium հնարավորությունները կարող են զարմացնել․ Application Gateway-ը, Azure Firewall-ը, Front Door-ի premium tier-երը, Bastion-ը և NAT Gateway-ը բոլորն ունեն ֆիքսված ժամավճարներ, որոնք կարող են գերազանցել փոքր հավելվածին։ Log Analytics-ը գանձում է ըստ ingest արված GB-ի, ուստի verbose logging-ով «շատախոս» հավելվածը log-երի վրա կարող է ավելի շատ ծախսել, քան compute-ի․ սահմանիր daily cap և retention։ Առաջին իսկ օրից օգտագործիր Cost Management budget-ներ և alert-ներ, ռեսուրսները tag արա owner-ով և environment-ով, և test միջավայրերը դիր առանձին resource group-երում, որպեսզի մեկ հրամանով ջնջվեն։ Reservation-ները և savings plan-ները իջեցնում են կայուն compute-ի գինը՝ մեկ կամ երեք տարվա պարտավորությամբ։
Օգտագործեք, երբ
- Կազմակերպությունն արդեն օգտագործում է Microsoft 365, Entra ID և enterprise agreement-ներ, ուստի identity-ն, billing-ը և support-ը արդեն տեղում են։
- Stack-ը .NET և SQL Server է, որտեղ Azure-ի գործիքները, license-ային առավելությունները և support-ը ամենաուժեղն են։
- Պետք են enterprise հնարավորություններ, ինչպես conditional access, private endpoint-ներ և policy-ով կառավարվող compliance շատ subscription-ներում։
- Ուզում ես serverless container-ներ (Container Apps) կամ managed web hosting (App Service) deployment slot-երով։
Մի՛ օգտագործեք, երբ
- Փոքր startup հավելված՝ առանց Microsoft-ից կախվածության․ VPS-ը, Cloud Run-ը կամ ավելի պարզ PaaS-ը ավելի էժան և արագ կկարգավորվեն։
- Թիմն արդեն խորը AWS կամ GCP փորձ և ենթակառուցվածք ունի․ Azure ավելացնելը միայն երկրորդ հասկացությունների հավաքածու է ավելացնում։
- Պետք են շատ ցածր, կանխատեսելի ամսական ծախսեր․ Azure-ի ֆիքսված ժամավճարային բաղադրիչները փոքր project-ների համար արագ են գումարվում։
Այլընտրանքներ
- AWS
Service-ների ամենալայն կատալոգը։ Elastic Beanstalk/App Runner-ը համապատասխանում են App Service-ին, ECS/EKS-ը՝ Container Apps/AKS-ին, RDS-ը՝ Azure SQL-ին և Flexible Server-ին։
- Google Cloud
Cloud Run-ը ավելի պարզ serverless container պլատֆորմ է, BigQuery-ն ավելի ուժեղ է analytics-ի համար։
- VPS + Docker Compose
Ամենաէժանն ու ամենապարզը կայուն traffic-ի համար, բայց առանց managed identity-ի, failover-ի կամ compliance գործիքների։
- Vercel / Netlify
Ավելի լավ են frontend հավելվածների համար, որոնց պետք են preview-ներ և CDN, իսկ backend-ը host է արվում այլ տեղ։
Լավագույն պրակտիկաներ
- Օգտագործիր մեկ resource group յուրաքանչյուր հավելվածի և միջավայրի համար և առանձին subscription-ներ production-ի և non-production-ի համար։
- Գաղտնաբառերով connection string-երի փոխարեն օգտագործիր managed identity-ներ և DefaultAzureCredential։
- Secret-ները և certificate-ները պահիր Key Vault-ում RBAC-ով և հղիր դրանց App Service-ից կամ Container Apps-ից։
- Ենթակառուցվածքը նկարագրիր Bicep-ով կամ Terraform-ով․ portal-ում click-երը դիտարկիր որպես միայն ուսումնասիրություն։
- Zero-downtime release-ների և արագ rollback-ի համար օգտագործիր deployment slot-եր կամ Container Apps revision-ներ։
- Budget-ները, tag-երը և Log Analytics-ի daily cap-երը սահմանիր առաջին production deploy-ից առաջ։
- Կիրառիր Azure Policy թույլատրված region-ների, պարտադիր tag-երի և data service-ների վրա public network access-ը մերժելու համար։
Տարածված սխալներ
- Developer-ներին ամբողջ subscription-ի վրա Owner տալ՝ իրենց resource group-երի վրա Contributor-ի փոխարեն։
- VM-ը OS-ի ներսից կանգնեցնել և ենթադրել, որ billing-ը դադարել է․ այն պետք է deallocate արվի։
- Գաղտնաբառերով SQL connection string-երը պահել app settings-ում և source control-ում, երբ managed identity-ն կաշխատեր։
- Ընտրել Cosmos DB partition key, որը hot partition-ներ և հսկայական request unit հաշիվներ է ստեղծում։
- Նոր serverless function-ները սկսել հին Consumption plan-ով՝ Flex Consumption-ի փոխարեն։
Խորը վերլուծություն
07Networking՝ VNet-ներ, private endpoint-ներ և public access-ի թակարդը
Default-ով Azure-ի շատ PaaS service-ներ (Storage, SQL, Key Vault, Cosmos DB) ունեն public endpoint-ներ, որոնք պաշտպանված են միայն authentication-ով և ըստ ցանկության IP firewall-ներով։ Production տվյալների համար ավելի ուժեղ օրինաչափությունը private endpoint-ներն են․ service-ը ստանում է private IP քո VNet-ի ներսում, private DNS zone-ը նրա սովորական hostname-ը resolve է անում դեպի այդ IP, և դու անջատում ես public network access-ը։ Հավելվածները հասնում են VNet-ին VNet integration-ով (App Service, Functions Flex և Premium) կամ Container Apps environment-ը VNet-ի ներսում գործարկելով։ Տարածված ձախողումը DNS-ն է․ եթե privatelink zone-ը կապված չէ VNet-ին, հավելվածը դեռ resolve է անում public IP-ն և արգելափակվում է։ Hub-and-spoke տոպոլոգիաները ընդհանուր service-ները (firewall, VPN, DNS) դնում են hub VNet-ում, որը peer է արված հավելվածների spoke-երի հետ։ Յուրաքանչյուր մաս արժեք ունի․ private endpoint-ները գանձվում են ժամով և ըստ GB-ի, Azure Firewall-ը թանկ է փոքր project-ների համար։
# Private endpoint for a PostgreSQL Flexible Server is set at creation;
# for Key Vault, deny public access and add a private endpoint:
az keyvault update --name kv-app-prod --public-network-access Disabled
az network private-endpoint create --name pe-kv-app-prod \
--resource-group rg-app-prod --vnet-name vnet-app-prod --subnet snet-private \
--private-connection-resource-id $(az keyvault show -n kv-app-prod --query id -o tsv) \
--group-id vault --connection-name kv-conn
08Azure Policy և landing zone-եր
Azure Policy-ն յուրաքանչյուր ARM request գնահատում է կանոնների դեմ՝ մերժել թույլատրված region-ներից դուրս ռեսուրսները, պահանջել tag-եր, մերժել public IP-ները, պարտադրել TLS 1.2, ավտոմատ deploy անել diagnostic setting-ներ։ Effect-ների թվում են Deny, Audit, Modify և DeployIfNotExists, ուստի policy-ները կարող են և՛ արգելափակել, և՛ ուղղել։ Նշանակիր դրանք management group-ի մակարդակում, որպեսզի յուրաքանչյուր նոր subscription ժառանգի դրանք։ Microsoft-ի Cloud Adoption Framework-ը նկարագրում է «landing zone»-եր՝ management group-երի, policy-ների, կենտրոնացված logging-ի, networking-ի և identity-ի նախապես կառուցված կառուցվածք, որին միանում են նոր workload-ները։ Փոքր ընկերության համար դա չափազանց է, բայց հիմնական գաղափարները լավ են փոքրանում՝ platform subscription ընդհանուր բաների համար, առանձին application subscription-ներ, policy-ներ վերևում և infrastructure as code ամեն ինչի համար։ Այնուհետև Defender for Cloud-ը գնահատում է քո անվտանգության վիճակը և նշում սխալ կոնֆիգուրացիաները։
09AKS-ը գործնականում՝ tier-եր, upgrade-ներ և identity
AKS-ն ունի անվճար control plane tier փորձերի համար և Standard tier uptime SLA-ով, ինչպես նաև AKS Automatic, որը նախապես կարգավորում է node autoscaling-ը, անվտանգությունը և monitoring-ը՝ GKE Autopilot-ի ոգով։ Standard cluster-ներում դեռ վճարում ես node VM-ների համար։ Նոր cluster-ների մեծ մասի համար ընտրիր Azure CNI Overlay networking․ pod-երը IP-ներ են ստանում private overlay տիրույթից, ուստի VNet հասցեները չեն սպառվում։ Օգտագործիր Microsoft Entra Workload ID, որպեսզի pod-երը Kubernetes service account-ի միջոցով token ստանան իրենց սեփական managed identity-ի համար՝ secret-ներ mount անելու փոխարեն։ Upgrade-ները կարևոր են․ AKS-ը աջակցում է Kubernetes տարբերակների միայն որոշակի պատուհան, ուստի սահմանիր auto-upgrade channel և planned maintenance window-ներ, օգտագործիր մի քանի node pool (system և user) և upgrade-ները թեստավորիր staging-ում։ Container Insights-ը և managed Prometheus-ը monitoring են տալիս, բայց հետևիր Log Analytics-ի ingestion-ի արժեքին։
Իրական իրավիճակներ
Zero-downtime release-ներ .NET API-ի համար App Service-ում
Խնդիր
Production App Service-ում յուրաքանչյուր deploy մեկ րոպե error-ներ է առաջացնում, մինչ հավելվածը restart և տաքանում է։
Ինչպես լուծել
Անցիր Standard կամ Premium plan-ի, որն աջակցում է deployment slot-եր, և ստեղծիր staging slot։ Յուրաքանչյուր release deploy արա staging, թող այն գործարկվի և կարգավորիր applicationInitialization կամ health check path, որպեսզի swap-ը սպասի, մինչև հավելվածը տաքանա։ Միջավայրին հատուկ կարգավորումները (connection string-եր, feature flag-եր) նշիր որպես slot setting-ներ, որպեսզի մնան slot-ի հետ։ Ապա գործարկիր az webapp deployment slot swap --slot staging --target-slot production։ Production traffic-ը տեղափոխվում է միայն այն բանից հետո, երբ staging-ը առողջ է, իսկ եթե ինչ-որ բան սխալ է, վայրկյանների ընթացքում հետ ես swap անում։ Միացրու App Service health check-ը, որպեսզի անառողջ instance-ները ավտոմատ հեռացվեն։
Գաղտնաբառերի հեռացում հավելվածի բազայի connection-ից
Խնդիր
Container Apps-ի վրա API-ն միանում է Azure SQL-ին username-ով և գաղտնաբառով, որոնք պահված են app settings-ում։ Audit-ը պահանջում է passwordless հասանելիություն։
Ինչպես լուծել
Container app-ի վրա միացրու user-assigned managed identity։ Azure SQL-ում սահմանիր Entra admin, ապա identity-ի համար ստեղծիր contained user CREATE USER [id-api-prod] FROM EXTERNAL PROVIDER-ով և տուր միայն db_datareader և db_datawriter կամ կոնկրետ schema-ի թույլտվություններ։ Connection string-ը փոխիր Authentication=Active Directory Managed Identity-ի՝ identity-ի client ID-ով, կամ driver-ում օգտագործիր DefaultAzureCredential-ի token-ը։ Deploy արա, ստուգիր, ապա հեռացրու գաղտնաբառի secret-ը և սերվերի վրա անջատիր SQL authentication-ը, եթե այլ client-ի այն պետք չէ։ Անցման ընթացքում sign-in log-երում հետևիր ձախողումներին։
Անսպասելի հաշիվ log-երից
Խնդիր
Փոքր հավելվածը Log Analytics-ում ավելի շատ է արժենում, քան compute-ում։ Ingestion-ի մեծ մասը գալիս է debug log-երից և container stdout-ից։
Ինչպես լուծել
Բացիր workspace-ի Usage աղյուսակը՝ գտնելու, թե որ աղյուսակներն ու ռեսուրսներն են ամենաշատը ingest անում։ Production-ում հավելվածի log level-ը իջեցրու մինչև warning և դադարիր ամբողջական request և response body-ներ log անել։ Container Apps-ի կամ AKS-ի համար ֆիլտրիր աղմկոտ namespace-ները և Basic logs plan-ն օգտագործիր մեծ ծավալի աղյուսակների համար, որոնց հազվադեպ ես query անում։ Սահմանիր daily cap alert-ով, կրճատիր retention-ը verbose աղյուսակների համար և compliance-ին անհրաժեշտը archive արա ավելի էժան storage-ում։ Application Insights-ում trace-երը sample արա՝ ամեն ինչ հավաքելու փոխարեն։ Resource group-ի վրա budget alert ավելացրու, որպեսզի հաջորդ աճը նկատվի օրերի, ոչ թե ամսվա վերջում։
Արագ ուղեցույց
- Login և subscription-ի ընտրություն
az login && az account set --subscription "app-prod"- Ստեղծել resource group
az group create --name rg-app-dev --location westeurope- Ջնջել ամբողջ test միջավայրը
az group delete --name rg-app-dev --yes --no-wait- Deploy անել Bicep ֆայլ preview-ով
az deployment group what-if -g rg-app-prod -f main.bicep && az deployment group create -g rg-app-prod -f main.bicep- Container Apps՝ deploy source-ից
az containerapp up --name api --source . --resource-group rg-app-dev- App Service-ի log-երի stream
az webapp log tail --name app-api-prod --resource-group rg-app-prod- Swap անել staging slot-ը
az webapp deployment slot swap -g rg-app-prod -n app-api-prod --slot staging --target-slot production- Role տալ managed identity-ին
az role assignment create --assignee <principal-id> --role "Key Vault Secrets User" --scope <vault-id>- Deallocate անել VM-ը (կանգնեցնում է compute-ի billing-ը)
az vm deallocate -g rg-app-dev -n vm-test
Հարցեր և պատասխաններ
Q1Ո՞րն է տարբերությունը App Service-ի և Azure Container Apps-ի միջև։
App Service-ը հասուն web hosting պլատֆորմ է, որտեղ վճարում ես App Service plan-ի համար՝ VM-ների ֆիքսված հավաքածու, որը կարող է մի քանի հավելված host անել։ Այն առաջարկում է deployment slot-եր, ներկառուցված authentication, հեշտ custom domain-ներ և աջակցում է կոդ կամ container-ներ։ Container Apps-ը serverless container-ներ են managed Kubernetes հիմքի վրա․ վճարում ես ըստ vCPU-ի և հիշողության վայրկյանի, այն scale է լինում ըստ HTTP traffic-ի, queue-ի երկարության կամ custom KEDA կանոնների, կարող է scale լինել մինչև զրո և աջակցում է revision-ներ, Dapr և ֆոնային job-եր։ App Service-ը ընտրում եմ կայուն traffic-ով դասական վեբ հավելվածների և slot-եր սիրող թիմերի համար։ Container Apps-ը ընտրում եմ microservice-ների, event-driven worker-ների և այն ամենի համար, ինչը պետք է scale լինի մինչև զրո։
Q2Ի՞նչ է managed identity-ն, և ինչո՞ւ օգտագործել այն։
Managed identity-ն Entra ID identity է, որը Azure-ը ստեղծում և rotate է անում որևէ ռեսուրսի համար, օրինակ՝ App Service-ի, Container App-ի, Function-ի կամ VM-ի։ Քո կոդը token է խնդրում պլատֆորմի լոկալ endpoint-ից և օգտագործում այն Key Vault, Storage, Azure SQL կամ Entra authentication աջակցող ցանկացած service կանչելու համար։ Չկա գաղտնաբառ կամ client secret, որը պետք է պահել, որը կարող է արտահոսել կամ պետք է rotate անել։ System-assigned identity-ները ապրում և մահանում են մեկ ռեսուրսի հետ, իսկ user-assigned identity-ները ինքնուրույն են և կարող են կիսվել, ինչն օգնում է, երբ մի քանի հավելվածի պետք է նույն հասանելիությունը, կամ երբ ուզում ես, որ identity-ն գոյություն ունենա հավելվածից առաջ։ Azure RBAC-ի հետ միասին այն տալիս է least-privilege հասանելիություն՝ առանց secret-ների։
Q3Ի՞նչ է Entra ID-ն, և ինչպե՞ս է այն կապված Azure-ի հետ։
Entra ID-ն Microsoft-ի cloud identity service-ն է, որը նախկինում կոչվում էր Azure Active Directory։ Այն պահում է tenant-ի օգտատերերին, խմբերը և application registration-ները և ապահովում է sign-in, MFA, conditional access և single sign-on դեպի Microsoft 365 և հազարավոր SaaS հավելվածներ։ Azure subscription-ները վստահում են մեկ Entra tenant-ի, ուստի յուրաքանչյուր մարդ կամ հավելված, որը կառավարում է Azure ռեսուրսներ, authenticate է լինում դրա միջոցով, իսկ Azure RBAC-ը նրանց role-եր է տալիս։ Developer-ների համար Entra-ն նաև OAuth 2.0 և OpenID Connect provider է․ գրանցում ես հավելվածը, ապա թույլ ես տալիս օգտատերերին մուտք գործել իրենց աշխատանքային account-ներով։ Entra External ID-ն ծածկում է հաճախորդներին ուղղված sign-in սցենարները։
Q4Ինչպե՞ս deploy անել Azure GitHub Actions-ից՝ առանց secret-ներ պահելու։
Օգտագործիր OpenID Connect workload identity federation։ Ստեղծիր app registration կամ user-assigned managed identity, ավելացրու federated credential, որը վստահում է GitHub-ի token-ներին քո կոնկրետ repository-ի և branch-ի կամ environment-ի համար, և տուր նեղ role, օրինակ՝ Contributor մեկ resource group-ի վրա կամ AcrPush registry-ի վրա։ Workflow-ում սահմանիր permissions id-token: write և օգտագործիր azure/login client ID-ով, tenant ID-ով և subscription ID-ով, որոնք նույնացուցիչներ են, ոչ թե secret-ներ։ GitHub-ը յուրաքանչյուր run-ի համար կարճակյաց token է տալիս, և Azure-ը այն փոխանակում է access token-ի հետ։ Ոչ մի երկարակյաց բան չի պահվում, և production deploy-երը կարող ես սահմանափակել պաշտպանված environment-ով։
Q5Bicep, թե՞ Terraform Azure-ի համար։
Bicep-ը Microsoft-ի սեփական լեզուն է, որը compile է լինում ARM template-ների։ Այն աջակցում է Azure-ի նոր հնարավորությունները առաջին իսկ օրից, state ֆայլ պետք չէ, որովհետև state-ը հենց Azure-ն է, և ունի լավ VS Code գործիքներ և what-if preview-ներ։ Terraform-ը azurerm provider-ով multi-cloud է, ունի module-ների մեծ էկոհամակարգ և ծանոթ plan և apply workflow, բայց remote state-ը պետք է կառավարես ինքդ և երբեմն սպասես, մինչև provider-ը աջակցի նոր հնարավորություններին։ Եթե ընկերությունը միայն Azure է և Microsoft-ի գործիքներ է օգտագործում, Bicep-ը մաքուր ընտրություն է։ Եթե այն մի քանի cloud է գործարկում կամ արդեն Terraform է օգտագործում, մնա Terraform-ով։ Ցանկացածը շատ ավելի լավ է, քան portal-ում click անելը։
Սենիոր մակարդակի հարցեր
S1Ինչպե՞ս կկառուցես Azure-ը 10 product թիմ ունեցող ընկերության համար։
Սկսիր management group-երից՝ platform խումբ ընդհանուր service-ների համար և landing-zones խումբ՝ բաժանված production-ի և non-production-ի։ Յուրաքանչյուր թիմ կամ product ստանում է իր subscription-ները, որոնք ստեղծվում են ավտոմատ vending գործընթացով, որը կիրառում է tag-եր, budget-ներ, diagnostic setting-ներ, policy assignment-ներ և networking (spoke VNet՝ peer արված hub-ի հետ)։ Identity-ն կենտրոնացված է Entra ID-ում՝ խմբերով, որոնք map են արված RBAC role-երին subscription-ի կամ resource group-ի scope-ում, իսկ privileged access-ը Entra PIM-ով է՝ ժամանակով սահմանափակված elevation-ով։ Log-երը հոսում են կենտրոնական Log Analytics workspace, անվտանգության վիճակը՝ Defender for Cloud-ով։ Թիմերը deploy են անում OIDC-federated pipeline-ներով և Bicep կամ Terraform module-ներով ընդհանուր կատալոգից։ Trade-off-ը սկզբնական պլատֆորմային աշխատանքն է՝ ընդդեմ ավելի քիչ incident-ների և audit-ի ցավի հետագայում։
S2Cosmos DB․ ինչպե՞ս ընտրել partition key և capacity mode։
Partition key-ը որոշում է և՛ scalability-ն, և՛ արժեքը։ Լավ key-ը ունի բարձր cardinality, գրառումները հավասարաչափ է բաշխում և համապատասխանում է քո ամենահաճախ query-ներին, ուստի ընթերցումների մեծ մասը հասնում է մեկ partition-ի։ Multi-tenant SaaS-ի համար tenantId-ը բնական է, բայց մեծ tenant-ները կարող են hot դառնալ․ hierarchical partition key-երը (tenantId, ապա userId) լուծում են դա։ Cross-partition query-ները fan out են անում և շատ request unit արժեն։ Capacity-ի համար serverless-ը ամենաէժանն է ալիքաձև, ցածր ծավալի workload-ների համար, provisioned throughput-ը autoscale-ով հարմար է կայուն production traffic-ի համար և սահմանափակվում է քո ընտրած maximum-ով, իսկ manual provisioned-ը ամենաէժանն է միայն այն ժամանակ, երբ բեռնվածությունը շատ կանխատեսելի է։ Նաև consistency-ն ընտրիր ուշադիր․ session consistency-ն default է և ճիշտ է հավելվածների մեծ մասի համար, strong-ը ավելի թանկ է և սահմանափակում է multi-region գրառումները։
S3App Service, Container Apps, թե՞ AKS․ ինչպե՞ս որոշել նոր product-ի համար։
Հարցրու, թե թիմին ինչ է պետք վերահսկել։ App Service-ը հարմար է մեկ կամ մի քանի վեբ հավելվածի համար կայուն բեռնվածությամբ, թիմի համար, որը գնահատում է պարզությունն ու slot-երը, և կանխատեսելի plan-based գնագոյացման համար։ Container Apps-ը հարմար է բազմաթիվ container-ացված service-ների, event-driven worker-ների և փոփոխական traffic-ով API-ների համար, որտեղ scale մինչև զրոն ու KEDA կանոնները փող են խնայում, և չես ուզում Kubernetes գործարկել։ AKS-ը հարմար է platform թիմի համար, որին պետք է Kubernetes API-ն՝ Helm chart-եր, operator-ներ, custom networking, service mesh, GPU pool-եր կամ cloud-ների միջև տեղափոխելիություն, և որը կարող է իր վրա վերցնել upgrade-ներն ու cluster-ի անվտանգությունը։ Սխալվելու գինը ասիմետրիկ է․ Container Apps-ից AKS անցնելը հետագայում container-ների շնորհիվ պարզ է, իսկ AKS-ով սկսելը առանց հմտությունների մշտական operational բեռ է ստեղծում։
Բառարան
- Tenant
- Կազմակերպության Entra ID directory-ն, որը պահում է օգտատերերին, խմբերը և app registration-ները․ subscription-ները վստահում են մեկ tenant-ի։
- Subscription
- Billing-ի և quota-ի սահման, որը պարունակում է resource group-եր․ մոտավորապես համարժեք է AWS account-ին։
- Resource group
- Տրամաբանական folder ռեսուրսների համար, որոնք կիսում են նույն կյանքի ցիկլը․ այն ջնջելը ջնջում է ներսի ամեն ինչ։
- Entra ID
- Microsoft-ի cloud identity service-ը, նախկինում Azure Active Directory, որն օգտագործվում է աշխատակիցների մուտքի և հավելվածների authentication-ի համար։
- Managed identity
- Azure-ի կողմից կառավարվող identity ռեսուրսի համար, որը ավտոմատ token-ներ է ստանում՝ վերացնելով պահված secret-ների կարիքը։
- App Service plan
- VM-ների հավաքածուն և գնային tier-ը, որոնց վրա աշխատում են App Service հավելվածները․ գանձվում է՝ անկախ նրանից՝ հավելվածները զբաղված են, թե պարապ։
- Bicep
- Microsoft-ի դեկլարատիվ լեզուն Azure ենթակառուցվածքի համար, որը compile է լինում ARM template-ների և state ֆայլ չի պահանջում։
- Private endpoint
- Private IP քո VNet-ում, որը միանում է PaaS service-ին, որպեսզի traffic-ը շրջանցի public ինտերնետը։
- Flex Consumption
- Azure Functions-ի համար խորհուրդ տրվող serverless plan-ը՝ արագ scaling-ով, VNet աջակցությամբ և ըստ ցանկության always-ready instance-ներով։
Շարունակեք սովորել
Պրոդուկտի գաղափար ունե՞ք։Եկեք ստեղծենք այն։
Պատմեք ձեր գաղափարի, պրոդուկտի կամ թիմի մասին։ Սովորաբար պատասխանում եմ մեկ աշխատանքային օրվա ընթացքում։