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多部分格式的硬性要求:
- 查看你的cloud-boothook块:
--==BOUNDARY== Content-Type: text/cloud-boothook; charset="us-ascii" #cloud-boothook #!/bin/bash
Content-Type行后直接跟了#cloud-boothook,没有空行,违反了规则。
- 同样,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
相关产品推荐
相关产品推荐

