为什么在使用 AWSJavaScriptSDK 时忽略 ElasticBeanstalk .ebextensions?

Why are ElasticBeanstalk .ebextensions ignored when using AWSJavaScriptSDK?

当使用 AWS JavaScript SDK 更新 ElasticBeanstalk 环境时,我的 .ebextensions/* 被忽略了。我正在将应用程序源包作为 .zip 文件上传到 S3,这会触发 Lambda 使用这段代码部署新的应用程序版本:

const elasticbeanstalk = new AWS.ElasticBeanstalk();

exports.handler = async (event) => {
  const versionLabel = "myVersionString" + (new Date().toUTCString());

  // elasticbeanstalk.createApplicationVersion [...]

  elasticbeanstalk.updateEnvironment({
    "EnvironmentName": "myEBEnvironment",
    "VersionLabel": versionLabel
  });

};

在 AWS 管理控制台中上传相同的源包时,我的所有 .ebextensions 都按预期执行。

*.config 文件中没有什么特别之处。我只是根据环境变量创建一些文件供以后使用,例如

files:
  "/home/ec2-user/prepare_key.sh":
    mode: "000777"
    content: |
      #!/bin/bash

      if [ -z ${MY_KEY+x} ]
      then
          echo "MY_KEY is not set. skip."
      else
          echo "prepare MY_KEY ..."
          echo $MY_KEY > /home/ec2-user/key
      fi
container_commands:
  set_up:
    command: "/home/ec2-user/prepare_key.sh"

因此,文件 /home/ec2-user/prepare_key.sh 未生成(或更新),命令 set_up 未在 Lambda 部署期间执行。

我仔细检查了源包。我所有的 .ebextensions/*.config 文件都在那里。我的项目目录中没有 .ebignore 个文件。

VersionLabel 不能包含逗号。

在 Lambda 中,我使用的是 new Date().toUTCString(),它被附加到静态版本标签。这会产生类似 "myVersionString Mon, 09 Sep 2019 08:16:23 GMT" 的字符串。包含的逗号导致 .ebextensions 无法被 Elastic Beanstalk 正确提取。

我现在只附加一个不包含任何逗号的 ISO 字符串。

const versionLabel = "myVersionString" + (new Date().toISOString());