Azure DevOps ツールを使用すると、ハイ パフォーマンス コンピューティング (HPC) ソリューションAzure Batch構築とテストを自動化できます。 Azure Pipelinesは、ソフトウェアの構築、展開、テスト、および監視を行う最新の継続的インテグレーション (CI) プロセスと継続的デプロイ (CD) プロセスを提供します。 これらのプロセスによってソフトウェアの配信が高速化されるため、インフラストラクチャや運用をサポートするのではなく、コードに集中できます。
この記事では、Azure Resource Manager テンプレート (ARM テンプレート) でAzure Pipelinesを使用して CI/CD プロセスを設定し、Azure Batchに HPC ソリューションをデプロイする方法について説明します。 この例では、Azure Batch インフラストラクチャをデプロイし、アプリケーション パッケージをリリースするビルドおよびリリース パイプラインを作成します。 次の図は、コードがローカルで開発されていると仮定した場合の一般的なデプロイ フローを示しています。
前提条件
この記事の手順に従うには、次のものが必要です。
Azure DevOps組織、および組織で作成されたAzure Repos リポジトリを持つAzure DevOpsプロジェクト。 Azure DevOps projectには、Project Administrator、Build Administrator、Release Administrator の各ロールが必要です。
ロールの割り当て機能を含む所有者またはその他のロールを持つアクティブなAzure サブスクリプション。 詳細については、「Azure のロール割り当てについて」を参照してください。
ソース管理と ARM テンプレート構文の基本的な理解。
ソリューションを準備する
この記事の例では、複数の ARM テンプレートと既存のオープンソースビデオ処理アプリケーション FFmpeg を使用します。 これらのリソースをコピーまたはダウンロードし、Azure Repos リポジトリにプッシュできます。
Important
この例では、Windows ベースの Batch ノードにWindowsソフトウェアをデプロイします。 Azure Pipelines、ARM テンプレート、Batch も Linux ソフトウェアとノードを完全にサポートしています。
ARM テンプレートについて
ユニットやモジュールに似た 3 つの機能テンプレートは、特定の機能を実装します。 その後、エンド ツー エンドのソリューション テンプレートによって、基になる機能テンプレートがデプロイされます。 この リンクされたテンプレート構造 により、各機能テンプレートをソリューション間で個別にテストおよび再利用できます。
テンプレートの詳細については、MicrosoftのResource Manager テンプレート リファレンス ガイドを参照してください。Batch リソースの種類。
ストレージ アカウント テンプレート
次のコードを storageAccount.jsonという名前のファイルとして保存します。 このテンプレートでは、アプリケーションを Batch アカウントにデプロイするために必要なAzure Storage アカウントを定義します。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"accountName": {
"type": "string",
"metadata": {
"description": "Name of the Azure Storage Account"
}
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[parameters('accountName')]",
"sku": {
"name": "Standard_LRS"
},
"apiVersion": "2018-02-01",
"location": "[resourceGroup().location]",
"properties": {}
}
],
"outputs": {
"blobEndpoint": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Storage/storageAccounts', parameters('accountName'))).primaryEndpoints.blob]"
},
"resourceId": {
"type": "string",
"value": "[resourceId('Microsoft.Storage/storageAccounts', parameters('accountName'))]"
}
}
}
バッチ アカウント テンプレート
次のコードを batchAccount.jsonという名前のファイルとして保存します。 このテンプレートでは 、Batch アカウントを定義します。 Batch アカウントは、ノード プール間でアプリケーションを実行するためのプラットフォームとして機能します。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"batchAccountName": {
"type": "string",
"metadata": {
"description": "Name of the Azure Batch Account"
}
},
"storageAccountId": {
"type": "string",
"metadata": {
"description": "ID of the Azure Storage Account"
}
}
},
"variables": {},
"resources": [
{
"name": "[parameters('batchAccountName')]",
"type": "Microsoft.Batch/batchAccounts",
"apiVersion": "2017-09-01",
"location": "[resourceGroup().location]",
"properties": {
"poolAllocationMode": "BatchService",
"autoStorage": {
"storageAccountId": "[parameters('storageAccountId')]"
}
}
}
],
"outputs": {}
}
バッチ プール テンプレート
次のコードを batchAccountPool.jsonという名前のファイルとして保存します。 このテンプレートは、Batch アカウントにノード プールとノードを作成します。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"batchAccountName": {
"type": "string",
"metadata": {
"description": "Name of the Azure Batch Account"
}
},
"batchAccountPoolName": {
"type": "string",
"metadata": {
"description": "Name of the Azure Batch Account Pool"
}
}
},
"variables": {},
"resources": [
{
"name": "[concat(parameters('batchAccountName'),'/', parameters('batchAccountPoolName'))]",
"type": "Microsoft.Batch/batchAccounts/pools",
"apiVersion": "2017-09-01",
"properties": {
"deploymentConfiguration": {
"virtualMachineConfiguration": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2022-datacenter",
"version": "latest"
},
"nodeAgentSkuId": "batch.node.windows amd64"
}
},
"vmSize": "Standard_D2s_v3"
}
}
],
"outputs": {}
}
オーケストレーター テンプレート
次のコードを deployment.jsonという名前のファイルとして保存します。 この最終的なテンプレートは、基になる 3 つの機能テンプレートをデプロイするためのオーケストレーターとして機能します。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"StorageContainerUri": {
"type": "string",
"metadata": {
"description": "URI of the Blob Storage Container containing the Azure Resource Manager templates"
}
},
"StorageContainerSasToken": {
"type": "string",
"metadata": {
"description": "The SAS token of the container containing the Azure Resource Manager templates"
}
},
"applicationStorageAccountName": {
"type": "string",
"metadata": {
"description": "Name of the Azure Storage Account"
}
},
"batchAccountName": {
"type": "string",
"metadata": {
"description": "Name of the Azure Batch Account"
}
},
"batchAccountPoolName": {
"type": "string",
"metadata": {
"description": "Name of the Azure Batch Account Pool"
}
}
},
"variables": {},
"resources": [
{
"apiVersion": "2017-05-10",
"name": "storageAccountDeployment",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[concat(parameters('StorageContainerUri'), 'arm-templates/storageAccount.json', parameters('StorageContainerSasToken'))]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"accountName": {"value": "[parameters('applicationStorageAccountName')]"}
}
}
},
{
"apiVersion": "2017-05-10",
"name": "batchAccountDeployment",
"type": "Microsoft.Resources/deployments",
"dependsOn": [
"storageAccountDeployment"
],
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[concat(parameters('StorageContainerUri'), 'arm-templates/batchAccount.json', parameters('StorageContainerSasToken'))]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"batchAccountName": {"value": "[parameters('batchAccountName')]"},
"storageAccountId": {"value": "[reference('storageAccountDeployment').outputs.resourceId.value]"}
}
}
},
{
"apiVersion": "2017-05-10",
"name": "poolDeployment",
"type": "Microsoft.Resources/deployments",
"dependsOn": [
"batchAccountDeployment"
],
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[concat(parameters('StorageContainerUri'), 'arm-templates/batchAccountPool.json', parameters('StorageContainerSasToken'))]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"batchAccountName": {"value": "[parameters('batchAccountName')]"},
"batchAccountPoolName": {"value": "[parameters('batchAccountPoolName')]"}
}
}
}
],
"outputs": {}
}
リポジトリを設定する
ARM テンプレート、FFmpeg アプリ、YAML ビルド定義ファイルをAzure Repos リポジトリにアップロードします。
リポジトリ内の arm-templates フォルダーに 4 つの ARM テンプレートをアップロードします。
アプリケーション パッケージの場合は、Windows 64 ビット バージョンの FFmpeg 4.3.1 をダウンロードして抽出し、リポジトリ内の hpc-application フォルダーにアップロードします。
ビルド定義の場合は、次の定義を hpc-app.build.yml という名前のファイルとして保存し、リポジトリ内の パイプライン フォルダーにアップロードします。
# To publish an application into Batch, you need to # first zip the file, and then publish an artifact, so # you can take the necessary steps in your release pipeline. steps: # First, zip up the files required in the Batch account. # For this instance, those are the ffmpeg files. - task: ArchiveFiles@2 displayName: 'Archive applications' inputs: rootFolderOrFile: hpc-application includeRootFolder: false archiveFile: '$(Build.ArtifactStagingDirectory)/package/$(Build.BuildId).zip' # Publish the zip file, so you can use it as part # of your Release pipeline later. - task: PublishPipelineArtifact@0 inputs: artifactName: 'hpc-application' targetPath: '$(Build.ArtifactStagingDirectory)/package'
リポジトリの設定が完了したら、フォルダー構造に次のメイン セクションが必要です。
- ARM テンプレートを含む arm-templates フォルダー。
- ffmpeg を含む hpc-application フォルダー。
- ビルド パイプラインの YAML ビルド定義ファイルを含むパイプライン フォルダー。
Note
このコードベース構造の例では、アプリケーション、インフラストラクチャ、およびパイプライン コードを同じリポジトリに格納できることを示します。
Azure パイプラインを作成する
ソース コード リポジトリを設定したら、Azure Pipelinesを使用して、アプリケーションのビルド、テスト、およびデプロイ パイプラインを実装します。 パイプラインのこのステージでは、通常、テストを実行してコードを検証し、ソフトウェアの一部をビルドします。 テストの数と種類、および実行するその他のタスクは、全体的なビルドとリリースの戦略によって異なります。
ビルド パイプラインを作成する
このセクションでは、Batch アカウントで実行される ffmpeg ソフトウェアを操作する YAML ビルド パイプライン を作成します。
Azure DevOps プロジェクトで、左側のナビゲーションから [パイプライン] を選択し、[新しいパイプライン] を選択します。
コードの場所はどこですか画面で、Azure Repos Gitを選択します。
[ リポジトリの選択 ] 画面で、リポジトリを選択します。
Note
ビジュアル デザイナーを使用してビルド パイプラインを作成することもできます。 [ 新しいパイプライン ] ページで、[ クラシック エディターの使用] を選択します。 ビジュアル デザイナーで YAML テンプレートを使用できます。 詳細については、「 クラシック パイプラインの定義」を参照してください。
[パイプラインの構成] 画面で、[既存のAzure Pipelines YAML ファイル] を選択します。
[ 既存の YAML ファイルの選択 ] 画面で、リポジトリから hpc-app.build.yml ファイルを選択し、[ 続行] を選択します。
[ パイプライン YAML の確認 ] 画面で、ビルド構成を確認し、[ 実行] を選択するか、[ 実行 ] の横にあるドロップダウン キャレットを選択し、[ 保存] を選択します。 このテンプレートにより継続的インテグレーションが有効になるため、リポジトリへの新しいコミットがビルドで設定された条件を満たすと、ビルドが自動的にトリガーされます。
ライブ ビルドの進行状況の更新を表示できます。 ビルドの結果を表示するには、Azure Pipelinesのビルド定義から適切な実行を選択します。
Note
クライアント アプリケーションを使用して HPC ソリューションを実行する場合は、そのアプリケーション用に別のビルド定義を作成する必要があります。 ハウツー ガイドについては、Azure Pipelinesドキュメントを参照してください。
リリース パイプラインを作成する
Azure Pipelines リリース パイプラインを使用して、アプリケーションと基になるインフラストラクチャをデプロイします。 リリース パイプラインによって CD が有効になり、リリース プロセスが自動化されます。 アプリケーションと基になるインフラストラクチャをデプロイするには、いくつかの手順があります。
このソリューション のリンクされたテンプレートには、 パブリック HTTP または HTTPS エンドポイントからアクセスできる必要があります。 このエンドポイントには、GitHub リポジトリ、Azure Blob Storage アカウント、または別のストレージの場所を指定できます。 アップロードされたテンプレート成果物を確実にセキュリティで保護するには、プライベート モードで保持しますが、何らかの形式の Shared Access Signature (SAS) トークンを使用してアクセスします。
次の例では、Azure Storage BLOB のテンプレートを使用してインフラストラクチャとアプリケーションをデプロイする方法を示します。
パイプラインを設定する
Azure DevOps プロジェクトで、左側のナビゲーションで [Pipelines>Releases] を選択します。
次の画面で、[ 新規>新しいリリース パイプライン] を選択します。
[ テンプレートの選択 ] 画面で、[ 空のジョブ] を選択し、[ ステージ ] 画面を閉じます。
ページの上部にある [新しいリリース パイプライン] を選択し、パイプラインの名前をパイプラインに関連する名前 ([Deploy Azure Batch + Pool] など) に変更します。
[成果物] セクション で 、[ 追加] を選択します。
[ 成果物の追加 ] 画面で、[ ビルド ] を選択し、ビルド パイプラインを選択して HPC アプリケーションの出力を取得します。
Note
ソース エイリアスを作成することも、既定値をそのまま使用することもできます。 リリース定義でタスクを作成するために必要なソース エイリアス の値を書き留めます。
[] を選択し、[] を追加します。
パイプライン ページで、[成果物] の横にある [追加] を選択して、別の成果物 (Azure Repos リポジトリ) へのリンクを作成します。 リポジトリ内の ARM テンプレートにアクセスするには、このリンクが必要です。 ARM テンプレートはコンパイルを必要としないため、ビルド パイプラインを介してプッシュする必要はありません。
Note
ここでも、後で使用する ソース エイリアス の値に注意してください。
[ 変数 ] タブを選択します。複数のタスクに同じ情報を再入力する必要がないように、パイプラインに次の変数を作成します。
Name 価値 applicationStorageAccountName HPC アプリケーション バイナリを保持するストレージ アカウントの名前。 batchAccountApplicationName Batch アカウント内のアプリケーションの名前。 batchAccountName Batch アカウントの名前。 batchAccountPoolName 処理を実行する仮想マシン (VM) のプールの名前。 batchApplicationId 次の形式の Batch アプリケーションの一意の ID: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>^/providers/Microsoft.Batch/batchAccounts/<batchAccountName>^
/applications/<batchAccountApplicationName>。
<subscriptionId>プレースホルダーをAzureサブスクリプション ID に置き換え、他のプレースホルダーは、この一覧の他の変数に設定した値に置き換えます。batchApplicationVersion Batch アプリケーションのセマンティック バージョン (この場合 は 4.3.1)。 場所 デプロイするリソースの Azure リージョン。 resourceGroupName リソースをデプロイするリソース グループの名前。 ストレージアカウント名 リンクされた ARM テンプレートを保持するストレージ アカウントの名前。 StorageContainerSasToken $(<referenceName>.StorageContainerSasToken)。<referenceNameプレースホルダーを、次の Azure ファイル コピー 手順の出力変数セクションで構成した参照名の値に置き換えます。StorageContainerUri $(<referenceName>.StorageContainerUri)。<referenceName>プレースホルダーを、Azure ファイルコピーステップの出力変数セクションで構成した参照名の値に置き換えます。
[ タスク ] タブを選択し、[ エージェント ジョブ] を選択します。
[エージェント ジョブ] 画面の [エージェント プール] で、Azure Pipelinesを選択します。
[ エージェントの仕様] で、[ windows-latest] を選択します。
タスクの追加
次の 6 つのタスクを作成します。
- zip 圧縮された ffmpeg ファイルをダウンロードします。
- 入れ子になった ARM テンプレートをホストするストレージ アカウントをデプロイします。
- ARM テンプレートをストレージ アカウントにコピーします。
- Batch アカウントと必要な依存関係をデプロイします。
- Batch アカウントでアプリケーションを作成します。
- アプリケーション パッケージを Batch アカウントにアップロードします。
次の手順で指定する新しいタスクごとに、
左側のウィンドウで、[+] の横にある記号を選択します。
右側のウィンドウで、指定したタスクを検索して選択します。
タスクを構成するプロパティを追加または選択します。
[] を選択し、[] を追加します。
次のようにタスクを作成します。
パイプライン 成果物のダウンロード タスクを 選択し、次のプロパティを設定します。
- 表示名: 「エージェントへの ApplicationPackage のダウンロード」と入力します。
- アーティファクト名: hpc-application と入力します。
-
宛先ディレクトリ: 「
$(System.DefaultWorkingDirectory)」と入力します。
ARM テンプレートを格納するAzure Storage アカウントを作成します。 既存のストレージ アカウントを使用することもできますが、この自己完結型の例とコンテンツの分離をサポートするには、専用のストレージ アカウントを作成します。
ARM テンプレートのデプロイ: リソース グループ スコープ タスクを選択し、次のプロパティを設定します。
- 表示名:ARM テンプレートのストレージ アカウントのデプロイを入力します。
- Azure Resource Manager接続: 適切なAzure サブスクリプションを選択します。
- サブスクリプション:適切なAzure サブスクリプションを選択します。
- アクション: [ リソース グループの作成または更新] を選択します。
-
リソース グループ:
$(resourceGroupName)を入力します。 -
場所: 「
$(location)」と入力します。 -
テンプレート:
$(System.ArtifactsDirectory)/<AzureRepoArtifactSourceAlias>/arm-templates/storageAccount.jsonを入力します。<AzureRepoArtifactSourceAlias>プレースホルダーを、前に説明したリポジトリソースエイリアスに置き換えます。 -
テンプレート パラメーターをオーバーライドする:
-accountName $(storageAccountName)を入力します。
ソース管理からストレージ アカウントに成果物をアップロードします。 この Azure ファイル コピー タスクの一部では、ストレージ アカウント コンテナー URI と SAS トークンが変数に出力されるため、後の手順で再利用できます。
Azure ファイル コピー タスクを選択し、次のプロパティを設定します。
- 表示名:「AzureBlob File Copy」と入力します。
-
ソース: 「
$(System.ArtifactsDirectory)/<AzureRepoArtifactSourceAlias>/arm-templates/」と入力します。<AzureRepoArtifactSourceAlias>プレースホルダーを、前に説明したリポジトリソースエイリアスに置き換えます。 - Azure サブスクリプション: 適切なAzure サブスクリプションを選択します。
- [宛先の種類]: [Azure BLOB を選択します。
-
RM ストレージ アカウント:
$(storageAccountName)を入力します。 - コンテナー名: テンプレートを入力します。
- 参照名: [出力変数] を展開し、「 ffmpeg」と入力します。
Note
この手順が失敗した場合は、Azure DevOps組織がストレージ アカウントにストレージ BLOB 共同作成者ロールを持っていることを確認します。
オーケストレーター ARM テンプレートをデプロイして、Batch アカウントとプールを作成します。 このテンプレートには、ストレージ アカウント コンテナー URI と SAS トークンのパラメーターが含まれています。 ARM テンプレートで必要な変数は、リリース定義の variables セクションに保持され、AzureBlob ファイル コピー タスクから設定されました。
ARM テンプレートのデプロイ: リソース グループ スコープ タスクを選択し、次のプロパティを設定します。
- 表示名:「Deploy Azure Batch」と入力します。
- Azure Resource Manager接続: 適切なAzure サブスクリプションを選択します。
- サブスクリプション:適切なAzure サブスクリプションを選択します。
- アクション: [ リソース グループの作成または更新] を選択します。
-
リソース グループ:
$(resourceGroupName)を入力します。 -
場所: 「
$(location)」と入力します。 - テンプレートの場所: ファイルの URL を選択します。
-
テンプレート リンク: 「
$(StorageContainerUri)arm-templates/deployment.json$(StorageContainerSasToken)」と入力します。 -
テンプレート パラメーターをオーバーライドする:
-StorageContainerUri $(StorageContainerUri) -StorageContainerSasToken $(StorageContainerSasToken) -applicationStorageAccountName $(applicationStorageAccountName) -batchAccountName $(batchAccountName) -batchAccountPoolName $(batchAccountPoolName)を入力します。
一般的な方法は、Azure Key Vaultタスクを使用することです。 Azure サブスクリプションに接続されているサービス プリンシパルに適切なアクセス ポリシー が設定されている場合は、Key Vaultからシークレットをダウンロードし、パイプラインの変数として使用できます。 シークレットの名前は、関連付けられた値で設定されます。 たとえば、リリース定義で $(sshPassword) を使用して sshPassword のシークレットを参照できます。
Azure CLIを呼び出して、Azure Batchでアプリケーションを作成します。
Azure CLI タスクを選択し、次のプロパティを設定します。
- 表示名:Azure Batch アカウントでアプリケーションを作成 と入力します。
- Azure Resource Manager接続: 適切なAzure サブスクリプションを選択します。
- スクリプトの種類: PowerShell Core を選択します。
- スクリプトの場所: インライン スクリプトを選択します。
-
インライン スクリプト:
az batch application create --application-name $(batchAccountApplicationName) --name $(batchAccountName) --resource-group $(resourceGroupName)を入力します。
Azure CLIを呼び出して、関連付けられているパッケージをアプリケーション (この場合は ffmpeg ファイル) にアップロードします。
Azure CLI タスクを選択し、次のプロパティを設定します。
- 表示名:「パッケージをAzure Batchアカウントにアップロードする」と入力します。
- Azure Resource Manager接続: 適切なAzure サブスクリプションを選択します。
- スクリプトの種類: PowerShell Core を選択します。
- スクリプトの場所: インライン スクリプトを選択します。
-
インライン スクリプト:
az batch application package create --application-name $(batchAccountApplicationName) --name $(batchAccountName) --resource-group $(resourceGroupName) --version $(batchApplicationVersion) --package-file=$(System.DefaultWorkingDirectory)/$(Release.Artifacts.<AzureBuildArtifactSourceAlias>.BuildId).zipを入力します。<AzureBuildArtifactSourceAlias>プレースホルダーを、前に説明したビルド ソースエイリアスに置き換えます。
Note
アプリケーション パッケージのバージョン番号は変数に設定されます。 この変数を使用すると、以前のバージョンのパッケージを上書きでき、Azure Batchにプッシュされるパッケージのバージョンを手動で制御できます。
リリースを作成して実行する
すべての手順の作成が完了したら、パイプライン ページの上部にある [保存] を選択し、[ OK] を選択します。
ページの上部にある [ リリースの作成 ] を選択します。
ライブ リリースの状態を表示するには、ページの上部にあるリリースが作成されたことを示すリンクを選択します。
エージェントからのログ出力を表示するには、ステージにカーソルを合わせ、[ ログ ] ボタンを選択します。
環境をテストする
環境が設定されたら、次のテストが正常に実行されることを確認します。 プレースホルダーをリソース グループと Batch アカウントの値に置き換えます。
Batch アカウントに接続する
コマンド プロンプトからAzure CLIを使用して、新しい Batch アカウントに接続します。
-
az loginを使用してAzure アカウントにサインインし、指示に従って認証します。 -
az batch account login -g <resourceGroup> -n <batchAccount>を使用して Batch アカウントを認証します。
使用可能なアプリケーションを一覧表示する
az batch application list -g <resourceGroup> -n <batchAccount>
プールが有効であることを確認する
az batch pool list
コマンド出力で、次のテストで調整する currentDedicatedNodes の値をメモします。
プールのサイズを変更する
次のコマンドを実行してプールのサイズを変更し、ジョブとタスクのテストに使用できるコンピューティング ノードが存在するようにします。
<poolName>プレースホルダーをプール名の値に置き換え、<targetNumber>プレースホルダーを前のコマンド出力のcurrentDedicatedNodesより大きい数値に置き換えます。 サイズ変更が完了し、ターゲットノード数が表示されるまで、 az batch pool list コマンドを実行して状態を確認します。
az batch pool resize --pool-id <poolname> --target-dedicated-nodes <target number>
次のステップ
単純なアプリケーションを使用して Batch アカウントを操作する方法については、次のチュートリアルを参照してください。