Azure開発者が知るべきトップ5の事柄


それで、あなたはAzure devとオールラウンドのインフラストラクチャウィザードになりたいですか?の基礎、仮想マシンから始めましょう!にprevious article , 仮想マシンの共用ユースケースは専用ハードウェアからアプリケーションを移行することです.アプリケーションの必要なソフトウェアをインストールしたり、ストレージやネットワークを構成するマシンの完全な制御が必要です.
Azureは、様々な方法を作成し、仮想マシンをthe Azure CLIAzure Portal . この記事では、まず要件とプロセスを理解するためにポータルを使用して仮想マシンを作成しますその後、コードを使用してそれを行いますPulumi’s Azure Native provider , AzureリソースマネージャーAPIから直接ビルドされます.

Azureポータルを使用したVMの作成


仮想マシンを作成するときは、CPUに対するメモリ比に関してオペレーティングシステム、ストレージ要件、VMサイズを考慮する必要があります.アジュールオファーmany sizes for virtual machines ワークロードによって異なります.従来のn層アプリケーションをクラウドに移行しているなら、現在の設定にマッチする仮想マシンから始めるのがベストです.
この記事では、単純な例を使用して、静的Webアプリケーションを仮想マシンに配備して、そのプロセスを説明します.始めるには、Azure Portal .
ステップ1
Azure Services , 絹篩で篩うたようVirtual machines
絹篩で篩うたようCreate > Virtual Machine
ステップ2 :リソースグループを作成する
リソースグループは、仮想マシン、ストレージ、仮想ネットワーク、Webアプリケーション、およびデータベースの論理的なコレクションです.ユーザーは、アプリケーションの関連リソースを一般的にグループ化します.私たちを作成しますmyResourceGroup 我々のアプリケーションのため.

ステップ3 : VMの設定
次に、私たちは、それに名前を与えることによってVMの詳細を提供します.myVM , 設定Region and Availability options to No infrastructure redundancy required . Ubuntuイメージを使用し、VMサイズを設定しますStandard_DS1_v2 .

ステップ4 :管理者アカウントの設定
仮想マシンはサービスとしてインフラストラクチャであり、プロビジョニング、更新、メンテナンスを行う必要があることを意味します.これらのタスクを実行する管理者アカウントが必要になります.この例を簡単にするには、パスワードを認証タイプとして使用しますが、実際にはPublic Key Infrastructure (PKI) それは、強制的に強制されることができるパスワードより安全であるので.

ステップ5 :インバウンドポートの設定
あなたの仮想マシンにだけでなく、静的なウェブサイトへのインバウンド要求を許可するログに記録する必要があります.選択HTTP (80) and SSH (22) 次にReview + create . ディスクをクリックしてストレージを追加することもできますが、この例ではデフォルトを使用します.

設定が有効な場合は、次の画面が表示されます.クリックCreate VMをインスタンス化するには

ステップ6:あなたの成功をお楽しみください
あなたが行くことができますし、あなたのVMをチェックアウトGo to resource .

さて、それは簡単で簡単ですが、Webサーバーを含むアプリケーションのためにいくつかの仮想マシンを展開しなければならない場合は、作業者の要求を処理するには、メッセージのキューシステム、データベース?あなたの現在のシステムが負荷バランサの後で複数のウェブサーバとバックエンド労働者を持つならば、どうですか?これがIAASであるので、あなたは各々のVMをつくって、配備して、維持しなければなりません.
仮想マシンをつくって、提供して、維持するために自動化されたプロセスをつくるためにコードと雲工学方法論として基盤を使うより良い方法があります.

クラウドエンジニアリング


つのVMを作成して、提供することは難しくありません、しかし、伝統的なn -層アプリケーションを移行することはしばしば水平スケーリングに必要なそれらを含む複数の仮想マシンを必要とします.これは、コードとしてのインフラストラクチャが優れているところです.使用によってcloud engineering , 我々は自動化することができますbuild , deploy , and manage 任意のインフラストラクチャまたはアプリケーションのプロセス.
仮想マシンを使ってWebサーバを展開する例を見てみましょう.完全な例はどちらかで入手可能ですPython or Typescript . Pythonコードを調べます.
私たちはAulureネイティブプロバイダーを使用しています.そして、それはPulumiでAzureプラットホームのために最も可能な支持を実行します.それは開発者と演算子にAzureのAPI表面全体を公開します.ネイティブプロバイダーは、彼らがAzureによって解放されるように、より多くの追加された1000以上のリソースタイプをサポートしています.
スクリプトはPulumi AzureネイティブSDKモジュールをインポートし、プロビジョニング用のサーバーにログオンするために必要なユーザー名とパスワードなどの設定パラメータを取得します.また、リソースグループを作成します.
import base64
from pulumi import Config, Output, export
import pulumi_azure_native.compute as compute
import pulumi_azure_native.network as network
import pulumi_azure_native.resources as resources

config = Config()
username = config.require("username")
password = config.require("password")

resource_group = resources.ResourceGroup("server")
次の部分は、サーバーのための動的に割り当てられたパブリックIPアドレスを含むネットワークリソースを作成します.
net = network.VirtualNetwork(
    "server-network",
    resource_group_name=resource_group.name,
    address_space=network.AddressSpaceArgs(
        address_prefixes=["10.0.0.0/16"],
    ),
    subnets=[network.SubnetArgs(
        name="default",
        address_prefix="10.0.1.0/24",
    )])

public_ip = network.PublicIPAddress(
    "server-ip",
    resource_group_name=resource_group.name,
    public_ip_allocation_method=network.IPAllocationMethod.DYNAMIC)

network_iface = network.NetworkInterface(
    "server-nic",
    resource_group_name=resource_group.name,
    ip_configurations=[network.NetworkInterfaceIPConfigurationArgs(
        name="webserveripcfg",
        subnet=network.SubnetArgs(id=net.subnets[0].id),
        private_ip_allocation_method=network.IPAllocationMethod.DYNAMIC,
        public_ip_address=network.PublicIPAddressArgs(id=public_ip.id),
    )])
そして、ここでは、PythonのsimpleHTTPServer .
init_script = """#!/bin/bash
echo "Hello, World!" > index.html
nohup python -m SimpleHTTPServer 80 &"""
最後に、仮想マシンの作成方法を示します.VMをリソースグループに追加し、network_profile to network_iface 我々が以前定義したそれ.私たちはvm_size , 設定するos_profile ホスト名とユーザ名とパスワードを指定します.この例では、storage profile とUbuntuのイメージプロファイルを使用します.スクリプトは、WebサーバのパブリックIPアドレスをエクスポートすることによって終了します.
vm = compute.VirtualMachine(
    "server-vm",
    resource_group_name=resource_group.name,
    network_profile=compute.NetworkProfileArgs(
        network_interfaces=[
            compute.NetworkInterfaceReferenceArgs(id=network_iface.id),
        ],
    ),
    hardware_profile=compute.HardwareProfileArgs(
        vm_size=compute.VirtualMachineSizeTypes.STANDARD_A0,
    ),
    os_profile=compute.OSProfileArgs(
        computer_name="hostname",
        admin_username=username,
        admin_password=password,
        custom_data=base64.b64encode(init_script.encode("ascii")).decode("ascii"),
        linux_configuration=compute.LinuxConfigurationArgs(
            disable_password_authentication=False,
        ),
    ),
    storage_profile=compute.StorageProfileArgs(
        os_disk=compute.OSDiskArgs(
            create_option=compute.DiskCreateOptionTypes.FROM_IMAGE,
            name="myosdisk1",
        ),
        image_reference=compute.ImageReferenceArgs(
            publisher="canonical",
            offer="UbuntuServer",
            sku="16.04-LTS",
            version="latest",
        ),
    ))

combined_output = Output.all(vm.id, public_ip.name, resource_group.name)
public_ip_addr = combined_output.apply(
    lambda lst: network.get_public_ip_address(
        public_ip_address_name=lst[1],
        resource_group_name=lst[2]))
export("public_ip", public_ip_addr.ip_address)
それの表面では、これはAzureポータルを使用するより複雑です.覚えておくべきことは、このプロセスが再現性があるため、追加の仮想マシンを必要とする場合は、必要な数のVMSを作成するためにループを追加することができます.
しかし、プロビジョニングについてはどうですか?これはコードですので、provisioning script Pulumiの使用dynamic provider これは、Webサーバーに接続し、ファイルをコピーし、コマンドを実行します.ファイルをあなたのVMにコピーするダイナミックなプロバイダーのコード断片は、ここにありますscp .
# CopyFileProvider implements the resource lifecycle for the CopyFile resource type below.
class CopyFileProvider(ProvisionerProvider):
    def on_create(self, inputs: Any) -> Any:
        ssh = connect(inputs['conn'])
        scp = ssh.open_sftp()
        try:
            scp.put(inputs['src'], inputs['dest'])
        finally:
            scp.close()
            ssh.close()
        return inputs

# CopyFile is a provisioner step that can copy a file over an SSH connection.
class CopyFile(dynamic.Resource):
    def __init__(self, name: str, conn: pulumi.Input[ConnectionArgs],
                 src: str, dest: str, opts: Optional[pulumi.ResourceOptions] = None):
        self.conn = conn
        """conn contains information on how to connect to the destination, in addition to dependency information."""
        self.src = src
        """
        src is the source of the file or directory to copy. It can be specified as relative to the current
        working directory or as an absolute path. This cannot be specified if content is set.
        """
        self.dest = dest
        """dest is required and specifies the absolute path on the target where the file will be copied to."""

        super().__init__(
            CopyFileProvider(),
            name,
            {
                'dep': conn,
                'conn': conn,
                'src': src,
                'dest': dest,
                'fileHash': sha256sum(src),
            },
            opts,
        )

概要


AzureポータルまたはAzure CLIを使用して仮想マシンを作成するのは比較的簡単ですが、プロビジョニングと手動で維持することは複雑でエラーがちです.VMSとアプリケーションを構築、配備、管理するためにコードを使用する場合、プロセスの更新とメンテナンスの繰り返し処理を自動化し、エラーを減らすことができます.既存のVMSを破棄し、インフラストラクチャをコードとして更新してプロビジョニングされたバージョンで置き換えることができます.あなたがあなたの紺碧の雲の旅を始めているならば、これは多くの情報ですMinecraft on Azure !