packerを触りたての時に発生したエラーを共有します。
インスタンスにt2.micro選んだらVPCなんちゃらって言われた
まずpackerを動かしてみたいから、VPC設定はなしにして
安いt2.microで実行してみよう!
→エラー
==> amazon-ebs: Error launching source instance: VPCResourceNotSpecified: The specified instance type can only be used in a VPC. A subnet ID or network interface ID is required to carry out the request.
==> amazon-ebs: status code: 400, request id:
原因
t2系のインスタンスはVPC内でしか起動できない。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/t2-instances.html
対策
t2系インスタンスを使いたいのであれば、packerでVPC内にインスタンスが作成できるように設定を行う。
VPC内にインスタンスを作る必要がないのであれば、VPC不要のインスタンスを選択。m3系とか。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-vpc.html#vpc-only-instance-types
sudoできない旨のエラー
sudo: sorry, you must have a tty to run sudo
原因
ssh_ptyがfalseになっている。
対策
ssh_ptyの値は、デフォルトがfalse
なので、packerの設定ファイルでtrue
にする。
https://www.packer.io/docs/templates/communicator.html#ssh_pty
...
"builders": {
...
"ssh_pty": true
}
}
コマンドラインでsudoしたらエラー
以下のように、コマンドライン上でsudo
を行うと、
...
"provisioners": [
{
"type": "shell",
"inline": ["sudo echo foo"]
}
]
}
きっと以下のエラーが出迎える。
sudo: sorry, you must have a tty to run sudo
原因
Defaults requiretty
が有効になっている。
対策
/etc/sudoersのDefaults.requiretty
をコメントアウトする。
...
"provisioners": [
{
"type": "shell",
"inline": ["sed -i -e 's/^\\(Defaults.*requiretty\\)/#\\1/' /etc/sudoers", "sudo echo foo"]
}
]
}