【问题标题】:User-data script not executed when starting EC2 instance from AWS CLI从 AWS CLI 启动 EC2 实例时未执行用户数据脚本
【发布时间】:2016-12-24 13:18:16
【问题描述】:

我正在尝试使用 AWS CLI 从我安装了 Docker 的映像启动 EC2 实例,然后为该实例提供 --user-data 传入的脚本以从 docker hub 拉取映像并运行该图像。我的 AWS CLI 命令启动实例,但似乎传递给 --user-data 的脚本从未运行。

CLI 命令是:

aws ec2 run-instances --image-id ami-xxxxx --count 1 --instance-type t2.micro --key-name xxxxx --security-groups xxxxxxx --user-data file:///Users/xxxxxx/startlb.sh

还有startlb.sh的内容:

#!/bin/bash
docker pull xxxxxx && docker run -p 9000:9000 -p 9090:9090 -d xxxxxxx go run lbserver.go > /home/ec2-user/startup.log

我将 docker 命令的输出重定向到 startup.log 以查看是否出现任何标准输出。当我登录到实例时,没有创建日志文件,这让我相信user-data 脚本永远不会运行。 docker imagesdocker ps 都显示实例上没有图像或容器。

该命令成功启动实例,只是没有拉取并运行docker容器(Docker默认运行在实例上,因此无需启动它)。启动实例后,如果我将脚本的内容粘贴到终端并执行它会拉取容器并运行它,因此脚本似乎没有任何问题。

【问题讨论】:

  • 通过 AWS Web 控制台查看实例的用户数据时,用户数据内容是否正确显示? AMI 是否真的安装了 cloud-init 服务?
  • 这个文件startlb.sh的权限是什么?
  • 检查 cloud-init 日志(可能是/var/log/cloud-init*)以查看脚本是否已运行但由于某种原因失败。
  • 您确定拉动有效吗?我建议添加到您的脚本中:#!/usr/bin/env bash set -xe docker pull xxx docker run...(每个语句后的新行)
  • 镜像下载后,如果停止再启动实例,它不会再次下载,对吧?它应该更快

标签: bash amazon-web-services docker amazon-ec2 aws-cli


【解决方案1】:

事实证明它确实有效。我没有给 docker pull 足够的时间来下载所有内容。几分钟后检查日志文件、图像和容器是否存在表明一切都在那里。

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多