AWS Cloudformation Windows 2016 EC2 S3 静默安装

问题描述

我使用 CloudFormation 创建了架构,使用 Windows 2016 EC2 服务器和 S3,以 JSON 编写。我有 7 个可执行文件上传到我的 S3 存储桶。一旦我远程进入 EC2,我就可以从 Powershell for AWS 提示中手动静安装所有内容。我可以一次完成一个,甚至可以将它放在一个 .ps1 文件中,然后在 Powershell for AWS 中运行它,并且它可以正常运行。

我现在尝试在创建 EC2 实例时静安装它。我就是做不到,我不明白为什么。 JSON 代码看起来正确。如您所见,我首先从 S3 存储桶下载所有内容,切换到下载所有内容的 c:\TEMP 目录,然后以无人参与安装模式运行可执行文件。我的 CloudFormation 模板中没有任何错误。它运行“成功”。问题是什么都没有发生。这是权限问题吗?欢迎和感谢任何帮助。谢谢!

在 AWS::EC2::Instance 部分下,我的 UserData 部分看起来像这样(我缩短了下面的可执行文件名称):

    "UserData" : { "Fn::Base64" : { "Fn::Join" : ["",[
        "<powershell>\n","copy-S3Object -BucketName mySilentInstallBucket -KeyPrefix * -LocalFolder c:\\TEMP\\","\n","cd c:\\TEMP\\","firefox.exe -S ","notepadpp.exe /S","Git.exe /SILENT","</powershell>"
    ]]}}

解决方法

此故障排除文档将涵盖您可能无法连接到 S3 的各种原因:https://aws.amazon.com/premiumsupport/knowledge-center/ec2-instance-access-s3-bucket/

要从您的 EC2 实例连接到您的 S3 存储桶,您需要执行 以下内容:

  1. 创建一个 AWS Identity and Access Management (IAM) 配置文件角色,授予对 Amazon S3 的访问权限。

  2. 将 IAM 实例配置文件附加到实例。

  3. 验证您的 S3 存储桶的权限。

  4. 验证从 EC2 实例到 Amazon S3 的网络连接。

  5. 验证对 S3 存储桶的访问。

CloudFormation 模板不会因为 UserData 执行异常而失败。