インスタンスユーザーデータの使用 - Amazon Elastic Compute Cloud

インスタンスユーザーデータの使用

インスタンスユーザーデータを使用してインスタンスをカスタマイズできます。インスタンスを起動すると、パラメータやスクリプトをユーザーデータとして保存できます。ユーザーデータのスクリプトは、インスタンスを起動すると実行されます。ユーザーデータはインスタンス属性として表示できます。インスタンスメタデータサービス (IMDS) を使用して、インスタンスのユーザーデータを表示することもできます。

考慮事項
  • ユーザーデータは非透過的なデータとして取り扱われ、取得時には指定したものが返されます。ユーザーデータの解釈およびそれに基づくアクションはインスタンス次第です。

  • ユーザーデータは、base64 でエンコードされている必要があります。使用しているツールまたは SDK によっては、base64 エンコードが実行される場合があります。例:

    • Amazon EC2コンソールは、base64 エンコードを実行したり、base64 エンコード入力を受け入れたりできます。

    • AWS CLI バージョン 2 は、ユーザーに対しデフォルトでバイナリパラメータの base64 エンコードを実行します。AWS CLI バージョン 1 は、ユーザーに対し --user-data パラメータの base64 エンコードを実行します。

    • AWS SDK for Python (Boto3) は、ユーザーに対し UserData パラメータの base64 エンコードを実行します。

  • ユーザーデータは raw 形式の 16 KB に制限されます (以前は base64 エンコード)。base64 エンコード後の 文字列の長さサイズ n は、ceil(n/3)*4 です。

  • ユーザーデータを取得するときにユーザーデータを base64 デコードする必要があります。インスタンスのメタデータあるいはコンソールを使用してデータを取得する場合、自動的にデコードされます。

  • インスタンスを停止してユーザーデータを変更した後に、インスタンスを起動した場合でも、更新されたユーザーデータは自動的には実行されません。Windows インスタンスでは、インスタンスを起動したとき、またはインスタンスを再起動もしくは起動するたびに、更新されたユーザーデータスクリプトが 1 回実行されるように設定を構成することができます。

  • ユーザーデータはインスタンス属性です。インスタンスから AMI を作成する場合、インスタンスのユーザーデータは AMI に含まれません。

起動時にインスタンスユーザーデータを指定する

インスタンスの起動時のユーザーデータを指定できます。コンソールの使用説明については、「起動時にインスタンスユーザーデータを指定する」を参照してください。AWS CLI を使用するの Linux の例については、「ユーザーデータと AWS CLI」を参照してください。Tools for Windows PowerShell を使用する Windows の例については、「ユーザーデータと Tools for Windows PowerShell」を参照してください。

インスタンスユーザーデータを変更する

EBS ルートボリュームを持つインスタンスのユーザーデータを変更できます。インスタンスは停止状態である必要があります。コンソールの使用説明については、「インスタンスユーザーデータの表示と更新」を参照してください。AWS CLI を使用する Linux の例については、「modify-instance-attribute」を参照してください。Tools for Windows PowerShell を使用する Windows の例については、「ユーザーデータと Tools for Windows PowerShell」を参照してください。

インスタンスからインスタンスユーザーデータを取得する

インスタンスからユーザーデータを取得するには、次の URI のいずれかを使用します。IPv6 アドレスを使用してユーザーデータを取得するには、IPv6 アドレスが有効で、インスタンスが IPv6 をサポートしているサブネットの AWS Nitro System 上に構築されたインスタンスである必要があります。

IPv4

http://169.254.169.254/latest/user-data

IPv6

http://[fd00:ec2::254]/latest/user-data

ユーザーデータのリクエストは、データをそのままの状態で返します (コンテンツタイプ application/octet-stream)。インスタンスにユーザーデータがない場合、リクエストは 404 - Not Found を返します。

例: カンマ区切りテキストの取得

この例では、カンマ区切りテキストで指定されたユーザーデータを取得しています。

cURL

IMDSv2

[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,

IMDSv1

[ec2-user ~]$ curl http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,
PowerShell

IMDSv2

PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,

IMDSv1

PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} ` -Method PUT -Uri http://169.254.169.254/latest/api/token} -Method GET -uri http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,
例: スクリプトの取得

この例では、スクリプトで指定されたユーザーデータを取得しています。

cURL

IMDSv2

[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data #!/bin/bash yum update -y service httpd start chkconfig httpd on

IMDSv1

[ec2-user ~]$ curl http://169.254.169.254/latest/user-data #!/bin/bash yum update -y service httpd start chkconfig httpd on
Powershell

IMDSv2

PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/user-data <powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

IMDSv1

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/user-data <powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

お使いのコンピュータからインスタンスのユーザーデータを取得する

自分のコンピュータからインスタンスのユーザーデータを取得できます。コンソールの使用説明については、「インスタンスユーザーデータの表示と更新」を参照してください。AWS CLI の使用例については、「ユーザーデータと AWS CLI」を参照してください。Tools for Windows PowerShell の使用例については、「ユーザーデータと Tools for Windows PowerShell」を参照してください。