如何解决无法在Terraform中使用user_data执行AWS CLI命令
我正在使用Terraform来启动一个EC2实例,其中已定义了一些user_data。在user_data中,我下载了AWS CLI并设置了配置文件和凭证文件。然后,我想从s3存储桶中获取一个文件。这是我到目前为止写的:
data "template_file" "scripts" {
template = <<EOF
<powershell>
$dlurl = "installpathtoawscli.msi"
$installerPath = Join-Path $env:TEMP (Split-Path $dlurl -Leaf)
Invoke-WebRequest $dlurl -OutFile $installerPath
Start-Process -FilePath msiexec -Args "/i $installerPath /passive" -Verb RunAs -Wait
mkdir C:\temp
New-Item -Name 'b.bat' -Path 'C:\temp' -Value 'aws s3 cp s3://mybucketname/myfile.extension C:\temp\extension > C:\temp\test.txt'
New-Item -Name 'a.bat' -Path 'C:\Users\Administrator' -Value 'mkdir C:\Users\Administrator\.aws
echo [default]>> C:\Users\Administrator\.aws\credentials
echo aws_access_key_id = MY_ACCESS_KEY>> C:\Users\Administrator\.aws\credentials
echo aws_secret_access_key = MY_SECRET_KEY>> C:\Users\Administrator\.aws\credentials
echo [default]>> C:\Users\Administrator\.aws\config
echo region = MY_REGION>> C:\Users\Administrator\.aws\config
echo output = MY_OUTPUT>> C:\Users\Administrator\.aws\config'
C:\Users\Administrator\a.bat
C:\temp\b.bat
</powershell>
EOF
}
b.bat被执行并创建了一个txt文件,但是它是空的,并且没有文件从s3存储桶中获取。如果我尝试手动执行(通过RDPing到实例),它将获取文件。任何想法为什么会这样?
解决方法
经过几天的尝试,我找到了解决方案。
AWS.exe位置尚未在PATH环境中注册。重新启动命令提示符就可以解决问题,但是Terraform无法做到这一点,从而解释了为什么在我手动操作时它可以工作。
我必须提供AWS.exe的完整路径,以使其正常运行,例如C:\ Program Files \ Amazon \ AWSCLI \ bin \ aws.exe或C:\ Program Files \ Amazon \ AWSCLIV2 \ aws.exe,具体取决于AWS CLI的版本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。