Azure directory structure#
Azureの管理データの構造を辿りながら、Azure Storageを利用するために必要となる概念を紹介します。
Note
%%ai vioras
はIPythonのマジックコマンドです (%%
に注意)。
セル内の次行以降の文字列をプロンプトとしてChatGPTに送信し、レスポンスを表示します。
VIORASでは、ノートブックを開く際に
jupyterlab/jupyter-ai: A generative AI extension for JupyterLab
のマジックコマンド機能拡張 jupyter_ai_magics
をロードしています。
さらに、VIORASが提供しているChatGPTサービス (Azure OpenAIのgpt-4-32kモデル) に接続する設定を行っています。
%%ai vioras
Azureについて
Azureは、マイクロソフトが提供するクラウドコンピューティングプラットフォームおよびサービスの一つです。Azureは、ビジネスがデータセンターのインフラストラクチャの構築と管理に費やす時間と労力を大幅に削減することを可能にします。
Azureは、さまざまな種類のクラウドサービスを提供します。これには次のようなものがあります:
Compute - 仮想マシン(VM)、コンテナ、サーバーレスコンピューティングなどのカスタムアプリケーションまたはサービスの実行に使用されます。
Storage - データとアプリケーションの保存に使用されます。
Database - リレーショナルデータベース (SQL) や NoSQL データベースなどのデータベースソリューション。
Networking - 仮想ネットワーク、専用接続、ロードバランサーなどのネットワーキング機能。
AI + Machine Learning - データサイエンティストと開発者がAIと機械学習を使用してアプリケーションを構築するためのツールとサービス。
理論的には、Azureを使用して任意の種類のアプリケーションを構築し、どのような規模でも実行することが可能で、Azureはハイブリッドクラウド環境をサポートしているため、一部のリソースはオンプレミス、一部はクラウドで運用することが可能です。
さらに、Azureは完全なマネージドサービスとして提供されるため、ユーザーは物理的なハードウェアの管理やデータセンターのメンテナンスについて心配する必要がありません。これにより、ユーザーはより重要なビジネス課題に集中することができます。
%%ai vioras
マネージドサービスとは?
マネージドサービスとは、ITインフラストラクチャやシステムの一部または全部を、サービスとして提供するものを指します。これには、ネットワーキング、サーバー、アプリケーション、データストレージなどの管理とメンテナンスが含まれます。
マネージドサービスの提供者(MSP)は、組織が自身のIT運用を効率的に行い、そのビジネスに集中できるように支援します。具体的には、以下のような活動を担当することがあります:
システム管理と運用: MSPは、システムの日々の管理と運用を担当します。これには、システムの監視、パフォーマンス管理、セキュリティ管理、バックアップとリカバリなどが含まれます。
インフラストラクチャの設計と導入: MSPは、組織のITインフラストラクチャの設計と導入を支援します。これには、ネットワークの設計、サーバーの設定、ストレージシステムの導入などが含まれます。
ソフトウェアとアプリケーションの管理: MSPは、組織が使用するソフトウェアとアプリケーションのインストール、アップデート、パッチ適用、ライセンス管理などを行います。
テクニカルサポート: MSPは、IT問題に対するテクニカルサポートを提供します。これには、問題の診断と解決、ヘルプデスクサポートなどが含まれます。
Azureのようなクラウドプロバイダーは、マネージドサービスの形式で多くのサービスを提供します。例えば、Azure SQL Databaseは、管理やメンテナンスをAzureが担当するマネージドなリレーショナルデータベースサービスです。これにより、組織はデータベースの運用管理にかかる時間と労力を大幅に削減できます。
Note
以下、Azure CUI az
コマンドを使って、Azureの管理データのディレクトリ構造を解説しますが、
途中で利用しているストレージ拡張を自動的に導入するために、あらかじめ次の設定をしておきます。
なお、行頭の!
はシェルコマンドの実行です。
!az config set extension.use_dynamic_install=yes_without_prompt
Command group 'config' is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
テナントとサブスクリプション#
%%ai vioras
Azureのテナントとアカウントについて
Azureにおける「テナント」と「アカウント」は、クラウドリソースへのアクセスを管理するための重要な概念です。
テナント (Tenant): Azureテナントは、Azure Active Directory (Azure AD) のインスタンスを指します。これは、組織が所有する、または組織固有のリソースを制御するための信頼性のあるドメインを表します。テナントは、ユーザー、グループ、およびアプリケーションのディレクトリの役割を果たし、各ユーザーまたはサービスが何にアクセスできるかを制御します。組織は1つ以上のテナントを持つことができ、各テナントは完全に独立しています。
アカウント (Account): Azureアカウントは、Azureサブスクリプションを作成するために使用するMicrosoftのアカウントを指します。アカウントは個々のユーザーやサービスに関連付けられ、これによってAzureリソースを購入し、それらを管理することができます。アカウントは、メールアドレス、パスワード、および連絡先情報で構成されます。
これらの概念は、Azure環境のセキュリティと組織の管理の観点から重要です。テナントとアカウントを理解することで、リソースへのアクセスを適切に制御し、クラウド環境を安全に保つことができます。
%%ai vioras
Azureのサブスクリプションについて
Azureのサブスクリプションは、利用可能なAzure製品とサービスへのアクセスを提供し、それらの使用料を課金するための契約です。サブスクリプションを通じて、ユーザーはAzureリソースを作成、管理、および消費することができます。
Azureサブスクリプションは、組織によっては複数存在し得て、それぞれが独自の利用料と制約を持つことができます。各サブスクリプションは、特定の組織、部門、プロジェクト、または個々のユーザーに関連付けられることが一般的です。
サブスクリプションには以下のような特性があります:
アクセス管理とポリシー:Azureサブスクリプションは、リソースへのアクセスを管理し、特定のポリシーと制約を適用するための主要なスコープを提供します。これにより、組織は誰がどのリソースを利用できるかを詳細に制御することができます。
課金と支払い:各サブスクリプションは独自の課金と支払いの詳細を持ちます。これは、異なる部門やプロジェクトの利用状況を個別に追跡し、コストを管理するのに役立ちます。
利用制限とクォータ:Azureは、各サブスクリプションに対して特定のリソース利用制限またはクォータを設定します。これは、リソースの使用を制限し、予期しない課金を防ぐのに役立ちます。必要に応じてこれらの制限を増やすことも可能です。
サブスクリプションの管理は、Azureポータル、Azure PowerShell、Azure CLIを通じて、またはAzure Management APIsを使用してプログラム的に行うことができます。
Note
az
コマンドを用いると、現セッションの認証情報を表示できます。
テナント:
OUMail (Osaka University)
アカウント: e.g.
u416528d@ecs.osaka-u.ac.jp
サブスクリプション:
EDU-2022
VIORASでは、ログイン時にAzureADのOAuth2認証を行っています。
az
コマンドやPython APIは、アクセストークンを共有しているため再認証は必要ありません。
最後に紹介するAzCopy
は、独自のアクセストークンを参照するため、再度、認証を行う必要があります。
!az account show
{
"environmentName": "AzureCloud",
"homeTenantId": "00bc734c-1046-44ff-bb99-f4b01806d062",
"id": "a25ebad8-cf41-4969-ad5e-c9571a276106",
"isDefault": true,
"managedByTenants": [],
"name": "EDU-2022",
"state": "Enabled",
"tenantId": "00bc734c-1046-44ff-bb99-f4b01806d062",
"user": {
"name": "u416528d@ecs.osaka-u.ac.jp",
"type": "user"
}
}
!az account show --query "id"
"a25ebad8-cf41-4969-ad5e-c9571a276106"
!az account show --query "name"
"EDU-2022"
!az account show --query "user.name"
"u416528d@ecs.osaka-u.ac.jp"
Note
もし、上のようなアカウント情報が表示されない場合は、
az login --use-device-code
を実行して再認証して下さい。
コマンドを実行すると
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXXX to authenticate.
のようにURLとコードが表示されます。
URLをクリックするとブラウザがコードの入力画面に遷移するので、
9桁のコードをコピー・ペーストしてください。
!az login --use-device-code
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code IEYMZGBHW to authenticate.
The following tenants require Multi-Factor Authentication (MFA). Use 'az login --tenant TENANT_ID' to explicitly login to a tenant.
20e3511d-7f82-40ef-b1c5-68d140db222e 'Cloudedu Osaka'
55e6a757-a6ea-4be3-97ba-4464c4d91896 '既定のディレクトリ'
[
{
"cloudName": "AzureCloud",
"homeTenantId": "00bc734c-1046-44ff-bb99-f4b01806d062",
"id": "5abde0f8-480e-42a7-983d-f85f0dd87aa8",
"isDefault": false,
"managedByTenants": [],
"name": "Microsoft Azure Enterprise",
"state": "Enabled",
"tenantId": "00bc734c-1046-44ff-bb99-f4b01806d062",
"user": {
"name": "u416528d@ecs.osaka-u.ac.jp",
"type": "user"
}
},
{
"cloudName": "AzureCloud",
"homeTenantId": "00bc734c-1046-44ff-bb99-f4b01806d062",
"id": "a25ebad8-cf41-4969-ad5e-c9571a276106",
"isDefault": true,
"managedByTenants": [],
"name": "EDU-2022",
"state": "Enabled",
"tenantId": "00bc734c-1046-44ff-bb99-f4b01806d062",
"user": {
"name": "u416528d@ecs.osaka-u.ac.jp",
"type": "user"
}
},
{
"cloudName": "AzureCloud",
"homeTenantId": "885c7a52-09df-41e5-a3e1-a97f16c4e9dc",
"id": "ad976135-ea4a-4b4c-8761-329f4eaabc78",
"isDefault": false,
"managedByTenants": [],
"name": "by Prepay",
"state": "Enabled",
"tenantId": "885c7a52-09df-41e5-a3e1-a97f16c4e9dc",
"user": {
"name": "u416528d@ecs.osaka-u.ac.jp",
"type": "user"
}
}
]
Note
もし、サブスクリプションがEDU-2022
以外の場合は、
次のコマンドで設定を変更します。
!az account set --subscription a25ebad8-cf41-4969-ad5e-c9571a276106
Note
認証に関連してシステムが混乱していると思われる場合は、Azure Portal (ホーム - Microsoft Azure) の左肩をクリックするとログアウトして最初から認証をし直すことができます。 JupyterHubの制限から、VIORASにはログアウト機能がありません。
リソースグループとストレージアカウント#
Note
VIORASでは、サブスクリプションEDU-2022
にリソースグループJupyterHub-RG
を作成して構築管理しています。
VIORASでBlobストレージを利用する際は、
管理者がストレージアカウントを作成し、申請者のアカウントに権限を委譲する必要があります。
リソースグループ:
JupyterHub-RG
ストレージアカウント: e.g.
ecsosaka416528d
%%ai vioras
Azureのリソースグループについて
Azureのリソースグループは、Azureリソースをまとめて管理するためのコンテナです。リソースグループは、リソースのライフサイクルを管理し、アクセス制御を提供し、課金を集約する役割を果たします。
以下に、リソースグループの主な特性をいくつか挙げてみます:
一貫性のある管理: リソースグループを使用すると、関連するリソースをまとめて一貫した方法で管理することが可能になります。これにより、設定、モニタリング、およびデプロイメントの一貫性が向上します。
ライフサイクル管理: 一連のリソースが共通のライフサイクルを共有する場合(例えば、特定のアプリケーションの一部として一緒にデプロイされ、更新され、削除される場合)、それらを同じリソースグループに配置することが理にかなっています。これにより、一連のリソースを単一の操作で作成または削除することができます。
アクセス制御: AzureのRole-Based Access Control (RBAC) を使用して、リソースグループレベルでのアクセスと権限を設定することができます。これにより、特定のユーザーまたはグループがリソースグループ内のリソースに対して何を行うことができるかを詳細に制御することが可能になります。
課金: Azureはリソースグループレベルでの使用状況とコストを追跡し、それに基づいて課金します。これにより、特定のプロジェクトや部門のコストを追跡しやすくなります。
リソースグループはAzureリソースのロジカルなコンテナであるため、リソースグループ自体がリソースを消費するわけではありません。そのため、リソースグループを作成してもコストは発生せず、リソースグループ内に含まれる個々のリソースの使用によってのみコストが発生します。
%%ai vioras
Azureのストレージアカウントについて
Azureのストレージアカウントは、Azure Storageサービスでデータを保存するための一種のコンテナです。ストレージアカウントは、Azure Storageで提供される4つのデータサービス、すなわちBlobストレージ(オブジェクトストレージ)、File Storage(共有ファイルストレージ)、Queue Storage(メッセージキューイングサービス)、およびTable Storage(NoSQLデータベースサービス)を利用するための基盤を提供します。
以下に、ストレージアカウントの主な特性をいくつか挙げてみます:
データアクセス: ストレージアカウントは、保存されたデータへのアクセスを管理します。アクセスは、共有キー、Azure Active Directory (Azure AD)、または匿名公開を介して制御することができます。
パフォーマンス: ストレージアカウントは、パフォーマンス要件に基づいて、「標準」(HDD)または「プレミアム」(SSD)のいずれかに設定することができます。プレミアムパフォーマンスは、IOが集中するワークロードに適しています。
アクセス層: ストレージアカウントでは、「ホット」、「クール」、「アーカイブ」の3つのアクセス層を選択できます。これらは、データのアクセス頻度と保存期間に応じて選択します。
レプリケーション: ストレージアカウントには、データ耐久性と可用性を確保するためのレプリケーションオプションがいくつかあります。これには、ローカル冗長ストレージ (LRS)、ゾーン冗長ストレージ (ZRS)、地理冗長ストレージ (GRS)、および読み取りアクセス可能な地理冗長ストレージ (RA-GRS) が含まれます。
セキュリティ: ストレージアカウントでは、データ暗号化、ネットワークルール、およびアクセスポリシーを通じて、データのセキュリティを確保できます。
これらの設定と機能を通じて、ストレージアカウントはAzure Storageサービスの利用を柔軟に管理するための重要な役割を果たします。
!az storage account show --resource-group "JupyterHub-RG" \
--name "ecsosaka416528d" --query "id"
Command group 'az storage' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
"/subscriptions/a25ebad8-cf41-4969-ad5e-c9571a276106/resourceGroups/JupyterHub-RG/providers/Microsoft.Storage/storageAccounts/ecsosaka416528d"
!az storage account show --resource-group "JupyterHub-RG" \
--name "ecsosaka416528d" --query "accessTier"
Command group 'az storage' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
"Cool"
!az storage account show --resource-group "JupyterHub-RG" \
--name "ecsosaka416528d" --query "allowBlobPublicAccess"
Command group 'az storage' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
true
!az storage account show --resource-group "JupyterHub-RG" \
--name "ecsosaka416528d" --query "primaryEndpoints"
Command group 'az storage' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
"blob": "https://ecsosaka416528d.blob.core.windows.net/",
"dfs": "https://ecsosaka416528d.dfs.core.windows.net/",
"file": "https://ecsosaka416528d.file.core.windows.net/",
"internetEndpoints": null,
"microsoftEndpoints": null,
"queue": "https://ecsosaka416528d.queue.core.windows.net/",
"table": "https://ecsosaka416528d.table.core.windows.net/",
"web": "https://ecsosaka416528d.z11.web.core.windows.net/"
}
!az storage account show --resource-group "JupyterHub-RG" \
--name "ecsosaka416528d"
Command group 'az storage' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
"accessTier": "Cool",
"allowBlobPublicAccess": true,
"allowCrossTenantReplication": false,
"allowSharedKeyAccess": true,
"allowedCopyScope": null,
"azureFilesIdentityBasedAuthentication": null,
"blobRestoreStatus": null,
"creationTime": "2023-09-22T13:09:51.852952+00:00",
"customDomain": null,
"defaultToOAuthAuthentication": false,
"dnsEndpointType": "Standard",
"enableHttpsTrafficOnly": true,
"enableNfsV3": null,
"encryption": {
"encryptionIdentity": null,
"keySource": "Microsoft.Storage",
"keyVaultProperties": null,
"requireInfrastructureEncryption": false,
"services": {
"blob": {
"enabled": true,
"keyType": "Account",
"lastEnabledTime": "2023-09-22T13:09:51.931055+00:00"
},
"file": {
"enabled": true,
"keyType": "Account",
"lastEnabledTime": "2023-09-22T13:09:51.931055+00:00"
},
"queue": null,
"table": null
}
},
"extendedLocation": null,
"failoverInProgress": null,
"geoReplicationStats": null,
"id": "/subscriptions/a25ebad8-cf41-4969-ad5e-c9571a276106/resourceGroups/JupyterHub-RG/providers/Microsoft.Storage/storageAccounts/ecsosaka416528d",
"identity": null,
"immutableStorageWithVersioning": null,
"isHnsEnabled": null,
"isLocalUserEnabled": null,
"isSftpEnabled": null,
"keyCreationTime": {
"key1": "2023-09-22T13:09:51.931055+00:00",
"key2": "2023-09-22T13:09:51.931055+00:00"
},
"keyPolicy": null,
"kind": "StorageV2",
"largeFileSharesState": null,
"lastGeoFailoverTime": null,
"location": "japaneast",
"minimumTlsVersion": "TLS1_2",
"name": "ecsosaka416528d",
"networkRuleSet": {
"bypass": "AzureServices",
"defaultAction": "Allow",
"ipRules": [],
"resourceAccessRules": null,
"virtualNetworkRules": []
},
"primaryEndpoints": {
"blob": "https://ecsosaka416528d.blob.core.windows.net/",
"dfs": "https://ecsosaka416528d.dfs.core.windows.net/",
"file": "https://ecsosaka416528d.file.core.windows.net/",
"internetEndpoints": null,
"microsoftEndpoints": null,
"queue": "https://ecsosaka416528d.queue.core.windows.net/",
"table": "https://ecsosaka416528d.table.core.windows.net/",
"web": "https://ecsosaka416528d.z11.web.core.windows.net/"
},
"primaryLocation": "japaneast",
"privateEndpointConnections": [],
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "JupyterHub-RG",
"routingPreference": null,
"sasPolicy": null,
"secondaryEndpoints": {
"blob": "https://ecsosaka416528d-secondary.blob.core.windows.net/",
"dfs": "https://ecsosaka416528d-secondary.dfs.core.windows.net/",
"file": null,
"internetEndpoints": null,
"microsoftEndpoints": null,
"queue": "https://ecsosaka416528d-secondary.queue.core.windows.net/",
"table": "https://ecsosaka416528d-secondary.table.core.windows.net/",
"web": "https://ecsosaka416528d-secondary.z11.web.core.windows.net/"
},
"secondaryLocation": "japanwest",
"sku": {
"name": "Standard_RAGRS",
"tier": "Standard"
},
"statusOfPrimary": "available",
"statusOfSecondary": "available",
"storageAccountSkuConversionStatus": null,
"tags": {},
"type": "Microsoft.Storage/storageAccounts"
}
スコープとロール#
Note
ロールは管理者が設定をするため、通常は意識する必要がありません。 ただし、ストレージアカウントの操作に不具合がある場合に、 適切なロールが割り当てられているかを確認する必要が生じる場合があります。
%%ai vioras
Azureのロールについて
Azureのロールは、AzureのRole-Based Access Control (RBAC) の一部で、特定のアクションを許可または拒否する権限を定義します。これにより、ユーザーやグループがAzureリソースに対してどのような操作を行うことができるかを定義し、制御することができます。
Azureでは、ビルトインのロールとカスタムロールの2つのタイプのロールを提供しています:
ビルトインのロール: これらはAzureによって事前に定義された一連のアクセス許可で、一般的なユースケースをカバーします。例えば、「Contributor」、「Reader」、「Owner」などがあります。
カスタムロール: これらは、特定のニーズに合わせてユーザーが作成するロールです。これにより、特定のリソースに対する非常に特定のアクションを許可または拒否することが可能になります。
ロールは、特定のスコープ(管理グループ、サブスクリプション、リソースグループ、またはリソース)に割り当てることができます。ロール割り当ては、誰が(ユーザー、グループ、またはサービスプリンシパル)どのロールを持ち、どのスコープでそのロールを持つかを定義します。
これにより、Azure RBACは、Azureリソースへのアクセスを詳細に制御し、最小権限の原則に基づいてアクセス権を付与することを可能にします。
!az storage account show --resource-group "JupyterHub-RG" \
--name "ecsosaka416528d" --query "id"
Command group 'az storage' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
"/subscriptions/a25ebad8-cf41-4969-ad5e-c9571a276106/resourceGroups/JupyterHub-RG/providers/Microsoft.Storage/storageAccounts/ecsosaka416528d"
!az role definition list \
--scope "/subscriptions/a25ebad8-cf41-4969-ad5e-c9571a276106/resourceGroups/JupyterHub-RG/providers/Microsoft.Storage/storageAccounts/ecsosaka416528d" \
--query "[?contains(roleName,'Storage Blob')].[roleName, description]" -o tsv
Storage Blob Data Contributor Allows for read, write and delete access to Azure Storage blob containers and data
Storage Blob Data Owner Allows for full access to Azure Storage blob containers and data, including assigning POSIX access control.
Storage Blob Data Reader Allows for read access to Azure Storage blob containers and data
Storage Blob Delegator Allows for generation of a user delegation key which can be used to sign SAS tokens
!az role assignment list \
--scope "/subscriptions/a25ebad8-cf41-4969-ad5e-c9571a276106/resourceGroups/JupyterHub-RG/providers/Microsoft.Storage/storageAccounts/ecsosaka416528d" \
--query "[*].{user:principalName,role:roleDefinitionName}" -o tsv
u416528d@ecs.osaka-u.ac.jp Storage Blob Data Contributor
コンテナとBlob#
Note
ストレージアカウントに権限が割り当てられると、 コンテナを作成することができるようになります。 コンテナはBlobを格納することができます。 VIORASでは、Blobは階層型ファイルシステムと同等のディレクトリ構造を持つことができ、 GUI (Azure Storage Explorer) や CUI (AzCopy) を使うと、 ローカルファイルシステムをそのまま同期することができます。
コンテナ: e.g.
textbook-2023
%%ai vioras
AzureストレージのコンテナとBlobについて
Azure Blob Storageは、大量の非構造化データを保存するためのオブジェクトストレージソリューションです。非構造化データとは、テキストやバイナリデータなどのメディアファイル、文書、バックアップデータ、ログファイルなどを指します。
Blob (Binary Large OBjects)
Blobは、大量のテキストまたはバイナリデータ(画像、音声、ビデオなど)を保存できます。Blobは、Azure Storageに保存されるデータの最小単位です。Blobには3つのタイプがあります:
Block Blobs: テキストやバイナリデータの保存に最適で、最大約4.75TBのデータを保存できます。
Append Blobs: 主にログデータのような追加専用のパターンに対応しています。
Page Blobs: 頻繁にランダムにアクセスする必要がある大量のデータ(例えば、仮想ハードドライブなど)に適しています。
コンテナ
コンテナは、Blobのグループを保持するための「フォルダ」のようなものです。コンテナは、ストレージアカウント内でBlobsを整理するために使用されます。一つのストレージアカウント内には何百万ものコンテナを作成することができ、一つのコンテナ内には何百万ものBlobを保存できます。
各コンテナとBlobは、一意の名前を持ち、これによりそれぞれのURLが生成されます。これにより、アプリケーションは特定のBlobに直接アクセスできます。
Blob Storageは、大量の非構造化データを保存し、世界中のどこからでもアクセス可能にするための非常に効果的なソリューションです。また、ストリーミングビデオと音声、バックアップ、ロギング、アーカイブなどの用途にも広く使用されています。
!az storage container list --account-name "ecsosaka416528d" \
--query "[*].[name]" -o tsv --auth-mode login
Command group 'az storage' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
textbook-2023
!az storage container list --account-name "ecsosaka416528d" \
--auth-mode login
Command group 'az storage' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
[
{
"deleted": null,
"encryptionScope": {
"defaultEncryptionScope": "$account-encryption-key",
"preventEncryptionScopeOverride": false
},
"immutableStorageWithVersioningEnabled": false,
"metadata": null,
"name": "textbook-2023",
"properties": {
"etag": "\"0x8DBBBEFA2B33100\"",
"hasImmutabilityPolicy": false,
"hasLegalHold": false,
"lastModified": "2023-09-23T04:43:30+00:00",
"lease": {
"duration": null,
"state": "available",
"status": "unlocked"
},
"publicAccess": null
},
"version": null
}
]
!az storage blob list --account-name "ecsosaka416528d" \
--container-name "textbook-2023" --query "[*].[name]" -o tsv \
--auth-mode login
Command group 'az storage' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
chapters/.ipynb_checkpoints/1200-intro-checkpoint.ipynb
chapters/.ipynb_checkpoints/1210-kepler_1-checkpoint.ipynb
chapters/.ipynb_checkpoints/1220-kepler_2-checkpoint.ipynb
chapters/.ipynb_checkpoints/1230-cycloid-checkpoint.ipynb
chapters/.ipynb_checkpoints/1290-assignment-checkpoint.ipynb
chapters/01/.ipynb_checkpoints/01_intro-checkpoint.ipynb
chapters/01/.ipynb_checkpoints/02_openai-checkpoint.ipynb
chapters/01/.ipynb_checkpoints/03_chatgpt-checkpoint.ipynb
chapters/01/01_intro.ipynb
chapters/01/02_openai.ipynb
chapters/01/03_chatgpt.ipynb
chapters/01/04_assignment.ipynb
chapters/01/images/20230411.pptx
chapters/01/images/fig-01.png
chapters/01/images/fig-02.png
chapters/01/images/fig-03.png
chapters/01/images/fig-04.png
chapters/01/images/fig-05.png
chapters/01/images/fig-06.png
chapters/01/images/fig-07.png
chapters/01/images/fig-08.png
chapters/01/images/fig-09.png
chapters/01/images/fig-10.png
chapters/01/images/fig-11.png
chapters/01/images/fig-12.png
chapters/01/images/fig-13.png
chapters/01/images/fig-14.png
chapters/01/images/fig-15.png
chapters/01/intro_add.md
chapters/01/intro_add_4.md
chapters/01/intro_add_5.md
chapters/01/intro_add_6.md
chapters/02/01_orientation.ipynb
chapters/02/02_assignment.ipynb
chapters/02/03_examination.ipynb
chapters/02/04_assignment.ipynb
chapters/02/images/fig-2-01.png
chapters/02/images/fig-2-02.png
chapters/03/10_intro.ipynb
chapters/03/20_assignment.ipynb
chapters/03/21_similarities.ipynb
chapters/03/22_dict.ipynb
chapters/03/23_dict.ipynb
chapters/03/40_positional.ipynb
chapters/03/50_assignment.ipynb
chapters/04/.ipynb_checkpoints/10_intro-checkpoint.ipynb
chapters/04/.ipynb_checkpoints/20_pythagoras-checkpoint.ipynb
chapters/04/.ipynb_checkpoints/22_dict-Copy1-checkpoint.ipynb
chapters/04/.ipynb_checkpoints/23_dict-Copy1-checkpoint.ipynb
chapters/04/.ipynb_checkpoints/40_egyptian_numerals-checkpoint.ipynb
chapters/04/.ipynb_checkpoints/50_babylonican_numerals-checkpoint.ipynb
chapters/04/.ipynb_checkpoints/90_assignment-checkpoint.ipynb
chapters/04/10_intro.ipynb
chapters/04/20_pythagoras.ipynb
chapters/04/22_dict-Copy1.ipynb
chapters/04/23_dict-Copy1.ipynb
chapters/04/40_egyptian_numerals.ipynb
chapters/04/50_babylonian_numerals.ipynb
chapters/04/90_assignment.ipynb
chapters/05/.ipynb_checkpoints/490_assignment-checkpoint.ipynb
chapters/05/.ipynb_checkpoints/500_arche-checkpoint.ipynb
chapters/05/.ipynb_checkpoints/510_octave-checkpoint.ipynb
chapters/05/.ipynb_checkpoints/520_timbre-checkpoint.ipynb
chapters/05/.ipynb_checkpoints/530_temperament-checkpoint.ipynb
chapters/05/.ipynb_checkpoints/590_assignment-checkpoint.ipynb
chapters/05/490_assignment.ipynb
chapters/05/500_arche.ipynb
chapters/05/510_octave.ipynb
chapters/05/520_timbre.ipynb
chapters/05/530_temperament.ipynb
chapters/05/590_assignment.ipynb
chapters/05/FMP_C1_F23_Flute.wav
chapters/05/FMP_C1_F23_Piano.wav
chapters/05/FMP_C1_F23_Trumpet.wav
chapters/05/FMP_C1_F23_Violin.wav
chapters/05/FMP_C1_Scale-Cmajor_Piano.mp3
chapters/05/FMP_C1_Scale-Cmajor_Piano.wav
chapters/06/.ipynb_checkpoints/590_assignment-Copy1-checkpoint.ipynb
chapters/06/.ipynb_checkpoints/610_intro-checkpoint.ipynb
chapters/06/.ipynb_checkpoints/620_timbre-checkpoint.ipynb
chapters/06/.ipynb_checkpoints/650_optimization-checkpoint.ipynb
chapters/06/.ipynb_checkpoints/660_combination-checkpoint.ipynb
chapters/06/.ipynb_checkpoints/661_combination-checkpoint.ipynb
chapters/06/.ipynb_checkpoints/662_combination-checkpoint.ipynb
chapters/06/590_assignment-Copy1.ipynb
chapters/06/610_intro.ipynb
chapters/06/620_timbre.ipynb
chapters/06/650_optimization.ipynb
chapters/06/660_combination.ipynb
chapters/06/661_combination.ipynb
chapters/06/662_combination.ipynb
chapters/07/.ipynb_checkpoints/662_combination-Copy1-checkpoint.ipynb
chapters/07/.ipynb_checkpoints/701_plimpton322-checkpoint.ipynb
chapters/07/.ipynb_checkpoints/702_plimpton322-checkpoint.ipynb
chapters/07/.ipynb_checkpoints/710_intro-checkpoint.ipynb
chapters/07/.ipynb_checkpoints/720_assignment-checkpoint.ipynb
chapters/07/.ipynb_checkpoints/fig-2-checkpoint.jpeg
chapters/07/662_combination-Copy1.ipynb
chapters/07/701_plimpton322.ipynb
chapters/07/702_plimpton322.ipynb
chapters/07/710_intro.ipynb
chapters/07/720_assignment.ipynb
chapters/07/fig-2.jpeg
chapters/07/fig-3.jpeg
chapters/08/.ipynb_checkpoints/720_assignment-Copy1-checkpoint.ipynb
chapters/08/.ipynb_checkpoints/721_assignment-checkpoint.ipynb
chapters/08/.ipynb_checkpoints/800_assignment-checkpoint.ipynb
chapters/08/.ipynb_checkpoints/801_ybc7289-checkpoint.ipynb
chapters/08/.ipynb_checkpoints/802_ybc7289-checkpoint.ipynb
chapters/08/.ipynb_checkpoints/810_intro-checkpoint.ipynb
chapters/08/.ipynb_checkpoints/830_assignment-checkpoint.ipynb
chapters/08/720_assignment-Copy1.ipynb
chapters/08/721_assignment.ipynb
chapters/08/800_assignment.ipynb
chapters/08/801_ybc7289.ipynb
chapters/08/802_ybc7289.ipynb
chapters/08/810_intro.ipynb
chapters/08/830_assignment.ipynb
chapters/09/.ipynb_checkpoints/810_intro-Copy1-checkpoint.ipynb
chapters/09/.ipynb_checkpoints/830_assignment-Copy1-checkpoint.ipynb
chapters/09/.ipynb_checkpoints/902-checkpoint.ipynb
chapters/09/810_intro-Copy1.ipynb
chapters/09/830_assignment-Copy1.ipynb
chapters/09/902.ipynb
chapters/10/.ipynb_checkpoints/1090_assignment-checkpoint.ipynb
chapters/10/1090_assignment.ipynb
chapters/11/.ipynb_checkpoints/1091_assignment-checkpoint.ipynb
chapters/11/.ipynb_checkpoints/1190_assignment-checkpoint.ipynb
chapters/11/1091_assignment.ipynb
chapters/11/1190_assignment.ipynb
chapters/12/.ipynb_checkpoints/1200-intro-checkpoint.ipynb
chapters/12/.ipynb_checkpoints/1210-kepler_1-checkpoint.ipynb
chapters/12/.ipynb_checkpoints/1220-kepler_2-checkpoint.ipynb
chapters/12/.ipynb_checkpoints/1230-cycloid-checkpoint.ipynb
chapters/12/.ipynb_checkpoints/1290-assignment-checkpoint.ipynb
chapters/12/1190_assignment.ipynb
chapters/12/1200-intro.ipynb
chapters/12/1210-kepler_1.ipynb
chapters/12/1220-kepler_2.ipynb
chapters/12/1230-cycloid.ipynb
chapters/12/1290-assignment.ipynb
chapters/13/.ipynb_checkpoints/1220-kepler_2-Copy1-checkpoint.ipynb
chapters/13/.ipynb_checkpoints/1230-cycloid-Copy1-checkpoint.ipynb
chapters/13/.ipynb_checkpoints/1290-assignment-Copy1-checkpoint.ipynb
chapters/13/.ipynb_checkpoints/1360-dncl-checkpoint.ipynb
chapters/13/.ipynb_checkpoints/1370-2008-checkpoint.ipynb
chapters/13/1220-kepler_2-Copy1.ipynb
chapters/13/1230-cycloid-Copy1.ipynb
chapters/13/1290-assignment-Copy1.ipynb
chapters/13/1360-dncl.ipynb
chapters/13/1370-2008.ipynb
chapters/13/fig-11.png
chapters/13/fig-12.png
chapters/13/fig-21.png
chapters/13/fig-22.png
chapters/13/fig-23.png
chapters/13/fig-24.png
chapters/13/fig-25.png
chapters/13/fig-26.png
chapters/14/.ipynb_checkpoints/1400-intro-checkpoint.ipynb
chapters/14/.ipynb_checkpoints/1410-2010#1-checkpoint.ipynb
chapters/14/.ipynb_checkpoints/1420-2010#2-checkpoint.ipynb
chapters/14/.ipynb_checkpoints/1430-2010#2-checkpoint.ipynb
chapters/14/.ipynb_checkpoints/1470-2010#3-checkpoint.ipynb
chapters/14/1400-intro.ipynb
chapters/14/1410-2010_1.ipynb
chapters/14/1420-2010_2.ipynb
chapters/14/1430-2010_2.ipynb
chapters/14/1470-2010_3.ipynb
chapters/14/fig-01.png
chapters/14/fig-02.png
chapters/14/fig-03.png
chapters/14/fig-04.png
chapters/14/fig-05.png
chapters/14/fig-06.png
chapters/15/.ipynb_checkpoints/1510-intro-checkpoint.ipynb
chapters/15/.ipynb_checkpoints/1520-newton-checkpoint.ipynb
chapters/15/.ipynb_checkpoints/1530-diffgeom-checkpoint.ipynb
chapters/15/.ipynb_checkpoints/1540-curvature-checkpoint.ipynb
chapters/15/.ipynb_checkpoints/1550-metric-checkpoint.ipynb
chapters/15/.ipynb_checkpoints/1560-field_equation-checkpoint.ipynb
chapters/15/.ipynb_checkpoints/1570-geodesic-checkpoint.ipynb
chapters/15/1510-intro.ipynb
chapters/15/1520-newton.ipynb
chapters/15/1530-diffgeom.ipynb
chapters/15/1540-curvature.ipynb
chapters/15/1550-metric.ipynb
chapters/15/1560-field_equation.ipynb
chapters/15/1570-geodesic.ipynb
chapters/intro.md