モチベーション
趣味で開発しているプロダクトのためにVPSを立てていて、Ansibleで各種ミドルウェアの設定をしているんだけど、VirtualBoxのApple Silicon への対応が微妙なのでmultipassを使ってVMを立てる+Ansible Playbookを流してセットアップするということをやってみたのでそのメモ。
multipassでVMを立ち上げる
まず初めにssh用の秘密鍵と公開鍵を生成する。multipassでVMを立ち上げるときはデフォルトでSSH用の鍵を生成してくれるけど、Ansibleでsshするときの鍵を作っておく。
ssh-keygen -t rsa -b 4096 -C multipass -f multipass
次に、以下のようなcloud-init.ymlを作成する。
users: - default - name: multipass sudo: ALL=(ALL) NOPASSWD:ALL ssh_authorized_keys: - "ssh-rsa <上で生成した公開鍵>"
multipass launchでVMを立ち上げる時に、--cloud-init
オプションで先ほどのcloud-init.ymlを指定する。これを行うことでmultipassユーザーの authorized_keys に上で作成したSSHの公開鍵がセットされる。
multipass launch -n vps -c=1 -m=1G -d=5G --cloud-init=cloud-init.yml
次にVMのIPアドレスを確認する。
multipass info vps Name: vps State: Running IPv4: 192.168.64.13 Release: Ubuntu 22.04.2 LTS Image hash: f6b5b3a980f2 (Ubuntu 22.04 LTS) CPU(s): 1 Load: 0.20 0.11 0.04 Disk usage: 1.4GiB out of 4.7GiB Memory usage: 151.3MiB out of 962.5MiB Mounts: --
Ansibleのinventoryファイルを以下のようにする。
[local] default ansible_host=<上で調べたIP> ansible_port=22 ansible_user='multipass' ansible_ssh_private_key_file='multipass'
最後にansible-playbookを実行する。
ANSIBLE_SSH_ARGS='-o IdentitiesOnly=yes -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook --inventory-file=ansible/inventory/multipass --timeout=30 -v -D ./ansible/hoge.yml
multipassのコマンドメモ
- multipass transfer : VMからファイルをコピーする or ホストからVMにファイルをコピーする
multipass shell
: VM内にシェルでログインする