DEV Community

Cover image for EC2インスタンス作成時にホスト名変更&AD参加する(RunCommand編)
ryanc
ryanc

Posted on

3 3

EC2インスタンス作成時にホスト名変更&AD参加する(RunCommand編)

前回のUserData編に続き、達成したい目的は同じく下記のままで、

①(AWS Managed ADではない)ADに参加
②ホスト名を、自分がつけたNameタグの値に揃える

やり方をUserDataではなくもうちょっと柔軟なSystems Manager RunCommandを利用する方法を試していこうと思う。

Systems Managerを利用すると、もちろんできることの幅は非常に広がるのだが、その代わりSSMエージェントのインストールとインスタンスプロファイルの設定等、必要条件を満たす必要はある(Amazon提供のAMIならエージェントは最初から入っているので楽)。



インスタンスプロファイルに必要なIAM権限と、シークレットマネージャーへのADユーザー認証情報の登録等は前回同様なので省略する。



Systems Managerの「ドキュメント」を開き、「Create Document」からCommand or sessionタイプを選択する。

image



ドキュメントの詳細はこんな感じで作成する。

image

ドキュメントタイプはコマンドドキュメントになる。



肝心なコマンドのコンテンツだが、前回のPowerShellスクリプトをそのまま流用して、大事そうなパラメータが指定できるようにだけ少し手を入れてYAML形式にしてみた。

---
schemaVersion: "2.2"
description: "Join AD and rename host with instance tag"
parameters:
  DomainName:
    type: "String"
    description: "参加するADドメインのDNS名"
  UserCredentialSecretID:
    type: "String"
    description: "AD参加に利用するユーザー認証情報を保持するSecrets ManagerシークレットID"
  HostnameTag:
    type: "String"
    description: "ホスト名を定義するタグ名(デフォルトはName)"
    default: "Name"
mainSteps:
- action: "aws:runPowerShellScript"
  name: "example"
  inputs:
    runCommand:
    - $secretManager = Get-SECSecretValue -SecretId {{UserCredentialSecretID}}
    - $secret = $secretManager.SecretString | ConvertFrom-Json
    - $username = $domainName + "\" + $secret.Account
    - $password = $secret.Password | ConvertTo-SecureString -AsPlainText -Force
    - $credential = New-Object System.Management.Automation.PSCredential($username,$password)
    - $instanceID = Get-EC2InstanceMetadata -Category InstanceId
    - $nameTag = Get-EC2Tag -Filter @{Name="resource-id";Value="$instanceID"},@{Name="key";Value="{{HostnameTag}}"}
    - $newName = $nameTag.Value
    - Add-Computer -DomainName "{{DomainName}}" -NewName "$newName" -Credential $credential -Passthru -Force -Restart
Enter fullscreen mode Exit fullscreen mode

(パラメータ値は{{}}で囲む)



これで実際にRun Commandで実行する際には、こんな感じでパラメータを指定できるしEC2インスタンスの初回起動時じゃなくてもいつでも実行でき、たくさんのインスタンスに対しても一気に実行できるので一気に柔軟性が増す。

image

一々パラメータ設定が面倒であれば、デフォルト値をセットしてしまえば良し。



実際にやってみたが問題なく動作した。

image

今回は以上。次Chef好き向けにOpsWorksでやってみようかと思う。



※イラストはこちらからご提供いただきました:
Computer vector created by macrovector - www.freepik.com

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay