Azure: Jak skopiować plik na blob storage container za pomocą AZ CLI?

2024-02-21

Zacznijmy od tego, że się trzeba zalogować. Można to zrobić na różne sposoby, ale powiedzmy, że wykonamy polecenie:

az login

i dokończymy logowanie w przeglądarce.

Istotne jest, aby mieć odpowiednie uprawnienia. W przeciwnym razie dostaje się komunikat podobny do poniższego:

You do not have the required permissions needed to perform this operation.
Depending on your operation, you may need to be assigned one of the following roles:
„Storage Blob Data Owner”
„Storage Blob Data Contributor”
„Storage Blob Data Reader”
„Storage Queue Data Contributor”
„Storage Queue Data Reader”
„Storage Table Data Contributor”
„Storage Table Data Reader”

Jeśli dodasz sobie uprawnienia, bo były za niskie, to poczekaj chwilę przed kolejną próbą. Azure nie od razu widzi nadane uprawnienia. Dla pewności można sie nawet wylogować i zalogować ponownie. Polecenie do wylogowania to:

az logout

No i przechodzimy do esencji, czyli kopiowania pliku. Odpowiednia komenda to az storage blob copy start. Polecenie trochę długie, ale ma sens. Na początku az, czyli nazwa komendy. Potem storage, bo pracujemy ze storage. Blob, bo kopiowanie ma się odbyć na blob service, dalej copy, bo chcemy przekopiować plik i ostatecznie start, bo to polecenie jest asynchroniczne – komenda się wykona, a kopiowanie może nadal trwać w tle. Dodatkowe parametry do przekazania to:

  • –destination-blob <filename> – określa nazwę, pod jaką plik ma się pojawić na blobie
  • –destination-container <containername> – określa nazwę kontenera, do którego plik ma być przesłany
  • –account-name <storageaccountname> – tutaj podaj krótką nazwę storage account. Nie trzeba podawać długiej nazwy, bo Azure już wie, że chodzi o blob service, a krótka nazwa i tak musi być unikalna globalnie w skali całego świata
  • –source-uri <uri> – określa adres źródłowy, pod jakim znajduje się plik do przekopiowania
  • –authmode login – mówi, że żądanie ma być uwierzytelnione w oparciu o EntraID – właśnie dlatego ten przykład zaczął się od zalogowania do Azure

Oto przykład pełnej komendy, która „kradnie” plik z wikipedii i umieszcza na twoim storage account

az storage blob copy start --destination-blob comp1.jpg --destination-container test_container --account-name stoacc7635442 --source-uri https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/IMac.jpg/330px-IMac.jpg --auth-mode login
By Rafał Kraik in Azure

Aktualności: Kurs: SQL Server #5 – Procedury, Triggery i Funkcje

2024-02-17

Znajomość zapytań w pracy z SQL Server to już bardzo dużo, ale jeszcze więcej można osiągnąć znając procedury, triggery i funkcje. Dlaczego?

  • Procedury są efektywniejsze, bezpieczniejsze, pozwalają zapisać w bazie danych oprócz samych rekordów również logikę, która decyduje o tym, jak dane mają być przetwarzane
  • Dzięki parametrom procedury i funkcje mogą wykonywać różne operacje, w zależności od tego jak zostały uruchomione
  • Triggery pozwalają z kolei na wykonywanie rzeczy, które inaczej byłyby niemożliwe do zrobienia: propagacja danych, aktualizacja widoków, kontrola danych – na wyższym logicznym poziomie itp.

Znajomość SQL Server przyda się nie tylko programistom i administratorom SQL, ale też analitykom danych i inżynierom Data Science.

Sporą porcję wiedzy właśnie na ten temat znajdziesz na kursie SQL Server #5: Procedury, triggery i funkcje, dostępnym na Udemy. Kurs zawiera kilka godzin materiału video, podzielonego na przyjemne kilkuminutowe lekcje, podręcznik PDF z notatkami do każdej lekcji, zadaniami do rozwiązania, propozycjami rozwiązań i repozytorium kodu na GitHub. Aktualne kody promocyjne znajdziesz na stronie www.kursyonline24.eu

By Rafał Kraik in Aktualności

Python: Sprawdzenie wersji modułu z Jupyter Notebook

2024-01-22

Praca z Jupyter Notebook daje fajną izolację od tego co dzieje sie na poziomie systemu operacyjnego. Co jednak zrobić, kiedy chcesz dowiedzieć się z jaką wersją modułu lub pythona pracujesz? Prosto:

Żeby sprawdzić numer wersji Pythona użyj:

import sys
sys.version_inf
o

Żeby sprawdzić numer wersji modułu skorzystaj z :

import pandas as pd
pd.version

By Rafał Kraik in Python

Aktualizacja KB5034441: Wystąpiły problemy… ponów próbę później

2024-01-22

Aktualizacja KB5034441 na Windows 10 może kończyć się błędem jeśli partycja recovery jest zbyt mała (np. rozmiar 445 był zbyt mały, ale już 799 jest ok).

Poradnik opisujący, jak zmienić rozmiar partycji dodając do niej 250 MB znajduje się tutaj i zadziałał dla mnie idealnie:

KB5028997: Instrukcje ręcznej zmiany rozmiaru partycji w celu zainstalowania aktualizacji WinRE – Pomoc techniczna firmy Microsoft

Oto, jak wyglądało wykonanie wszystkich kroków:

Czytaj dalej »

By Rafał Kraik in Helpdesk, SQL

Git: fatal: repository XXX not found

2024-01-03

Bywa, zwłaszcza po dobrej zabawie (z kodem), że próba sklonowania kodu z github-a kończy się błędem:

Cloning into 'XXX’…
remote: Repository not found.
fatal: repository 'https://github.com/YYY/XXX.git/’ not found

Ogólnie rzecz biorąc, to pewnie nie jest tak, że repo nie istnieje (no chyba że zabawa była zacniejsza niż zwykle), a przyczyną jest to, że git próbuje sklonować repo myśląc że jest ono publiczne, a tymczasem repo jest prywatne. Dlatego trzeba się „jakoś” zalogować. Oto jak to zrobić:

  • Upewnij się, że masz dobrze ustawione parametry gita user.name i user.email. Zrobisz to poleceniem
git config user.name
git config user.email
  • Jeśli te polecenia nic nie zwracają, to ustaw te parametry poleceniami poniżej. Opcja –local oznacza, że parametr ma być zapisany tylko w tym jednym katalogu. Opcja –global oznaczałaby, że parametr ma być skonfigurowany na wszystkie katalogi użytkownika
git config user.name <twoja_nazwa>
git config user.email <twoj_email>
  • Teraz wygeneruj w GitHub nowy Personal Access Token (PAT)
  • Jeszcze raz sklonuj repo, ale tym razem wskaż, że klonowanie ma się odbywać za pomocą twojego użytkownika GitHub:
git clone https://twoja_nazwa@github.com/twoja_nazwa/nazwa_repo.git
  • Podczas logowania pojawi się okienko logowania do GitHub. Przejdź na zakładkę „token” i tam wklej swój token, jak na obrazku poniżej. Teraz klonowanie powinno się udać
By Rafał Kraik in Git

WSL: Bash na Windows:

2023-12-19

Podczas instalacji WSL (Windows Subsystem for Linux), czyli popularnie rzecz ujmując Linuxa na Windows dostałem taki oto błąd:

The attempted operation is not supported for the type of object referenced. Error code: Wsl/Service/0x8007273d

Przed tym błędem wykonywałem isntalację w taki sposób, że:

  1. Odinstalowałem WSL w „Odinstalowałem WSL w „Programs and Features” w „Turn Windows features on or off” i… zrobiłem restart
  2. Jako administrator uruchomiłem cmd, a w nim wykonałem polecenie
    wsl –install
    i… zrobiłem restart
  3. Po restarcie wylistowałem dostępne dystrybucje:
    wsl -l -o
    i wybrałem sobie dystrybucję Ubuntu (co zresztą dzije się domyślnie)
    wsl –install -d Ubuntu
    No i tu właśnie wyskoczył wspomniany błąd.
  4. Tak trafiłem na stronę [SOLUTION] „The attempted operation is not supported for the type of object referenced.” error after Windows Update · Issue #547 · MicrosoftDocs/WSL (github.com), która podała przepis, jaki u mnie zadział, chociaż nie od razu 🙂

Ogólnie rzecz biorąc zaczyna sie od dodania do rejestru kilku wpisów:

Zgadnij, co było dalej – tak … restart

Próba uruchomienia WSL nadal kończyła się błędem. I wtedy zrobiłem jeszcze dwie rzeczy:

wsl --shutdown
netsh winsock reset

A potem…. restart. Po tych operacjach wszystko zadziałało.

Jeśli u Ciebie nie działa, to zwróć jeszcze raz uwagę na:

  • uruchamiaj polecenia „jako administrator”
  • wykonuj restarty po każdym kroku
  • podczas klikania polecenia „uruchom ponownie” przytrzymaj na klawiaturze SHIFT. Powoduje to pełnu rozruch systemu.
By Rafał Kraik in Helpdesk

Azure, powershell i SQL

2023-12-18

Technologie się mieszają… tutaj zobaczysz, jak w Azure SQL Database utworzyć konto użytkownika korzystając z PowerShella.

Zaczynamy od doinstalowania modułu SQLPS pozwalającego na połączenie z poziomu PowerShell do bazy danych (https://learn.microsoft.com/en-us/sql/powershell/download-sql-server-ps-module?view=sql-server-ver16):

Install-Module -Name SqlServer

No to pora na połączenie się do subskrypcji:

Connect-AzAccount
Select-AzSubscription -Subscription XXX

Mój przypadek wymagał zdefiniowania zmiennych przez zmienne środowiskowe, ale śmiało można by skorzystać ze zwykłych zmiennych:

# set environment

$env:RG = "RG-Test-Mobilo"
$env:SQLServerName= "sql-test-mobilo"
$env:sqlcmdserver = "$($env:SQLServerName).database.windows.net"
$env:sqlcmddbname="ssqldb-mobilo"
$env:USERNAME="boss"
$env:PWD="***"
$env:SQLQUERY="select @@version"$env:newUser = "my_new_user"
$env:newUserPass = "C0mpl1c4t3d-Pass!"

Do połączenia do bazy Azure SQL Database wymagane jest otwarcie firewalla. Jest to jedno z ustawień bazy danych i można je ewentualnie wykonać np. w Portalu, ale czemu by nie wykorzystać PowerShella:

$myPublicIp=(Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
New-AzSqlServerFirewallRule -ResourceGroupName $env:RG -ServerName $env:SQLServerName -FirewallRuleName "Rule-$myPublicIp" -StartIpAddress $myPublicIp -EndIpAddress $myPublicIp

No to pora na testowe połączenie:

Invoke-SqlCmd -Query $env:SQLQUERY -ServerInstance $env:SQLCMDSERVER -Database $env:SQLCMDDBNAME -Username $env:USERNAME -Password $env:PWD

Jeśli w odpowiedzi zobaczysz wersję serwera – bingo! Można uruchomić polecenie tworzące użytkownika:

Invoke-SqlCmd -Query "CREATE USER $($env:newUser) WITH PASSWORD='$($env:newUserPass)' ; ALTER ROLE db_owner add member $($env:newUser);" -ServerInstance $env:SQLCMDSERVER -Database $env:SQLCMDDBNAME -Username $env:USERNAME -Password $env:PWD

No i na koniec można ponowić uruchomienie testowego zapytania, ale tym razem korzystając z konta nowego użytkownika:

Invoke-SqlCmd -Query $env:SQLQUERY -ServerInstance $env:SQLCMDSERVER -Database $env:SQLCMDDBNAME -Username $env:newUser -Password $env:newUserPass

By Rafał Kraik in Azure