Ubuntu EC2实例Cloud-Init配置Nginx与AWSLogs遇阻求助
解决方案
核心问题修复
- 合并Cloud-Init模块:Cloud-Init的YAML配置中,
write_files和runcmd每个模块仅能定义一次,需将多段操作合并到同一个列表内。 - 非交互安装AWSLogs:通过设置环境变量和预配置参数,跳过安装过程中的交互步骤,避免EOF错误。
完整Cloud-Init配置脚本
#cloud-config package_update: true package_upgrade: true write_files: # 自定义Nginx配置文件 - path: /etc/nginx/nginx.conf content: | user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 1024; } http { sendfile on; tcp_nopush on; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } } } owner: root:root permissions: '0644' # 自定义AWSLogs配置文件 - path: /etc/awslogs/awslogs.conf content: | [general] state_file = /var/lib/awslogs/agent-state [/var/log/nginx/access.log] file = /var/log/nginx/access.log log_group_name = /aws/ec2/nginx/access-log log_stream_name = {instance_id} region = us-east-1 # 替换为你的AWS区域 owner: root:root permissions: '0644' runcmd: # 安装Nginx - apt-get install -y nginx # 重启Nginx使配置生效 - systemctl restart nginx - systemctl enable nginx # 非交互安装AWSLogs - curl -s https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O - DEBIAN_FRONTEND=noninteractive python3 awslogs-agent-setup.py -n -r us-east-1 -c /etc/awslogs/awslogs.conf - rm -f awslogs-agent-setup.py # 重启AWSLogs服务并设置开机启动 - systemctl restart awslogs - systemctl enable awslogs
关键说明
- 替换配置内容:将Nginx配置和AWSLogs配置中的区域、日志组名称等占位内容替换为你的实际需求。
- IAM权限:确保EC2实例关联的IAM角色拥有CloudWatch日志推送权限(如
CloudWatchLogsFullAccess或自定义精细权限),否则AWSLogs无法正常工作。 - 区域一致性:AWSLogs安装命令中的
-r参数需与配置文件内的region字段保持一致。 - 非交互参数:
awslogs-agent-setup.py的-n参数强制非交互模式,-c指定预配置文件,直接跳过手动输入环节。
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

