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

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more