1

我正在使用 Packer 构建一个 AMI,它配置了一个自定义 SystemD 单元。然后将 AMI 部署到 EC2。问题是,如果 EC2 重新启动,则设备不会重新启动。

这是我的单位:

[Unit]
Description=My service
After=network.target
StartLimitIntervalSec=0
StartLimitAction=reboot

[Service]
Type=simple
Restart=always
RestartSec=30
User=ubuntu
ExecStart=/opt/app/app

[Install]
WantedBy=multi-user.target

这是我的 Packer 配置:

{
  "variables": {
    "aws_access_key": "{{env `AWS_ACCESS_KEY_ID`}}",
    "aws_secret_key": "{{env `AWS_SECRET_ACCESS_KEY`}}",
    "region":         "{{env `AWS_REGION`}}"
  },
  "builders": [
    {
      "access_key": "{{user `aws_access_key`}}",
      "ami_name": "my-app-{{timestamp}}",
      "instance_type": "t2.micro",
      "region": "{{user `region`}}",
      "secret_key": "{{user `aws_secret_key`}}",
      "source_ami_filter": {
        "filters": {
        "virtualization-type": "hvm",
        "name": "ubuntu/images/*ubuntu-bionic-18.04-amd64-server-*",
        "root-device-type": "ebs"
        },
        "owners": [ "099720109477" ],
        "most_recent": true
      },
      "ssh_username": "ubuntu",
      "type": "amazon-ebs"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "script": "{{template_dir}}/provision.sh"
    },
    {
      "type": "file",
      "source": "{{template_dir}}/files/app.service",
      "destination": "/tmp/upload/etc/systemd/system/app.service"
    },
    {
      "type": "file",
      "source": "{{template_dir}}/../bin/Release/netcoreapp3.1/",
      "destination": "/tmp/upload/opt/app"
    },
    {
      "type": "shell",
      "inline": [
        "sudo rsync -a /tmp/upload/ /",
        "cd /opt/app",
        "sudo systemctl daemon-reload",
        "sudo systemctl enable app.service"
      ]
    }
  ]
}

奇怪的是,如果我通过 SSH 连接到正在运行的 EC2 并启用该服务,那么它会在重启后重启。

sudo systemctl enable app.service
sudo reboot

这让我觉得我没有正确创建 AMI,但在我的 Packer 配置中我确实启用了该服务!

为什么我的 AMI 没有启用我的 SystemD 单元?

4

0 回答 0