Windows 计划任务未使用 EC2 发布到 S3 存储桶

Windows Scheduled Task Not Posting to S3 Bucket using EC2

我看到的问题与此处发生的情况非常相似:https://forums.aws.amazon.com/thread.jspa?threadID=246123&tstart=0

但是,我还没有使用过 Powershell,我宁愿在不需要学习如何使用的情况下完成这项工作。

当 Windows 服务器的 EC2 实例启动时(由 CloudWatch 触发器启动),我已使用 Windows 调度到 运行 来安排任务。该任务启动一个控制台应用程序,该应用程序应该从 GoogleSheet 中提取数据,将其写入 RSS JSON 文件,并将其上传到 S3 存储桶。

当实例启动并+我登录+时,一切正常。任务 运行 秒、控制台应用程序 运行 秒和 S3 存储桶项目已更新。

当(我在 S3 存储桶中看到最新修改日期是我上次登录的时间)没有登录时,这不起作用,但是,但我知道任务是 运行ning(显示在计划任务的历史日志中)。

该实例附加了一个 IAM 角色以进行完整的 S3 访问。

控制台应用程序是 C# 应用程序。它使用 AmazonS3Config() 方法:

AmazonS3Config config = new AmazonS3Config();
            var awsAccessKey = ConfigurationManager.AppSettings["AWSAccessKey"];
            var awsSecretKey = ConfigurationManager.AppSettings["AWSSecretKey"];
            AmazonS3Client client = new AmazonS3Client(awsAccessKey, awsSecretKey, RegionEndpoint.USEast1);
            tUtil = new TransferUtility(client);

在 App.config 中,我有 AmazonS3Config() 方法的凭据:

  <appSettings>
    <add key="AWSAccessKey" value="****" />
    <add key="AWSSecretKey" value="****" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>

任务计划程序设置:

除上述内容外,我还仔细按照 this 视频中的说明进行操作。该应用程序不再检查 app.config 文件中的密钥,而是来自 EC2 实例本身。但这并没有解决问题。

建议?

我建议使用像 NLog 这样的库添加日志记录 (https://github.com/NLog/NLog/wiki/Tutorial)

在关键执行区域向您的应用程序添加大量信息日志记录,以及任何异常的错误输出。

一旦您准确确定了代码的哪一部分不起作用,就可以更轻松地提出建议。

AWS CLI 在用户配置文件中存储帐户配置文件,当您注销时它无法从用户配置文件加载,因此在您的情况下登录系统是您的方法的要求。可以更改,将帐户资料存储在不同的地方并加载它不会有问题,我建议您在这里查看:https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html

顺便说一句,windows 任务计划程序中有几个复选框,以便您在不登录的情况下 运行 获得任务,请注意这一点。 此外,将管理员用户设置为任务不足以获得最高级别的权限,您需要选中提升的权限复选框。

此致...

事实证明,由于该应用程序是一个 ClickOnce 应用程序,它在通过任务计划程序启动时具有非常特殊的规则。本质上,将 Task Scheduler 指向应用程序的快捷方式...如果您不这样做,即使应用程序本身从未 运行.

,Task Scheduler 也会告诉您任务已成功完成

参见:

https://www.experts-exchange.com/questions/23704196/How-to-setup-a-scheduled-task-for-a-program-deployed-with-ClickOnce.html