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

如何编写.NET Core应用部署至AWS Elastic Beanstalk的脚本

解决.NET Core应用通过AWS CodePipeline+CodeDeploy部署到Elastic Beanstalk的脚本配置问题

我之前也碰到过一模一样的困扰——不想依赖Visual Studio的AWS部署插件,纯靠CodePipeline+CodeDeploy完成.NET Core应用到EB EC2实例的部署。其实核心是利用CodeDeploy的appspec.yml配置和自定义部署钩子脚本,完全可以脱离VS工具实现自动化部署,给你一步步说清楚:

1. 根目录创建CodeDeploy的AppSpec配置文件

在你的.NET Core项目根目录新建appspec.yml文件,这个文件是CodeDeploy的核心配置,用来定义部署流程和文件复制规则。以下是适配Windows和Linux实例的示例:

Windows实例示例

version: 0.0
os: windows
files:
  - source: ./publish
    destination: C:\inetpub\wwwroot\YourAppName
hooks:
  BeforeInstall:
    - location: scripts/StopIISSite.ps1
      timeout: 300
      runas: Administrator
  AfterInstall:
    - location: scripts/DeployApp.ps1
      timeout: 300
      runas: Administrator
  ApplicationStart:
    - location: scripts/StartIISSite.ps1
      timeout: 300
      runas: Administrator

Linux实例示例

version: 0.0
os: linux
files:
  - source: ./publish
    destination: /var/app/current
hooks:
  BeforeInstall:
    - location: scripts/stop_app.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: scripts/setup_permissions.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: scripts/start_app.sh
      timeout: 300
      runas: root

2. 编写部署钩子脚本

在项目根目录新建scripts文件夹,里面放对应操作系统的脚本文件:

Windows脚本示例(StopIISSite.ps1)

# 停止目标IIS站点
Stop-WebSite -Name "Default Web Site"
# 停止应用池(可选)
Stop-WebAppPool -Name "DefaultAppPool"

Windows脚本示例(DeployApp.ps1)

# 这里可以添加文件替换、配置文件注入等逻辑
# 比如替换appsettings.json里的数据库连接字符串
(Get-Content C:\inetpub\wwwroot\YourAppName\appsettings.json) -replace 'YOUR_DB_CONN_STRING', $env:DB_CONN_STRING | Set-Content C:\inetpub\wwwroot\YourAppName\appsettings.json

Windows脚本示例(StartIISSite.ps1)

Start-WebAppPool -Name "DefaultAppPool"
Start-WebSite -Name "Default Web Site"

Linux脚本示例(stop_app.sh)

#!/bin/bash
# 停止.NET Core应用服务
systemctl stop your-app.service

Linux脚本示例(setup_permissions.sh)

#!/bin/bash
# 设置应用目录权限
chown -R ec2-user:ec2-user /var/app/current
chmod -R 755 /var/app/current

Linux脚本示例(start_app.sh)

#!/bin/bash
# 启动.NET Core应用服务
systemctl start your-app.service

3. 调整CodePipeline构建阶段的输出

确保你的CodePipeline构建步骤(比如用CodeBuild)能正确生成.NET Core的发布包,并且把appspec.yml、scripts文件夹和publish目录一起打包成部署产物。比如在CodeBuild的buildspec.yml里添加:

phases:
  build:
    commands:
      - dotnet publish -c Release -o ./publish
artifacts:
  files:
    - '**/*'
  base-directory: '.'

4. 配置CodeDeploy与Elastic Beanstalk的关联

  • 确保你的EC2实例已经安装了CodeDeploy Agent(Windows和Linux的安装命令可以直接在AWS文档里获取,不用VS工具,也可以通过EB的.ebextensions提前配置安装)
  • 在CodeDeploy里创建应用和部署组,部署组关联到你的Elastic Beanstalk环境的EC2实例
  • 在CodePipeline的部署阶段选择CodeDeploy作为部署提供商,关联对应的应用和部署组

关键注意事项

  • IAM权限:EC2实例的IAM角色需要包含AmazonEC2RoleforAWSCodeDeploy权限,允许CodeDeploy Agent拉取部署包
  • 运行时依赖:确保EB的EC2实例已经安装了对应版本的.NET Core Runtime,也可以在部署脚本里添加安装命令(比如Windows用dotnet-install.ps1,Linux用yum/apt安装)
  • 脚本权限:Linux的脚本要添加可执行权限,比如在CodeBuild里执行chmod +x scripts/*.sh

这样一套配置下来,就能完全脱离Visual Studio的AWS工具,实现从Git拉取代码、构建到部署到EB的全自动化流程了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:07:45