2

我正在使用 Amazon Linux 2 EC2 实例在 Elastic Beanstalk 上运行 ASP.NET Core 3.1 应用程序。我需要我的应用程序能够生成 QR 码,为此我正在使用 QRCoder 库。它可以在我的 Windows 机器上开箱即用,但要让它在 Amazon Linux 2 机器上运行,我必须通过 SSH 运行以下命令:

sudo amazon-linux-extras install epel
sudo yum install libgdiplus

运行这些命令后,还需要重新启动 EB 应用程序服务器才能生成图像。

我尝试通过.ebextensions/install_gdi.config在我的应用程序 repo 根目录中创建具有以下内容的文件来编写脚本:

commands:
  00_install_extras:
    command: amazon-linux-extras install -y epel
  01_install_gdi:
    command: yum install -y libgdiplus

我重建了我的 Beanstalk 环境以重新部署新的 EC2 实例版本,并且似乎 EB 扩展配置文件没有做任何事情。在我通过 SSH 连接并在 EC2 实例上手动运行这些命令之前,仍然无法生成图像。

我读到有其他方法可以为 Amazon Linux 2 自动配置实例,但我无法找到好的示例来探索诸如预部署钩子和 Buildfile 之类的东西,而且似乎 EB 扩展是这项工作的正确工具案子。

我的应用程序使用与 GitHub 存储库挂钩的 AWS CodePipeline 部署到 Elastic Beanstalk。

4

2 回答 2

1

我尝试使用 Amazon Linux 2 在 EB 上复制commands该问题,但您的工作非常好。我使用的是 Python 平台,而不是 .NET,但由于两者都基于 AL2,我不明白为什么它们在这方面会有所不同。

要进行故障排除,您可以通过 ssh 进入您的 EB 实例,或从控制台下载 EB 日志并检查/var/log/cfn-init-cmd.loginstall_gdi.config它应该有关于执行的细节。

为了比较,我附上我的输出:

2020-08-30 05:34:52,631 P3617 [INFO] Command 01_install_gdi
2020-08-30 05:35:08,423 P3617 [INFO] -----------------------Command Output-----------------------
2020-08-30 05:35:08,423 P3617 [INFO]    Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
2020-08-30 05:35:08,423 P3617 [INFO]    http://csc.mcs.sdsmt.edu/epel/7/x86_64/repodata/0e811d5e2eb547161695f97c2fb8c2eaa0ccfe0ba7125321404db90dab5af5b3-updateinfo.xml.bz2: [Errno 12] Timeout on http://csc.mcs.sdsmt.edu/epel/7/x86_64/repodata/0e811d5e2eb547161695f97c2fb8c2eaa0ccfe0ba7125321404db90dab5af5b3-updateinfo.xml.bz2: (28, 'Operation too slow. Less than 1000 bytes/sec transferred the last 5 seconds')
2020-08-30 05:35:08,423 P3617 [INFO]    Trying other mirror.
2020-08-30 05:35:08,423 P3617 [INFO]    200 packages excluded due to repository priority protections
2020-08-30 05:35:08,423 P3617 [INFO]    Resolving Dependencies
2020-08-30 05:35:08,424 P3617 [INFO]    --> Running transaction check
2020-08-30 05:35:08,424 P3617 [INFO]    ---> Package libgdiplus.x86_64 0:2.10-10.el7 will be installed
2020-08-30 05:35:08,424 P3617 [INFO]    --> Processing Dependency: libXrender.so.1()(64bit) for package: libgdiplus-2.10-10.el7.x86_64
2020-08-30 05:35:08,424 P3617 [INFO]    --> Processing Dependency: libcairo.so.2()(64bit) for package: libgdiplus-2.10-10.el7.x86_64
2020-08-30 05:35:08,424 P3617 [INFO]    --> Processing Dependency: libexif.so.12()(64bit) for package: libgdiplus-2.10-10.el7.x86_64
2020-08-30 05:35:08,424 P3617 [INFO]    --> Processing Dependency: libgif.so.4()(64bit) for package: libgdiplus-2.10-10.el7.x86_64
#
# more logs
#
2020-08-30 05:35:08,433 P3617 [INFO]
2020-08-30 05:35:08,433 P3617 [INFO]    Installed:
2020-08-30 05:35:08,434 P3617 [INFO]      libgdiplus.x86_64 0:2.10-10.el7
2020-08-30 05:35:08,434 P3617 [INFO]
#
# more logs
#
2020-08-30 05:35:08,435 P3617 [INFO]    Complete!
2020-08-30 05:35:08,435 P3617 [INFO] ------------------------------------------------------------
2020-08-30 05:35:08,435 P3617 [INFO] Completed successfully.

于 2020-08-30T05:49:30.480 回答
1

问题出在我的buildspec.yml文件上。

它曾经看起来像这样,并且它没有将.ebxtensions文件夹包含到发布工件文件夹中:

version: 0.2

phases:
  build:
    commands:
      - dotnet publish WebApi.csproj -c Release
artifacts:
  files:
    - bin/Release/netcoreapp3.1/publish/*
  discard-paths: yes

我把它改成这样,它现在可以工作了:

version: 0.2

phases:
  build:
    commands:
      - dotnet publish WebApi.csproj -c Release
artifacts:
  files:
    - '**/*'
  base-directory: bin/Release/netcoreapp3.1/publish
于 2020-08-30T23:23:56.017 回答