C# Windows计划任务未使用EC2过帐到S3存储桶

C# Windows计划任务未使用EC2过帐到S3存储桶,c#,amazon-web-services,amazon-s3,amazon-ec2,windows-server-2012-r2,C#,Amazon Web Services,Amazon S3,Amazon Ec2,Windows Server 2012 R2,我看到的问题就是这里发生的事情: 但是,我还没有使用过Powershell,我宁愿在不学习如何使用的情况下完成这项工作 我已经使用Windows Schedule计划了一个任务,在Windows Server的EC2实例启动时运行(由CloudWatch触发器启动)。该任务启动一个控制台应用程序,该应用程序应该从GoogleSheet中提取数据,将其写入RSS JSON文件,然后将其上传到S3 bucket 当实例启动并且+I登录时,一切正常。任务运行,控制台应用程序运行,S3 bucket项更

我看到的问题就是这里发生的事情:

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

我已经使用Windows Schedule计划了一个任务,在Windows Server的EC2实例启动时运行(由CloudWatch触发器启动)。该任务启动一个控制台应用程序,该应用程序应该从GoogleSheet中提取数据,将其写入RSS JSON文件,然后将其上传到S3 bucket

当实例启动并且+I登录时,一切正常。任务运行,控制台应用程序运行,S3 bucket项更新

但是,当(我在S3 bucket中看到最新修改日期是我上次登录时)未登录时,这不起作用,但我知道任务正在运行(显示在计划任务的历史日志中)

该实例附加了一个IAM角色以实现对S3的完全访问

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

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

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


建议?

我建议使用NLog()之类的库添加日志记录

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


一旦您确定代码的哪一部分不起作用,就可以更容易地给出建议。

AWS CLI将帐户配置文件存储在用户配置文件中,当您注销时,它无法从用户配置文件加载,因此在您的情况下,登录到系统是您的方法的一项要求。您可以对其进行更改,将帐户配置文件存储在不同的位置并加载不会有问题,我建议您在此处检查:

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


事实证明,由于该应用程序是ClickOnce应用程序,因此在通过任务调度器启动时有非常特殊的规则。本质上,将任务调度器指向应用程序的快捷方式……如果您没有,任务调度器将告诉您任务已成功完成,即使应用程序本身从未运行过

见:


不起作用
太模糊。您在哪里存储/获取aws帐户的凭据?aws帐户的访问和密钥位于console应用程序的app.config文件中。我选中了“以最高权限运行”,但没有解决问题。请参阅更新的帖子。我将尝试CLI方法,但我很惊讶这是必需的。任务计划程序设置似乎应该涵盖这一点。通常情况下,它不是必需的,这取决于您是如何实现的,通常您不需要操作系统级访问升级来使用S3。顺便问一下,你是否知道hangfire:或类似的工具,它可能会让你的生活更轻松。。
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);
  <appSettings>
    <add key="AWSAccessKey" value="****" />
    <add key="AWSSecretKey" value="****" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>