導入
あまり手で触ることのないVOICEVOXを、ローカルPC上で立ちあげっぱなしにしておくのも微妙かな......。
ということで、クラウドに逃がしてしまおう、という試み。
なにぶんインフラ周りの実装をしたことがない身なので、terraformの導入からよちよち進めていく。
環境
Windows 11 Home
バージョン:24H2
Terraform v1.13.3 on windows_amd64
aws-cli/2.31.8 Python/3.13.7 Windows/11 exe/AMD64
手順
- terraformの導入
- aws cliの導入
- AWS IAMユーザーの作成・アクセスキーの取得
- main.tfの実装
- terraform applyと疎通確認
本編
terraformの導入
Windowsには"Chocolatey"というパッケージ管理システムがあるようで、今回はそちらを使ってterraformを導入する。
Macでいうところのhomebrewのようなものらしい。
メロスはWindowsがわからぬ。
> choco install terraform -y
実行が終わったら、疎通を確認......
> terraform -v
Terraform v1.13.3
on windows_amd64
大丈夫そう。
ちなみに、terraformコマンドのパスを通しておく必要がある。
システム環境変数のPathの値に、こちらを追加しておく。
C:\ProgramData\chocolatey\bin
aws cliの導入
同じ流れで、aws cliも導入していく。
> choco install awscli -y
完了後にこちらで疎通確認。
> aws --version
aws-cli/2.31.8 Python/3.13.7 Windows/11 exe/AMD64
ちなみにこちらもパスを通しておくこと。
C:\Program Files\Amazon\AWSCLIV2\
AWS IAMユーザーの作成・アクセスキーの取得
※ AWSアカウントはある前提とします
UIに従って、ユーザー名やユーザーアクセスに関するオプションを設定する。
今回はカスタムパスワードをここで設定しつつ、新しいパスワードの設定はOFFにした。

次の画面では許可のオプションを設定。
今回はお遊びなのでポリシーを直接アタッチ -> AdministoratorAccessを選択したが、適宜必要なものだけを指定したポリシーをアタッチすること。
この画面は少しわかりにくいが、下にスクロールすると「次へ」ボタンがあるので、押下して次の画面へ。

次の画面で入力内容の最終確認ができるので、問題なければ「ユーザーの作成」を押下して作成。
作成できたユーザーの画面から「セキュリティ認証情報」というタブを見ると、「アクセスキー」という欄がある。
こちらも今後必要になるので、「アクセスキーを作成」ボタンから作成に移る。

自分はもう作ってあるので「アクセスキー(1)」になっています
今回はCLIが使いたいので、ユースケースは「コマンドラインインターフェイス」を選んでおく。
下に推奨された代替案が表示されるが、今回はチェックボックスにチェックをいれて無視。

AWS IAMユーザーは非推奨になっているので、ちゃんと作る場合はIAM Identity Centerを使った方がよさそうです。
今回は一旦ね、一旦......(後日ちゃんとしたバージョンもやります)
次の画面で説明タグを設定すれば、はれてアクセスキーを作成できる。
「アクセスキーを作成」を押したタイミングで、「IAMユーザー名_accessKeys.csv」という名前でcsvファイルがダウンロードされる。
中身はAccess key ID,Secret access keyの組み合わせになっているので、ご確認のこと。

ここまでできたらコンソールに戻って、awsコマンドの設定を進める。
> aws configure
以下の順に入力を求められるので、適宜入力していく。
AWS Access Key ID : AWS IAMで発行したアクセスキー
AWS Secret Access Key: 同上(シークレットキー)
Default region name : ap-northeast-1
Default output format: json
これらの設定は下記のファイルに登録されて、terraformはこれを参照して動作する。
C:\Users\<ユーザー名>\.aws\credentials
C:\Users\<ユーザー名>\.aws\config
ここまでの疎通確認として、下記を実行。
こんな感じの結果が得られればOK。
> aws sts get-caller-identity
{
"UserId": "ユーザーID",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/your-iam-user"
}
main.tfの実装
結果から書くと、今回は概ねこんな実装になった。
terraform {
required_version = ">= 1.0.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
# AWSのプロバイダ設定
provider "aws" {
region = "ap-northeast-1"
}
# セキュリティグループを作成
resource "aws_security_group" "voicevox_sg" {
name = "voicevox_sg"
description = "Allow SSH and VOICEVOX API inbound traffic"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "VOICEVOX API"
from_port = 50021
to_port = 50021
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
# EC2インスタンスを作成
resource "aws_instance" "voicevox_instance" {
ami = "ami-0d4aa492f133a3068"
instance_type = "t3.micro"
vpc_security_group_ids = [aws_security_group.voicevox_sg.id]
user_data = <<-EOF
#!/bin/bash
dnf update -y
dnf install -y docker
systemctl enable docker
systemctl start docker
docker run -d -p 50021:50021 voicevox/voicevox_engine:cpu-latest
EOF
tags = {
Name = "terraform-voicevox-instance"
}
}
output "ec2_public_ip" {
value = aws_instance.voicevox_instance.public_ip
}
至らない部分もあると思いますが、適宜いじって使ってください
EC2インスタンス上でVOICEVOXを動かす上で、最低限必要な
- セキュリティグループの作成
- EC2インスタンスの作成
- VOICEVOXエンジンのインストール
の3点を実装した。
インスタンスの起動と同時に、VOICEVOXのdockerイメージを利用してVOICEVOXが立ち上がる。
ポートは50021番で動くらしい。
※ インスタンスは自分に合ったものを選んでください。今回は無料枠のt3.micro。
terraform applyと疎通確認
> terraform apply
(中略)
Terraform will perform the following actions:
(中略)
Plan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
2件が作られ、0件が更新され、0件がなくなりますよ、というplan結果が出ていればOK。
yesを入力して少し待つと、リソースが作成される。
Enter a value: yes
aws_security_group.セキュリティグループ名: Creating...
aws_security_group.セキュリティグループ名: Creation complete after 4s
aws_instance.インスタンス名: Creating...
aws_instance.インスタンス名: Still creating... [00m10s elapsed]
aws_instance.インスタンス名: Creation complete after 13s
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
これで、EC2インスタンスが起動していることをコンソール上から確認できるはず。
最後に、作成されたEC2インスタンスのオープンIPを使って、ブラウザから下記にアクセスする。
http://IPアドレス:50021/docs
こんな画面が開ければ、疎通成功。

まとめ
つたない部分はありつつ、VOICEVOXのクラウド化という目的は達成できた。
裏で試したところ、audio_queryやsynthesisを使って、任意の文字列を音声出力させることもできた。
もしローカルPCでVOICEVOX動かしたくないな~という方がいれば、ぜひ。
遊びがてら勉強にもなって、ちょうどいいかも。
p.s.
立ちあげたEC2インスタンスはdestroyでお片付けしよう!
> terraform destroy
お財布にやさしくなれるぞ!
参考文献
実際のところはほとんどAIと対話して進めた。Cursorすごい。
