AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

自定义 Windows Server 上的软件

建议自定义和配置您的应用程序所依赖的软件。这些文件可能是该应用程序所要求的依赖项,例如需要运行的其他软件包或服务。有关自定义和配置 Elastic Beanstalk 环境的一般信息,请参阅AWS Elastic Beanstalk 环境配置

注意

YAML 依赖一致的缩进。当替换示例配置文件中的内容时,应匹配缩进级别,并且确保您的文本编辑器使用空格而不是字符来进行缩进。

配置文件支持以下可对运行您的应用程序的 Windows 服务器产生影响的键。

将按键在此处列出的顺序对其进行处理。

注意

较旧(不受版本控制)的 .NET 平台版本不会按正确顺序处理配置文件。有关更多信息,请参阅跨 Elastic Beanstalk Windows Server 平台的主要版本迁移

观看您的环境的事件,同时开发和测试配置文件。Elastic Beanstalk 将忽略某个配置文件,该文件包含“密钥无效”等验证错误并且不会处理同一文件中的任何其他密钥。出现这种情况时,Elastic Beanstalk 将向事件日志添加一个警告事件。

软件包

使用 packages 键下载并安装预先打包的应用程序和组件。

在 Windows 环境中,Elastic Beanstalk 支持下载和安装 MSI 软件包。(Linux 环境支持其他软件包管理器。有关详细信息,请参阅自定义 Linux 服务器上的软件 页面上的软件包。)

您可以引用外部位置,如 Amazon Simple Storage Service (Amazon S3) 对象,只要该 URL 可公开访问。

如果您指定了多个 msi: 程序包,则无法保证其安装顺序。

语法

指定您选择的名称作为软件包名称,而且指定 MSI 文件位置的 URL 作为该值。您可以在 msi: 密钥下指定多个程序包。

packages: msi: package name: package url ...

示例

下面的示例指定了从 https://dev.mysql.com/ 中下载 mysql 的 URL。

packages: msi: mysql: https://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-8.0.11.msi

以下示例指定了 Amazon S3 对象作为 MSI 文件位置。

packages: msi: mymsi: https://s3.amazonaws.com.cn/mybucket/myobject.msi

使用 sources 键从公有 URL 下载存档文件并将其解压到 EC2 实例上的目标目录中。

语法

sources: target directory: location of archive file

支持的格式

在 Windows 环境中,Elastic Beanstalk 支持 .zip 格式。(Linux 环境支持其他格式。有关详细信息,请参阅自定义 Linux 服务器上的软件 页面上的。)

您可以引用外部位置,如 Amazon Simple Storage Service (Amazon S3) 对象,只要该 URL 可公开访问。

示例

以下示例从 Amazon S3 存储桶下载一个公有 .zip 文件并将其解压到 c:/myproject/myapp 中。

sources: "c:/myproject/myapp": https://s3.amazonaws.com.cn/mybucket/myobject.zip

文件

使用 files 键在 EC2 实例上创建文件。内容可以内嵌在配置文件中,也可以取自 URL。这些文件会按词典顺序写入磁盘。要从 Amazon S3 下载私有文件,请提供实例配置文件以进行授权。

语法

files: "target file location on disk": source: URL authentication: authentication name: "target file location on disk": content: | this is my content encoding: encoding format

选项

content

(可选) 一个字符串。

source

(可选) 加载文件的 URL。不能使用内容密钥指定该选项。

encoding

(可选) 编码格式。此选项只用于所提供的内容键值。默认值为 plain

有效值:plain | base64

authentication

(可选)要使用的 AWS CloudFormation 身份验证方法的名称。您可以使用资源键将身份验证方法添加到 Auto Scaling 组元数据。

示例

以下示例显示了提供文件内容的两种方式:通过 URL 或内嵌在配置文件中。

files: "c:\\targetdirectory\\targetfile.txt": source: http://foo.bar/myfile "c:/targetdirectory/targetfile.txt": content: | # this is my file # with content

注意

如果您在文件路径中使用反斜杠 (\),则必须在它前面再插入一个反斜杠 (转义字符),如上例所示。

以下示例使用资源键添加名为 S3Auth 的身份验证方法并使用该方法从 Amazon S3 存储桶下载私有文件:

files: "c:\\targetdirectory\\targetfile.zip": source: https://s3.amazonaws.com.cn/elasticbeanstalk-us-west-2-123456789012/prefix/myfile.zip authentication: S3Auth Resources: AWSEBAutoScalingGroup: Metadata: AWS::CloudFormation::Authentication: S3Auth: type: "s3" buckets: ["elasticbeanstalk-us-west-2-123456789012"] roleName: "Fn::GetOptionSetting": Namespace: "aws:autoscaling:launchconfiguration" OptionName: "IamInstanceProfile" DefaultValue: "aws-elasticbeanstalk-ec2-role"

命令

使用 commands 键在 EC2 实例上执行命令。该命令是按名称的字母顺序处理的,它们会在安裝应用程序和 Web 服务器以及提取应用程序版本文件前运行。

管理员用户身份可运行指定的命令。

要使用您的命令排查问题,您可以在实例日志中查找其输出。

语法

commands: command name: command: command to run

选项

command

指定要运行的命令的数组或字符串。如果使用数组,那么不需要转义空格字符,或者在命令参数周围使用引号。

cwd

(可选) 工作目录。默认情况下,Elastic Beanstalk 会尝试查找项目的目录位置。如果找不到,则它会使用 c:\Windows\System32 作为默认目录位置。

env

(可选) 设置该命令的环境变量。这个属性会覆盖而不是追加到现有的环境。

ignoreErrors

(可选) 一个布尔值,该值确定在 command 密钥中包含的命令失败时 (返回非零值) 是否应该运行其他命令。如果要在命令失败后继续运行其他命令,请将该值设置为 true。否则,请将该值设置为 false。默认值为 false

test

(可选)一种命令,该命令必须返回 true 值(退出代码 0),以便 Elastic Beanstalk 处理 command 键中包含的命令。

waitAfterCompletion

(可选) 在命令完成后、运行下一个命令前等待的秒数。如果系统需要在命令完成后重启,则会在经过指定的秒数后重启系统。如果系统因某个命令而重启,Elastic Beanstalk 将恢复到配置文件中该命令之后的点。默认值为 60 秒。您还可以指定 forever,但须重启系统后才能运行其他命令。

示例

下面的示例将 set 命令的输出保存到指定的文件。如果有后续命令,Elastic Beanstalk 会在此命令完成后立即运行后续命令。如果命令需要重新启动,则 Elastic Beanstalk 会在命令完成后立即重新启动实例。

commands: test: command: set > c:\\myapp\\set.txt waitAfterCompletion: 0

服务

使用 services 键定义哪些服务应该在实例启动时启动或者停止。services 键还可让您指定源、包和文件的依赖项,以便在由于文件安装而需要重启时,让 Elastic Beanstalk 负责服务的重启。

语法

services: windows: name of service: files: - "file name" sources: - "directory" packages: name of package manager: "package name[: version]" commands: - "name of command"

选项

ensureRunning

(可选)设为 true 以确保此服务在 Elastic Beanstalk 完成后运行。

设置为 false,可确保该服务在 Elastic Beanstalk 完成后不运行。

忽略该密钥,将不更改服务状态。

enabled

(可选) 设为 true 以确保此服务在启动时自动启动。

设置为 false,可确保该服务在启动时不会自动启动。

忽略该密钥,将不更改这个属性。

files

一系列文件。如果 Elastic Beanstalk 直接通过文件块更改一个文件,则该服务会重启。

sources

一系列目录。如果 Elastic Beanstalk 将存档展开到这些目录中的一个,则该服务会重启。

packages

包管理器与一系列包名的映射。如果 Elastic Beanstalk 安装或者更新了这些包中的一个,则该服务会重启。

commands

一系列命令名称。如果 Elastic Beanstalk 运行指定的命令,则该服务会重启。

示例

services: windows: myservice: enabled: true ensureRunning: true

容器命令

使用 container_commands 键执行将影响应用程序源代码的命令。容器命令将在设置应用程序和 Web 服务器并提取应用程序版本存档后,但在部署应用程序版本前运行。非容器命令和其他自定义操作将在提取应用程序源代码之前执行。

容器命令从暂存目录运行,您的源代码在部署到应用程序服务器前在这里提取。当源部署到其最终位置时,将包含您在暂存目录中使用容器命令对源代码所做的任何更改。

要使用您的容器命令排查问题,您可以在实例日志中查找其输出。

可以使用 leader_only 选项只对单个实例运行此命令,也可以配置 test 以只在测试命令的评估结果为 true 时运行此命令。仅领导容器命令只在创建和部署环境期间执行,而其他命令和服务器自定义操作将在预配置或更新实例时执行。由于启动配置发生更改 (例如 AMI Id 或实例类型的更改),未执行仅领导容器命令。

语法

container_commands: name of container_command: command: command to run

选项

command

要运行的字符串或字符串数组。

env

(可选) 在运行命令之前设置环境变量,并覆盖任何现有值。

cwd

(可选) 工作目录。默认情况下,这是解压缩应用程序的暂存目录。

leader_only

(可选) 仅对 Elastic Beanstalk 选定的单个实例运行命令。仅领导容器命令将在其他容器命令之前运行。命令可以是仅领导命令或具有 test,但不能同时具备这两个特性 (leader_only 优先)。

test

(可选) 运行必须返回 true 的测试命令以便运行容器命令。命令可以是仅领导命令或具有 test,但不能同时具备这两个特性 (leader_only 优先)。

ignoreErrors

(可选) 不在容器命令返回 0 以外的值 (成功) 时导致部署失败。设置为 true 可实现这一点。

waitAfterCompletion

(可选) 在命令完成后、运行下一个命令前等待的秒数。如果系统需要在命令完成后重启,则会在经过指定的秒数后重启系统。如果系统因某个命令而重启,Elastic Beanstalk 将恢复到配置文件中该命令之后的点。默认值为 60 秒。您还可以指定 forever,但须重启系统后才能运行其他命令。

示例

下面的示例将 set 命令的输出保存到指定的文件。Elastic Beanstalk 在一个实例上运行此命令,并在命令完成后立即重新启动实例。

container_commands: foo: command: set > c:\\myapp\\set.txt leader_only: true waitAfterCompletion: 0