Ansible を使用して Azure で Linux 仮想マシンを作成する
この記事では、Linux 仮想マシンを構成するための Ansible プレイブックのサンプルを示します。
この記事では、次のことについて説明します。
- リソース グループを作成する
- 仮想ネットワークの作成
- パブリック IP アドレスの作成
- ネットワーク セキュリティ グループを作成します
- 仮想ネットワーク インターフェイス カードの作成
- 仮想マシンの作成
1. 環境を構成する
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Ansible のインストール: 次のいずれかのオプションを実行します。
- Linux 仮想マシンに Ansible をインストールして構成する
- Azure Cloud Shell を構成する
2. SSH キーの組を作成する
次のコマンドを実行します。 ダイアログが表示されたら、次のディレクトリに作成するファイルを指定します:
/home/azureuser/.ssh/authorized_keys
。ssh-keygen -m PEM -t rsa -b 4096
公開キー ファイルの内容をコピーします。 既定では、公開キー ファイルの名前は
id_rsa.pub
です。 値は、"ssh-rsa" で始まる長い文字列です。 この値は次の手順で必要になります。
3. Ansible プレイブックを実装する
サンプルの Ansible コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。
main.yml
という名前のファイルを作成し、次のコードを挿入します。 プレースホルダー<key_data>
を前の手順の公開キーの値に置き換えます。- name: Create Azure VM hosts: localhost connection: local tasks: - name: Create resource group azure_rm_resourcegroup: name: myResourceGroup location: eastus - name: Create virtual network azure_rm_virtualnetwork: resource_group: myResourceGroup name: myVnet address_prefixes: "10.0.0.0/16" - name: Add subnet azure_rm_subnet: resource_group: myResourceGroup name: mySubnet address_prefix: "10.0.1.0/24" virtual_network: myVnet - name: Create public IP address azure_rm_publicipaddress: resource_group: myResourceGroup allocation_method: Static name: myPublicIP register: output_ip_address - name: Public IP of VM debug: msg: "The public IP is {{ output_ip_address.state.ip_address }}." - name: Create Network Security Group that allows SSH azure_rm_securitygroup: resource_group: myResourceGroup name: myNetworkSecurityGroup rules: - name: SSH protocol: Tcp destination_port_range: 22 access: Allow priority: 1001 direction: Inbound - name: Create virtual network interface card azure_rm_networkinterface: resource_group: myResourceGroup name: myNIC virtual_network: myVnet subnet: mySubnet public_ip_name: myPublicIP security_group: myNetworkSecurityGroup - name: Create VM azure_rm_virtualmachine: resource_group: myResourceGroup name: myVM vm_size: Standard_DS1_v2 admin_username: azureuser ssh_password_enabled: false ssh_public_keys: - path: /home/azureuser/.ssh/authorized_keys key_data: "<key_data>" network_interfaces: myNIC image: offer: 0001-com-ubuntu-server-jammy publisher: Canonical sku: 22_04-lts version: latest
4. プレイブックを実行する
ansible-playbook を実行して Ansible プレイブックを実行します。
ansible-playbook main.yml
5. 結果を確認する
az vm list を実行して、VM が作成されたことを確認します。
az vm list -d -o table --query "[?name=='myVM']"
6. VM に接続する
SSH コマンドを実行して、新しい Linux VM に接続します。 <ip-address> プレースホルダーは、前の手順で確認した IP アドレスに置き換えてください。
ssh azureuser@<ip_address> -i /home/azureuser/.ssh/authorized_keys/id_rsa
リソースをクリーンアップする
delete_rg.yml
として次のコードを保存します。--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
ansible-playbook コマンドを使用してプレイブックを実行します。 プレースホルダーは、削除するリソース グループの名前に置き換えます。 リソース グループ内のすべてのリソースが削除されます。
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
重要なポイント:
- プレイブックの
register
変数とdebug
セクションにより、コマンドの完了時に結果が表示されます。
- プレイブックの