1

ユーザーデータ内のPowershellコマンドを使用してEC2 Windowsインスタンスをブートストラップしようとしています。私は、ユーザーのデータを介して実行しようとしている手順は次のとおりです。EC2 Windowsユーザーデータ:Powershellが期待どおりに実行されない

  • S3からPowerShellスクリプトをダウンロードするAWS CLI
  • 使用AWS CLIをインストールする
  • 使用chocolateyのPythonをインストールするchocolatey
  • 使用chocolateyをインストールします。 PowerShellスクリプト

は、ユーザデータが非常に簡単です

  • ラン:

    <powershell> 
    Set-ExecutionPolicy Bypass -Force; 
    iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')); 
    choco install python3 -y; 
    choco install awscli -y 
    
    refreshenv 
    
    $BootstrapScript = (Join-Path $env:TEMP "NewBootstrap.ps1") 
    & aws s3api get-object --bucket my-bucket-name --key bootstrap/WindowsBootstrap.ps1 "$BootstrapScript" 
    
    iex "$BootstrapScript" 
    </powershell> 
    

    ブートストラップスクリプトは決してダウンロードまたは実行されません。インスタンスにログオンしてログを見ると、出力には何か不思議なことが起こっているようです。

    • ログの先頭には、'aws' is not recognized as the name of a cmdletというエラーがあります。なぜこのエラーはaws cliをインストールしようとする前にすべきですか?
    • その後the term 'C:\Users\Administrator\AppData\Local\Temp\NewBootstrap.ps1' is not recognized as the name of a cmdlet, function, script file。もう一度 - このファイルを取得しようとする前に、このエラーが発生するのはなぜですか?
    • ログには、実際にというchoco、python、awscliがが正しくインストールされていることが示されています。

    実行の順番に何が起こっているのか分かりません。私がボックスにログインし、C:\Windows\Tempに含まれている全く同じユーザーデータスクリプトを実行すると、期待どおりに完全に実行されます。

    これを理解したり、デバッグするのに役立つことは、最も高く評価されます。いくつかのチョコ出力とC:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.logから

    出力は、簡潔にするために省略さ

    2017/11/06 12:11:49Z: Userdata execution begins 
    2017/11/06 12:11:49Z: Zero or more than one <persist> tag was not provided 
    2017/11/06 12:11:49Z: Unregistering the persist scheduled task 
    2017/11/06 12:11:54Z: Zero or more than one <runAsLocalSystem> tag was not provided 
    2017/11/06 12:11:54Z: Zero or more than one <script> tag was not provided 
    2017/11/06 12:11:54Z: Zero or more than one <powershellArguments> tag was not provided 
    2017/11/06 12:11:54Z: <powershell> tag was provided.. running powershell content 
    2017/11/06 15:13:42Z: Userdata execution begins 
    2017/11/06 15:13:42Z: Zero or more than one <persist> tag was not provided 
    2017/11/06 15:13:42Z: Unregistering the persist scheduled task 
    2017/11/06 15:13:54Z: Zero or more than one <runAsLocalSystem> tag was not provided 
    2017/11/06 15:13:54Z: Zero or more than one <script> tag was not provided 
    2017/11/06 15:13:54Z: Zero or more than one <powershellArguments> tag was not provided 
    2017/11/06 15:13:55Z: <powershell> tag was provided.. running powershell content 
    2017/11/06 15:16:11Z: Userdata: is currently executing. To end it kill the process with id: 2828 
    2017/11/06 15:17:40Z: Message: The errors from user scripts: & : The term 'aws' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the 
    spelling of the name, or if a path was included, verify that the path is correct and try again. 
    At C:\Windows\TEMP\UserScript.ps1:15 char:3 
    + & aws s3api get-object --bucket my-bucket-name --key bootstra ... 
    + ~~~ 
        + CategoryInfo   : ObjectNotFound: (aws:String) [], CommandNotFoundException 
        + FullyQualifiedErrorId : CommandNotFoundException 
    
    C:\Users\Administrator\AppData\Local\Temp\NewBootstrap.ps1 : The term 
    'C:\Users\Administrator\AppData\Local\Temp\NewBootstrap.ps1' is not recognized as the name of a cmdlet, function, 
    script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is 
    correct and try again. 
    At line:1 char:1 
    + C:\Users\Administrator\AppData\Local\Temp\NewBootstrap.ps1 
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
        + CategoryInfo   : ObjectNotFound: (C:\Users\Admini...ewBootstrap.ps1:String) [], CommandNotFoundException 
        + FullyQualifiedErrorId : CommandNotFoundException 
    
    
    2017/11/06 15:17:40Z: Message: The output from user scripts: This is the new bootstrap 
    
    Mode    LastWriteTime   Length Name                 
    ----    -------------   ------ ----                 
    d-----  11/6/2017 3:14 PM    chocInstall               
    Getting latest version of the Chocolatey package for download. 
    Getting Chocolatey from https://chocolatey.org/api/v2/package/chocolatey/0.10.8. 
    
    ... Chocolatey Install output ... 
    
    Chocolatey (choco.exe) is now ready. 
    You can call choco from anywhere, command line or powershell by typing choco. 
    Run choco /? for a list of functions. 
    You may need to shut down and restart powershell and/or consoles 
    first prior to using choco. 
    Ensuring chocolatey commands are on the path 
    Ensuring chocolatey.nupkg is in the lib folder 
    Installing awscli 
    Chocolatey v0.10.8 
    Installing the following packages: 
    python3 
    
    
    .. Python Download/Install output ... 
    
    Download of python-3.6.3-amd64.exe (30.16 MB) completed. 
    Hashes match. 
    Installing python3... 
    python3 has been installed. 
    Installed to 'C:\Python36' 
        python3 can be automatically uninstalled. 
    Environment Vars (like PATH) have changed. Close/reopen your shell to 
    see the changes (or in powershell/cmd.exe just type `refreshenv`). 
    The install of python3 was successful. 
        Software installed as 'EXE', install location is likely default. 
    
    Chocolatey installed 1/1 packages. 
    See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log). 
    Chocolatey v0.10.8 
    Installing the following packages: 
    awscli 
    
    .. AWS CLI Download/Install output ... 
    
    The install of awscli was successful. 
        Software installed as 'msi', install location is likely default. 
    
    Chocolatey installed 1/1 packages. 
    See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log). 
    Refreshing environment variables from registry for cmd.exe. Please wait...Finished.. 
    
    2017/11/06 15:17:40Z: Userdata execution done 
    
  • 答えて

    0

    問題クラウドinitプロセスの一部としてインストールする場合、PowerShellプロファイルがChocolateyをインポートするために失敗したということでした。これは、パッケージがchoco installを経由して罰金をインストールすることを意味しますが、あなたはrefreshenvを呼び出す場合でも、環境で利用できるようにされていない(したがってawsへの私の呼び出しは、それが正常にインストールされていても失敗しました。)

    を手動で強制することができます。この問題を解決するにはPowershellはあなたのPowershellプロファイルを編集してChocolateyモジュールをインポートします。

    # Updated profile content to explicitly import Choco 
    $ChocoProfileValue = @' 
    $ChocolateyProfile = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1" 
    if (Test-Path($ChocolateyProfile)) { 
        Import-Module "$ChocolateyProfile" 
    } 
    '@ 
    
    # Write it to the $profile location 
    Set-Content -Path "$profile" -Value $ChocoProfileValue -Force 
    
    # Source it 
    . $profile 
    

    あなたはchocolatey troubleshooting guide

    にこの詳細を読むことができます
    関連する問題