2016-04-26 17 views
1

カスタムAMIからec2インスタンスを作成するときに、ユーザーデータボックスからPowerShellスクリプトを実行しようとしています。 amiを作成する前にconfigでユーザーデータの実行を有効にしました。AWS EC2上のPowerShellユーザーデータスクリプトのトラブルシューティングを行うにはどうすればよいですか?

これは私がそれを呼び出しているスクリプトを以下に示したユーザデータ

<powershell> 
c:\scripts\github-download.ps1 someuser somepassword 
</powershell> 

に入れるものです。

Param($gituser, $gitpass) 
C:\Users\Administrator\AppData\Local\GitHub\shell.ps1 
git clone https://"$gituser":"$gitpass"@github.com/somegitrepo |out-null 

なぜこれが機能しないのかわかりません。ここで何か間違っているのですか?どのような助け本当に感謝します。

+0

実際にこの問題を解決するには詳細が不十分です。どのようにインスタンスにユーザーデータを渡していますか(Console/CLI?base64エンコードされていますか?詳細はすべてここをクリックしてください)。インスタンスはインターネットと対話するように構成されていますか?このスクリプトでExecutionPolicyをRemoteSignedとして設定して、他のスクリプトを実行できることを確認しましたか?詳細は 'C:\ Program Files \ Amazon \ Ec2ConfigService \ Logs \ Ec2ConfigLog.txt'でec2設定ログを確認しましたか?スクリプト自体にログインしようとしましたか? –

+0

何が起こっているのかを見ることができるので、コマンドを 'out-null'しないでください。 gitバイナリの作業セットがありますか? –

+0

あなたは私の答えを試す機会を得ましたか? –

答えて

0

| out-nullは、gitクローンで起こっている可能性のあるエラーをすべて無音にするので、エラーのパイプを別の場所に送るか、| out-nullを使用しない限り、何が間違っているのかわからないでしょう。

ユーザーデータを使用して何かを自動化しようとする前に、| out-nullのないEC2インスタンスで手動でコマンドを実行します。

3

<powsershell>タグを使用してユーザーデータを呼び出す代わりに、<script>タグを使用してPowerShellを呼び出します。スクリプトの最初と最後のセクションでは、以下のようにスクリプトで

<script> 
    PowerShell -ExecutionPolicy Bypass -NoProfile -File c:\scripts\github-download.ps1 -user USER -password PASSWORD 
</script> 

、セットアップ:

# Server script called from userdata in this format 
# <script> 
# PowerShell -ExecutionPolicy Bypass -NoProfile -File c:\scripts\github-download.ps1 -user USER -password PASSWORD 
# </script> 

param (
    [string]$user = $(throw "-user is required."), 
    [string]$password = $(throw "-password is required."), 
) 
Start-Transcript -Path C:\userscriptlog.txt 
Import-Module WebAdministration 
if ([System.Diagnostics.EventLog]::SourceExists("Userdata") -eq $False) { 
    New-Eventlog -Logname Application -Source 'Userdata' 
} 
Write-Eventlog -Logname Application -Source 'Userdata' -EventId 1 -EntryType Information -Message 'Begining post-deployment configuration script' 

-- YOUR MAIN SCRIPT HERE -- 

Write-Eventlog -Logname Application -Source 'Userdata' -EventId 1 -EntryType Information -Message 'Post-deployment configuration script complete' 
Stop-Transcript 
あなたは、その呼び出しを超えるコマンドライン制御を獲得し、直接実行ポリシーおよびその他のコマンドライン設定を制御することができます

スクリプトでエラー処理を行うには、トラブルシューティングとデバッグを容易にするために、各コマンドにロバストな例外処理とロギングを使用する必要があります。このブロックは、単に現在のインスタンスIDを取得しますが、内蔵の例外処理とロギングの点に注意してください。

# get instance-id 
try { 
    $InstanceId = (Invoke-WebRequest http://169.254.169.254/latest/meta-data/instance-id).content 
} catch { 
    $_.Exception.message | out-file c:\InstanceId_error.log 
    Write-Host "FATAL: InstanceId exception" 
    Exit  
} 

if (!$InstanceId) { 
    Write-Host "FATAL: InstanceId is null" 
    Exit  
} else { 
    $InstanceId | out-file C:\InstanceId.txt 
    Write-Host "InstanceId: $InstanceId"  
} 

あなたが実装する必要がある任意のコマンドやシェル呼び出しへのアプローチを試してみてください。

ユーザデータスクリプト用のこのpowershellスクリプト「ラッパー」は、オプションのコマンドラインパラメータを許可し、実行記録を作成し、Windowsイベントログにイベントを記録してスクリプトの基本実行を確認します。

Powershellベースのユーザーデータスクリプトに柔軟なフレームワークを提供し、簡単なデバッグとテストが可能です。

関連する問題