将应用程序规范文件添加到 CodeDeploy 的修订版 - Amazon CodeDeploy
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将应用程序规范文件添加到 CodeDeploy 的修订版

本主题介绍如何向部署中添加 AppSpec 文件。它还包括 AppSpec 来为AmazonLambda 和 EC2/ 本地部署。

为 Amazon ECS 部署添加 AppSpec 文件

对于 Amazon ECS 计算平台的部署,请执行以下操作:

  • AppSpec 文件指定用于部署的 Amazon ECS 任务定义,用于路由流量的容器名称和端口映射,以及在部署生命周期事件之后运行的可选 Lambda 函数。

  • 修订和 AppSpec 文件相同。

  • AppSpec 文件可以使用 JSON 格式或 YAML 编写。

  • 在创建部署时,可以将 AppSpec 文件另存为文本文件或直接输入控制台中。有关更多信息,请参阅 创建 Amazon ECS 计算平台部署(控制台)

创建 AppSpec 文件

  1. 将 JSON 或 YAML 模板复制到文本编辑器或输入控制台中的 AppSpec 编辑器。

  2. 根据需要修改模板。

  3. 使用 JSON 或 YAML 验证程序验证 AppSpec 文件。如果您使用 AppSpec 编辑器,则会在您选择 Create deployment (创建部署) 时验证该文件。

  4. 如果您使用文本编辑器,请保存该文件。如果您使用Amazon CLI创建部署,请在 AppSpec 文件位于硬盘驱动器上或 Amazon S3 存储桶中时引用它。如果您使用控制台,则必须将 AppSpec 文件推送到 Amazon S3。

用于亚马逊云服务器部署的 YAML AppSpec 文件模板,附有说明

下面是 Amazon ECS 部署 AppSpec 文件的 YAML 模板以及所有可用选项。有关在 hooks 部分中使用的生命周期事件的信息,请参阅Amazon ECS 部署的 AppSpec 的 “hooks” 部分

# This is an appspec.yml template file for use with an Amazon ECS deployment in CodeDeploy. # The lines in this template that start with the hashtag are # comments that can be safely left in the file or # ignored. # For help completing this file, see the "AppSpec File Reference" in the # "CodeDeploy User Guide" at # https://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html version: 0.0 # In the Resources section, you must specify the following: the Amazon ECS service, task definition name, # and the name and port of the your load balancer to route traffic, # target version, and (optional) the current version of your Amazon Lambda function. Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: "" # Specify the ARN of your task definition (arn:aws:ecs:region:account-id:task-definition/task-definition-family-name:task-definition-revision-number) LoadBalancerInfo: ContainerName: "" # Specify the name of your Amazon ECS application's container ContainerPort: "" # Specify the port for your container where traffic reroutes # Optional properties PlatformVersion: "" # Specify the version of your Amazon ECS Service NetworkConfiguration: AwsvpcConfiguration: Subnets: ["",""] # Specify one or more comma-separated subnets in your Amazon ECS service SecurityGroups: ["",""] # Specify one or more comma-separated security groups in your Amazon ECS service AssignPublicIp: "" # Specify "ENABLED" or "DISABLED" # (Optional) In the Hooks section, specify a validation Lambda function to run during # a lifecycle event. Hooks: # Hooks for Amazon ECS deployments are: - BeforeInstall: "" # Specify a Lambda function name or ARN - AfterInstall: "" # Specify a Lambda function name or ARN - AfterAllowTestTraffic: "" # Specify a Lambda function name or ARN - BeforeAllowTraffic: "" # Specify a Lambda function name or ARN - AfterAllowTraffic: "" # Specify a Lambda function name or ARN

用于 Amazon ECS 部署模板的 JSON AppSpec 文件

下面是 Amazon ECS 部署 AppSpec 文件的 JSON 模板以及所有可用选项。有关模板说明,请参阅上一部分中 YAML 版本中的注释。有关在 hooks 部分中使用的生命周期事件的信息,请参阅Amazon ECS 部署的 AppSpec 的 “hooks” 部分

{ "version": 0.0, "Resources": [ { "TargetService": { "Type": "AWS::ECS::Service", "Properties": { "TaskDefinition": "", "LoadBalancerInfo": { "ContainerName": "", "ContainerPort": }, "PlatformVersion": "", "NetworkConfiguration": { "AwsvpcConfiguration": { "Subnets": [ "", "" ], "SecurityGroups": [ "", "" ], "AssignPublicIp": "" } } } } } ], "Hooks": [ { "BeforeInstall": "" }, { "AfterInstall": "" }, { "AfterAllowTestTraffic": "" }, { "BeforeAllowTraffic": "" }, { "AfterAllowTraffic": "" } ] }

AppSpecAmazonLambda 部署

对于到的部署AmazonLambda 计算平台:

  • AppSpec 文件包含有关要部署并用于部署验证的 Lambda 函数的说明。

  • 修订和 AppSpec 文件相同。

  • AppSpec 文件可以使用 JSON 格式或 YAML 编写。

  • 在创建部署时,可以将 AppSpec 文件另存为文本文件或直接输入控制台 AppSpec 编辑器中。有关更多信息,请参阅创建AmazonLambda 计算平台部署(控制台)

创建 AppSpec 文件:

  1. 将 JSON 或 YAML 模板复制到文本编辑器或输入控制台中的 AppSpec 编辑器。

  2. 根据需要修改模板。

  3. 使用 JSON 或 YAML 验证程序验证 AppSpec 文件。如果您使用 AppSpec 编辑器,则会在您选择 Create deployment (创建部署) 时验证该文件。

  4. 如果您使用文本编辑器,请保存该文件。如果您使用Amazon CLI创建部署,请在 AppSpec 文件位于硬盘驱动器上或 Amazon S3 存储桶中时引用它。如果您使用控制台,则必须将 AppSpec 文件推送到 Amazon S3。

YAML AppSpec 文件模板Amazon Lambda带说明的部署

有关在 hooks 部分中使用的生命周期事件的信息,请参阅用于 AppSpec 的 “hooks” 部分AmazonLambda 部署

# This is an appspec.yml template file for use with an Amazon Lambda deployment in CodeDeploy. # The lines in this template starting with the hashtag symbol are # instructional comments and can be safely left in the file or # ignored. # For help completing this file, see the "AppSpec File Reference" in the # "CodeDeploy User Guide" at # https://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html version: 0.0 # In the Resources section specify the name, alias, # target version, and (optional) the current version of your Amazon Lambda function. Resources: - MyFunction: # Replace "MyFunction" with the name of your Lambda function Type: AWS::Lambda::Function Properties: Name: "" # Specify the name of your Lambda function Alias: "" # Specify the alias for your Lambda function CurrentVersion: "" # Specify the current version of your Lambda function TargetVersion: "" # Specify the version of your Lambda function to deploy # (Optional) In the Hooks section, specify a validation Lambda function to run during # a lifecycle event. Replace "LifeCycleEvent" with BeforeAllowTraffic # or AfterAllowTraffic. Hooks: - LifeCycleEvent: "" # Specify a Lambda validation function between double-quotes.

JSON AppSpec 文件Amazon Lambda部署模板

在以下模板中,您需要将“MyFunction”替换为 Amazon Lambda 函数的名称。在可选的 Hooks 部分,将生命周期事件替换为 BeforeAllowTraffic 或 AfterAllowTraffic。

有关在 Hooks 部分中使用的生命周期事件的信息,请参阅用于 AppSpec 的 “hooks” 部分AmazonLambda 部署

{ "version": 0.0, "Resources": [{ "MyFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Name": "", "Alias": "", "CurrentVersion": "", "TargetVersion": "" } } }], "Hooks": [{ "LifeCycleEvent": "" } ] }

为 EC2/本地部署部署添加AppSpec 文件

如果没有 AppSpec 文件,CodeDeploc 无法将应用程序修订中的源文件映射到其目标,也无法为您向 EC2/ 本地计算平台中进行的部署运行脚本。

每个修订只能包含一个 AppSpec 文件。

将 AppSpec 文件添加到修订:

  1. 将模板复制到文本编辑器。

  2. 根据需要修改模板。

  3. 使用 YAML 验证程序检查 AppSpec 文件的有效性。

  4. 在修订的根目录中将文件另存为 appspec.yml

  5. 运行下列命令之一,验证您是否已将 AppSpec 文件放置在根目录中:

    • 对于 Linux、macOS 或 Unix:

      find /path/to/root/directory -name appspec.yml

      如果在其中找不到 AppSpec 文件,则不输出任何内容。

    • 对于 Windows:

      dir path\to\root\directory\appspec.yml

      A找不到文件如果 AppSpec 文件未存储在那里,则会显示错误。

  6. 将修订推送到 Amazon S3 或 GitHub。

    有关说明,请参阅将对于 CodeDeploy 的修订推送到 Amazon S3(仅限 EC2/ 本地部署)

EC2/本地部署的AppSpec 文件模板及说明

注意

部署到 Windows 服务器实例不支持runas元素。如果要部署到 Windows 服务器实例,请不要将其包含在 AppSpec 文件中。

# This is an appspec.yml template file for use with an EC2/On-Premises deployment in CodeDeploy. # The lines in this template starting with the hashtag symbol are # instructional comments and can be safely left in the file or # ignored. # For help completing this file, see the "AppSpec File Reference" in the # "CodeDeploy User Guide" at # https://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html version: 0.0 # Specify "os: linux" if this revision targets Amazon Linux, # Red Hat Enterprise Linux (RHEL), or Ubuntu Server # instances. # Specify "os: windows" if this revision targets Windows Server instances. # (You cannot specify both "os: linux" and "os: windows".) os: linux # os: windows # During the Install deployment lifecycle event (which occurs between the # BeforeInstall and AfterInstall events), copy the specified files # in "source" starting from the root of the revision's file bundle # to "destination" on the Amazon EC2 instance. # Specify multiple "source" and "destination" pairs if you want to copy # from multiple sources or to multiple destinations. # If you are not copying any files to the Amazon EC2 instance, then remove the # "files" section altogether. A blank or incomplete "files" section # may cause associated deployments to fail. files: - source: destination: - source: destination: # For deployments to Amazon Linux, Ubuntu Server, or RHEL instances, # you can specify a "permissions" # section here that describes special permissions to apply to the files # in the "files" section as they are being copied over to # the Amazon EC2 instance. # For more information, see the documentation. # If you are deploying to Windows Server instances, # then remove the # "permissions" section altogether. A blank or incomplete "permissions" # section may cause associated deployments to fail. permissions: - object: pattern: except: owner: group: mode: acls: - context: user: type: range: type: - # If you are not running any commands on the Amazon EC2 instance, then remove # the "hooks" section altogether. A blank or incomplete "hooks" section # may cause associated deployments to fail. hooks: # For each deployment lifecycle event, specify multiple "location" entries # if you want to run multiple scripts during that event. # You can specify "timeout" as the number of seconds to wait until failing the deployment # if the specified scripts do not run within the specified time limit for the # specified event. For example, 900 seconds is 15 minutes. If not specified, # the default is 1800 seconds (30 minutes). # Note that the maximum amount of time that all scripts must finish executing # for each individual deployment lifecycle event is 3600 seconds (1 hour). # Otherwise, the deployment will stop and CodeDeploy will consider the deployment # to have failed to the Amazon EC2 instance. Make sure that the total number of seconds # that are specified in "timeout" for all scripts in each individual deployment # lifecycle event does not exceed a combined 3600 seconds (1 hour). # For deployments to Amazon Linux, Ubuntu Server, or RHEL instances, # you can specify "runas" in an event to # run as the specified user. For more information, see the documentation. # If you are deploying to Windows Server instances, # remove "runas" altogether. # If you do not want to run any commands during a particular deployment # lifecycle event, remove that event declaration altogether. Blank or # incomplete event declarations may cause associated deployments to fail. # During the ApplicationStop deployment lifecycle event, run the commands # in the script specified in "location" starting from the root of the # revision's file bundle. ApplicationStop: - location: timeout: runas: - location: timeout: runas: # During the BeforeInstall deployment lifecycle event, run the commands # in the script specified in "location". BeforeInstall: - location: timeout: runas: - location: timeout: runas: # During the AfterInstall deployment lifecycle event, run the commands # in the script specified in "location". AfterInstall: - location: timeout: runas: - location: timeout: runas: # During the ApplicationStart deployment lifecycle event, run the commands # in the script specified in "location". ApplicationStart: - location: timeout: runas: - location: timeout: runas: # During the ValidateService deployment lifecycle event, run the commands # in the script specified in "location". ValidateService: - location: timeout: runas: - location: timeout: runas: