标签: cloud-init

如何让 EC2 用户数据脚本在启动时再次运行?

在第一次启动 EC2 实例时cloud-init 运行用户数据脚本后,可能会写入一个状态文件,以便 cloud-init 在后续重新启动时不会再次运行该脚本。在某些情况下,我想删除此状态文件,以便再次运行用户数据脚本。它在哪里?

amazon-ec2 cloud-init

24
推荐指数
2
解决办法
3万
查看次数

如何为 Azure Ubuntu VM 创建交换?

我已经阅读了很多关于此的帖子,但我仍然不确定正确的方法,假设:

  1. 我有一个由 Azure 创建并在其上运行的默认 Ubuntu 14.04 LTS VM,它没有交换

  2. 我想使用现有的 VM 存储创建交换,而不是使用附加存储创建新磁盘

我读过的帖子:

讨论了许多解决方案,但我似乎找不到一个可以在服务器重新启动后持续存在的解决方案(可能是由于 cloud-init 对映像分区有自己的想法),有人可以就最佳实践向我提出建议吗?

ubuntu azure cloud-init

9
推荐指数
1
解决办法
7004
查看次数

AWS CLI 在第二次运行时抛出“无法找到凭证”

我正在尝试使用用户数据脚本在启动时使用 AWS CLI (1.8.7) 将一些文件从 S3 下载到 EC2 实例。此实例具有具有适当权限的 IAM 角色和实例配置文件。有时,CLI 会失败并显示错误“无法找到凭据”。它经常发生(不是每次),但总是单独的 S3 命令之后发生,该命令有效。这是脚本的输出:

++ date +%r
03:24:10 AM
++ aws s3 cp s3://non-public-bucket-1/15mb-zip-file.zip ./15mb-zip-file.zip
Completed 1 of 1 part(s) with 1 file(s) remaining^Mdownload: s3://non-public-bucket-1/15mb-zip-file.zip to 15mb-zip-file.zip
++ date +%r
03:24:14 AM
++ unzip 15mb-zip-file.zip

# Snip

++ date +%r
03:26:01 AM
++ curl http://169.254.169.254/latest/meta-data/instance-id
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    10  100 …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-ec2 amazon-web-services cloud-init aws-cli

9
推荐指数
1
解决办法
1万
查看次数

干净的 Ubuntu Server 20.04 系统上的启动问题

我最近在我的 2009 Mac pro 4,1(闪存到 5,1)的硬盘上安装了 Ubuntu 20.04。此时我已擦除并重新安装了 3 次。三次安装都顺利,但第一次启动时启动就挂起 [ OK ] Reached target Cloud-init target

我读了一些论坛,提到了这个问题,然后简单地重新启动了系统。

任何后续的启动都会挂起:

Ubuntu 20.04 LTS *********-server tty1

*********-server login: [  32.083683] cloud-init[891]: Cloud-init v. 20.1-10-g71af48df-0ubuntu5 running 'modules:config' at Fri, 08 May 2020 20:58:20 +0000. Up 31.93 seconds.
[    32.767663] cloud-init[898]: Cloud-init v. 20.1-10-g71af48df-0ubuntu5 running 'modules:final' at Fri, 08 May 2020 20:58:21 +0000. Up 32.59 seconds.
[    32.767850] cloud-init[898]: Cloud-init v. 20.1-10-g71af48df-0ubuntu5 finished at Fri, 08 May 2020 20:58:21 +0000. Datasource DataSourceNoCloud [seed=/var/lib/cloud/seed/ncloud-net] [dsmode=net]. …
Run Code Online (Sandbox Code Playgroud)

ubuntu boot cloud-init ubuntu-20.04

7
推荐指数
1
解决办法
5万
查看次数

删除 cloud-init 后的 ubuntu 18.04 网络

我在我的家庭服务器上安装了新的 Ubuntu 18.04,我注意到/etc/network/interfaces文件是空的。在互联网上搜索后,我发现 18.04 版使用cloud-init包来初始化网络和其他东西。我删除了 cloud-init 包并/etc/network/interfaces为静态 IP配置了接口,但是现在在我重新启动服务器后,似乎在服务启动之前没有配置网络,因为配置为在该接口上列出的每个服务都无法侦听。服务器启动后,我必须手动运行命令service [name] start。我该如何解决?

界面配置图

界面配置图

ubuntu cloud-init

6
推荐指数
1
解决办法
2万
查看次数

在 ec2 实例上的 cloud-init 中启动长时间运行的进程

我正在尝试在启动 EC2 (Amazon Linux) 时启动长时间运行的命令,但未能成功。它需要在 ec2-user 帐户下运行。这是我的第一次尝试:

#!/bin/bash
echo 'Woot 1!' > /home/ec2-user/woot1.txt
pushd /home/ec2-user/my-app-dir
nohup sudo -u ec2-user /home/ec2-user/my-app-dir/my_process.py &
echo 'Woot 2!' > /home/ec2-user/woot2.txt
Run Code Online (Sandbox Code Playgroud)

我试图运行的关键命令是“nohup”行,用于运行 my_process.py。

当我从 shell 以 root 身份运行它时,shell 脚本可以工作,但是当我在用户数据中将它提供给 ec2-run-instances 并登录到实例时,我看到了 woot1.txt 和 woot2.txt,但是 my_process.py没有运行。更重要的是,my_process.py 在运行时会创建一个日志文件,但是当我将脚本作为用户数据提供给 ec2-run-instances 时,那里没有日志文件(也没有 nohup.out)。

我也尝试将相同的东西放在 cloud-init 形式中,结果相同:

#cloud-config
runcmd:
 - echo 'Woot 1!' > /home/ec2-user/woot1.txt
 - pushd /home/ec2-user/my-app-dir
 - nohup sudo -u ec2-user /home/ec2-user/my-app-dir/my_process.py &
 - echo 'Woot 2!' > /home/ec2-user/woot2.txt
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我哪里出错了,我将不胜感激。

amazon-ec2 cloud-init

5
推荐指数
1
解决办法
2800
查看次数

如何在首次启动时使用 cloud-init 配置 AWS EBS 卷?

Cloud-init 提供了 disk_setup、fs_setup 和 mounts 模块来分区、格式化和将卷挂载到虚拟机,但是这些选项在http://cloudinit.readthedocs.org和 AWS上都没有记录。

是否存在 cloud-init 配置的功能示例,该示例将在 AWS 上对单个 EBS 卷进行分区、格式化和挂载到配置如下的实例:

"Volume" : {
  "Type" : "AWS::EC2::Volume",
  "Properties" : {
    "Size" : "100",
    "VolumeType" : "gp2",
    "AvailabilityZone" : { "Fn::GetAtt" : [ "ServerInstance", "AvailabilityZone" ] }
  },
  "DeletionPolicy" : "Delete"
},
"MountVolume" : {
  "Type" : "AWS::EC2::VolumeAttachment",
  "Properties" : {
    "InstanceId" : { "Ref" : "ServerInstance" },
    "VolumeId"  : { "Ref" : "Volume" },
    "Device" : "/dev/sdh"
  }
},
Run Code Online (Sandbox Code Playgroud)

到目前为止,我最接近的是以下内容(更正了语法问题):

disk_setup:
  /dev/xvdh:
    layout: true
    overwrite: …
Run Code Online (Sandbox Code Playgroud)

amazon-ebs amazon-web-services cloud-init

5
推荐指数
1
解决办法
5408
查看次数

cloud-init 模块顺序错误,如何修复?

我正在使用 cloud-init 设置运行 Ubuntu 14.04 的 AWS EC2 机器。cloud-init 比较有用的功能之一是write_files允许我在虚拟机初始化期间安装附加文件的模块。

write_files有几个有用的功能,其中的设置文件的所有者,作为记录在这里。不幸的是,我似乎无法write_files在 Ubuntu 14.04 中使用此功能将文件所有者设置为任何非系统帐户,因为添加用户的 cloud-init 模块 - “用户组”正在该write_files部分之后运行。如果我将文件所有者设置为在该users部分中添加的用户(或在我的情况下为 default users),即使我通过 uid 执行此操作,我也会收到如下错误:

StandardError:('write-files', OSError("Unknown user or group: 'getpwnam(): name not found: ubuntu'",))
Run Code Online (Sandbox Code Playgroud)

这似乎编码到 /etc/cloud/cloud.cfg 中,其中包含以下部分:

cloud_init_modules:
 - migrator
 - seed_random
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - set_hostname
 - update_hostname
 - update_etc_hosts
 - ca-certs
 - rsyslog
 - users-groups
 - ssh
Run Code Online (Sandbox Code Playgroud)

我在互联网上看到了一些cloud_init_modules在 cloud-init 用户数据中设置的示例,但是如果我添加这样一个部分并将其排序 …

ubuntu cloud-init ubuntu-14.04

5
推荐指数
1
解决办法
1479
查看次数

如何在 Amazon EC2 上的 Fedora 28 上启用 IPv6

我似乎无法在 Amazon EC2 的 Fedora 28 中使用 IPv6(因此使用 cloud-init 和 DHCPv6)。

它使用此处描述的配置在 RHEL 7 中工作。将相同的配置应用于 Fedora 28 似乎没有任何作用。特别是,/etc/sysconfig/network得到改写包含NETWORKING_IPV6=yes,也不/etc/sysconfig/network-scripts/ifcfg-eth0包含任何IPv6的东西。

我的/etc/cloud/cloud.cfg.d/56-custom-networking.cfg包含:

network:
  version: 1
  config:
  - type: physical
    name: eth0
    subnets:
      - type: dhcp
      - type: dhcp6
Run Code Online (Sandbox Code Playgroud)

生成的/etc/sysconfig/network是:

NOZEROCONF=yes
DEVTIMEOUT=10

# Created by cloud-init on instance boot automatically, do not edit.
#
NETWORKING=yes
Run Code Online (Sandbox Code Playgroud)

生成的/etc/sysconfig/network-scripts/ifcfg-eth0是:

# Created by cloud-init on instance boot automatically, do not edit.
# …
Run Code Online (Sandbox Code Playgroud)

fedora ipv6 amazon-ec2 cloud-init dhcpv6

5
推荐指数
1
解决办法
872
查看次数

如何确保Cloud-Init恰好运行一次且仅运行一次?

据我所知,cloud-init每次配置更改时都会运行。不仅是系统第一次启动,而且每次提供的配置发生更改时。这在某种程度上是有道理的,因为我想很难定义“第一次”(克隆的虚拟机在被冻结并用作模板之前已经运行过,所以它从来都不是真正的第一次)。然而,我时不时地\xe2\x80\x94,很少,但仍然\xe2\x80\x94发现cloud-init当它们重新启动时,它会在已配置的系统上重新运行。

\n

cloud-init然而,当在完全配置的系统上运行时,某些步骤似乎会搞砸设置。例如,如果它在初始设置后再次运行一次并将cloud-init某些配置设置为 value X,但您随后手动将其覆盖为Y,现在cloud-init重新运行以将其设置回X。或者,让系统重新创建您的 SSH 主机密钥。

\n

因此,我发现手动运行非常有用:

\n
sudo touch /etc/cloud/cloud-init.disabled\n
Run Code Online (Sandbox Code Playgroud)\n

...初始设置后以防止其再次运行cloud-init。(在某些情况下,其中cloud-initreal 仅用于初始“克隆和设置 IP/主机名”类型的配置。)

\n

但有什么办法可以自动化这个过程吗?/etc/cloud/cloud.cfg就像向下次运行后禁用自身的一些参数添加一样?

\n

cloud-init

5
推荐指数
1
解决办法
1万
查看次数