You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Batch启动模板UserData不符合MIME多部分格式问题排查

问题

尝试为AWS Batch作业配置启动模板,我的user-data模板文件内容如下:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==BOUNDARY=="

--==BOUNDARY==
Content-Type: text/cloud-boothook; charset="us-ascii"
#cloud-boothook
#!/bin/bash
cloud-init-per once docker_options echo 'OPTIONS="$${OPTIONS} --storage-opt dm.basesize=20G"' >> /etc/sysconfig/docker

--==BOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"
packages:
- amazon-efs-utils
runcmd:
- mkdir -p ${efs_directory}
- echo "${efs_id}:/ ${efs_directory} efs _netdev,tls,iam 0 0" >> /etc/fstab
- mount -a -t efs defaults

--==BOUNDARY==--

生成启动模板用户数据的Terraform代码:

resource "aws_launch_template" "launch_template" {
  name = "launch_template"

  update_default_version = true
  user_data = base64encode(templatefile("${path.module}/launch_template_user_data.tpl", {
    efs_id = aws_efs_file_system.efs.id
    efs_directory = "/mnt/efs"
  }))
}

根据AWS官方文档,MIME多部分文件需遵循以下规则:

  • 包含MIME-Version: 1.0声明
  • 包含Content-Type: multipart/mixed; boundary="==BOUNDARY=="声明
  • 每个用户数据块需满足:
    • 起始分隔符--==BOUNDARY==前必须有一个空行
    • 块的Content-Type声明后必须留空行
    • 随后是用户数据内容
  • 结束分隔符--==BOUNDARY==--前必须留空行

我自认为已遵守上述规则,但仍收到错误提示:Launch Template UserData is not MIME multipart format,请问问题出在哪里?


解决方法

问题出在内容类型声明后缺少空行,这是AWS MIME多部分格式的硬性要求:

  1. 查看你的cloud-boothook块:
--==BOUNDARY==
Content-Type: text/cloud-boothook; charset="us-ascii"
#cloud-boothook
#!/bin/bash

Content-Type行后直接跟了#cloud-boothook,没有空行,违反了规则。

  1. 同样,cloud-config块的Content-Type行后也缺少空行。

修正后的user-data模板如下:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==BOUNDARY=="

--==BOUNDARY==
Content-Type: text/cloud-boothook; charset="us-ascii"

#cloud-boothook
#!/bin/bash
cloud-init-per once docker_options echo 'OPTIONS="$${OPTIONS} --storage-opt dm.basesize=20G"' >> /etc/sysconfig/docker

--==BOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

packages:
- amazon-efs-utils
runcmd:
- mkdir -p ${efs_directory}
- echo "${efs_id}:/ ${efs_directory} efs _netdev,tls,iam 0 0" >> /etc/fstab
- mount -a -t efs defaults

--==BOUNDARY==--

修正后重新部署Terraform,应该就能解决MIME格式错误的问题。

内容的提问来源于stack exchange,提问作者Tom McLean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:01:02