Skip to content

Latest commit

 

History

History
161 lines (129 loc) · 7.07 KB

File metadata and controls

161 lines (129 loc) · 7.07 KB

AppService SQL adatbázissal

Telepítendő alkalmazásként egy másik tárgy példaalkalmazását használjuk.

Azure SQL

  • szolgáltatási szint: free serverless
  • Networking (a szerveren) - állítsuk be a saját IP-nket (Add Client IP) és engedélyezzük az Azure hozzáférést is (Allow Azure services and resources to access this server )
  • nézzük meg:
    • a szerver és az adatbázis erőforrásokat
    • skálázás (db)
    • backup (szerver)
    • connection strings (db)
    • Add Azure Search (db)
    • a webes Query Editor-ban ellenőrizzük, hogy üres az adatbázis

Példaprojekt beüzemelése

  • Töltsük le a példaprojektet
  • EF Migrations beüzemelése. Használjuk az Entra alapú connection stringet (cseréljük "" -> ''). A projektfájl (.csproj) könyvtárában:
dotnet tool install -g dotnet-ef
dotnet ef database update --project BookShop.Dal --startup-project BookShop.Web/BookShop.Web --connection "connectionstringünk"
  • futtat, próba. Ellenőrizzük weben az adatbázis tartalmat.

Web App / App Service

Egy előfizetés-régió-OS kombináción belül egyetlen free plan lehet.

App Service Service Connector

Kattintsuk össze a Service Connector kapcsolatot (System-assigned MSI), a végén kiköp egy Azure CLI parancsot. Futtatásnál tegyünk a parancs végére plusz egy kapcsolót: '--customized-keys AZURE_SQL_CONNECTIONSTRING=ConnectionStrings__DefaultConnection '

Ellenőrizzük portálon, hogy létrejött-e (Validate gomb)

Deployment

dotnet publish "BookShop.Web\BookShop.Web\BookShop.Web.csproj" -c Release -o ./publish
Compress-Archive -Path "./publish/*" -DestinationPath "publish.zip" -Force
az webapp deploy --resource-group bookshop --name <app service neve> --src-path publish.zip --type zip --async

Diagnose & solve problems

  • Diagnose & solve problems > Application Logs

SQL AD Auth MSI-vel, ha a Service Connector nem működne

  • Kapcsoljuk be az App Service-ben a system managed indetity-t (Identity lap)
  • Kapcsoljuk be az SQL Server-en az AD integrációt (Active Directory admin lap), saját magunkat adjuk meg
  • Osszunk jogokat az SQL Server-ben az MSI-nek
    • Az identitás neve App Service esetében az App Service neve
CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
  • Állítsuk át a connection string-et "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"

  • Ellenőrző szkript felhasználók listázásához

select name as username,
       create_date,
       modify_date,
       type_desc as type,
       authentication_type_desc as authentication_type
from sys.database_principals
where type not in ('A', 'G', 'R', 'X')
      and sid is not null
order by username;
  • Ellenőrző szkript jogosultságok listázásához
-- List of database roles for the MSI user
SELECT dp.name AS principal_name, dp.type_desc AS principal_type, r.name AS role_name
FROM sys.database_role_members AS m
JOIN sys.database_principals AS dp ON m.member_principal_id = dp.principal_id
JOIN sys.database_principals AS r ON m.role_principal_id = r.principal_id;

-- List of object-level permissions for the MSI user
SELECT d.name AS object_name, dp.name AS principal_name, dp.type_desc AS principal_type, p.permission_name
FROM sys.database_permissions AS p
JOIN sys.database_principals AS dp ON p.grantee_principal_id = dp.principal_id
LEFT JOIN sys.objects AS d ON p.major_id = d.object_id
WHERE dp.name NOT IN ('dbo','public');
  • Ellenőrző szkript - ki járt az adatbázisban
SELECT connection_id, 
       c.client_net_address,
       c.session_id, 
       connect_time,
       client_net_address, 
       client_tcp_port,
       host_name,
       program_name, 
       login_name, 
	     original_login_name,
	     nt_user_name,
       row_count
FROM sys.dm_exec_connections c
JOIN sys.dm_exec_sessions s ON s.session_id = c.session_id
WHERE DATETRUNC(d, s.login_time)= DATETRUNC( d, GETDATE())
  • Ellenőrző szkript - session login name visszafejtése
az ad sp show --id <a login_name @ előtti része>

Application Insights w Log Analytics Workspace

https://learn.microsoft.com/en-us/azure/azure-monitor/overview#overview

Deployment slots

  • fel kell skálázni S1 szintre (0,085 EUR/óra költség!)
  • hozzunk létre új slot-ot test néven, klónoztassuk a configot az eredetiből
  • ez egy új app, Identity-t be kell kapcsolni + fel kell venni az SQL adatbázisba a slot felhasználót [<appnév>/slots/<slotnév>]
  • legyen egy kis eltérés, pl. a _Layout.cshtml-be:
    <li class="nav-item">
      <a class="nav-link text-dark" asp-area="" asp-controller="Todos" asp-action="Index">Todos</a>
    </li>
  • Ha git-tel publikálunk: deployment opciókat inicializálni, majd push
  • Ha Az CLI-vel publikálunk: --slot slotnév hozzáadása az az webapp deploy parancshoz
  • swap a két slot között

Azure Load test & scale-out lehetőségek

Labor végén/után

  • App Service Plan visszaskálázás (előbb egy kivételével minden slot-ot törölni kell) vagy törlés