組織単位(OU)を CloudFormation で更新した際の動作を確認してみた

2022.12.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、大前です。

先日のアップデートで、Organizations の組織単位(OU)を CloudFormation で管理できる様になりました。

上記アップデートを利用して CloudFormation で管理している OU に対して更新を行った際にどういった動作になるのか、また Control Tower に取り込んでいる OU へ影響はあるのか、などを調べてみましたので、ブログに残したいと思います。

先にまとめ

  • CloudFormation で管理できるパラメータは、OU 名 / 親 OU / タグ の 3つ
  • 親 OU を更新する場合は OU の再作成が発生する
    • 子アカウントなどが存在すると失敗
    • 削除 → 再作成 となるため、Control Tower への登録状況も解除される
  • OU 名とタグについては、置換なしで更新可能
  • CloudFormation にて作成した OU を Control Tower に取り込む場合はコンソール等で別途作業が必要

やってみた

CloudFormation で OU を新規作成する

まずは以下の CloudFormation テンプレートを利用し、OU を新規作成してみます。ParentId に指定している r-xxxxx は Root を示しています。

AWSTemplateFormatVersion: "2010-09-09"
Description: "Create OU"

Resources:
  Ou01:
    Type: AWS::Organizations::OrganizationalUnit
    Properties: 
      Name: TestOU_01
      ParentId: r-xxxxx
      Tags: 
        - Key: Name
          Value: TestOU_01


CloudFormation のスタックを作成すると、以下の様に Root 直下に OU が作成されたことが確認できます。


Control Tower 側でも作成した OU が確認できます。あくまで Organizations 側のリソースとして OU を作成しているので、Control Tower には未登録の状態となります。


動作確認のため、作成した OU の配下にアカウントを 1つ新規作成しておきます。

CloudFormation で作成した OU を Control Tower に登録してみる

作成した OU を Control Tower に登録してみます。


少し待機し、OU が問題なく Control Tower に登録されました。CloudFormation で作成した OU でも問題なく Control Tower に登録できることがわかりました。


Control Tower 登録済みの OU の 親OU を CloudFormation から変更してみる

作成した OU が Control Tower に登録されている状態で、以下の様に CloudFormation テンプレートを更新し、変更セットを作成してみます。ParentId に OU を移動させたい OU の ID を指定する様にしています。

AWSTemplateFormatVersion: "2010-09-09"
Description: "Create OU"

Resources:
  Ou01:
    Type: AWS::Organizations::OrganizationalUnit
    Properties: 
      Name: TestOU_01
      ParentId: ou-xxxx-xxxx #ここを変更
      Tags: 
        - Key: Name
          Value: TestOU_01


変更セットを作成したところ、"置換" が True になっていることが確認できます。


上記の変更セットについて実行まで行うと、下記のようにスタック更新が失敗しました。エラーメッセージと、変更セット作成画面で "置換" が True になっていたことからも、OU を再作成しようとして失敗している様に見えます。

子アカウントがない OU を用意し、親OU の更新を行ってみる

もう少し動作を確認するため、子アカウントのない OU を 2つ、先ほどと同様に CloudFormation を利用して作成しました。また、片方は Control Tower に登録しておきます。(画像内の TestOU_02 が Control Tower に登録した OU)


この状態で、先ほどと同様に ParentId を更新するテンプレートで変更セットを作成したところ、両方とも "置換" が True となりました。子アカウントの有無や Control Tower への登録状況に関わらず、親OU を変更しようとすると OU の再作成が発生する様です。


子アカウントがないため、上記変更セットは無事更新が実行できました。スタックの更新後に OU を確認すると、共に Control Tower の登録状況が "未登録" に戻っていました。これは OU 自体を再作成したため、Control Tower の登録状況もリセットされた、ということで良さそうです。

OU名やタグを更新してみる

親OU ではなく、OU名とタグを更新するようなテンプレートで変更セットを作成してみたところ、"置換" は False であることが確認できました。OU名やタグの更新であれば OU の再作成なしで更新がかけられる様です。


再作成が発生しないため、変更セットを利用してスタックを更新しても、Control Tower への登録状況はそのままでした。

おわりに

CloudFormation で OU を管理する場合に、OU に対する更新を実施した場合の動作について調べてみました。

CloudFormation を使えば OU の移動なども良い感じにできるのでは、と淡い期待を抱いていたりしましたが、動作的には再作成となる様なので、後から OU の階層を変更するような用途にはあまり使えなさそうです。

今回のアップデートで OU の管理を CloudFormation で実施しようとされている方がいるかもしれませんので、少しでもお役に立てば幸いです。

以上、AWS 事業本部の大前でした。

参考