AWS CDKでアカウント用AWSオーガニゼーションを作成する方法

AWSオーガニゼーションを使用すると、複数のAWSアカウントを作成および管理することができます。これにより、環境を分離したり、請求を統合したり、AWSサービスのポリシーを有効にしたり、バックアップやタグ付けを行ったりすることができます。AWSアカウントを組織単位(Organizational Unit)に分類して階層構造を組織化することも可能です。

この記事を書いている時点では、AWSオーガニゼーションを管理するための異なるソリューションが存在します。AWS CloudFormationにはまだ対応しておらず、AWS CDKでもサポートされていません。幸いなことに、AWS CDK Custom Resources モジュールが存在し、AWSオーガニゼーションAPIを基にしたカスタムAWS CloudFormationリソースを簡単に作成できます。

projencdk-organizations の助けを借りて、AWS CDKで初めてのAWSオーガニゼーションを作成する手順を紹介します。必要なのはすでに作成されたAWSアカウントが別のAWSオーガニゼーションのメンバーや管理アカウントになっていないことだけです。

準備

  1. 既存のアカウントを使用するか新しいアカウントを作成します:サインアップ
  2. AdministratorAccess権限を持つIAMユーザーを準備します:管理グループの作成
  3. AccessKeyを作成して保存します:アクセスキーの作成
  4. AWS CLIを設定します:設定の基本

プロジェクトの作成

  • 新しいCDK TypeScriptアプリプロジェクトを作成します
mkdir my-organization
cd my-organization
npx projen new awscdk-app-ts --projenrc-ts=true
const project = new awscdk.AwsCdkTypeScriptApp({
  //...
  deps: ["@pepperize/cdk-organizations"],
});
  • 新しい依存関係をインストールします
npx projen

AWSアカウントをAWSオーガニゼーションに変える

このステップバイステップガイドを簡単にするために、リソースをsrc/main.tsにプログラム的に追加します。後でリファクタリングすることもできます。

  • src/main.tsに新しいスタックを追加します
import { App, Stack } from "aws-cdk-lib";

const app = new App();
const stack = new Stack();
  • AWSオーガニゼーションを作成します

スタックにOrganization構造を追加します

import { Organization } from "@pepperize/cdk-organizations";
import { App, Stack } from "aws-cdk-lib";

const app = new App();
const stack = new Stack();

const organization = new Organization(stack, "Organization");

AWSアカウントは新しく作成されたAWSオーガニゼーションの管理アカウントになります。デフォルトでは、後でアカウントにポリシーを添付するのに必要なオーガニゼーションのすべての機能が有効になっています。Organizationコンストラクタは、逐次的なアカウント作成も処理します。

初めてのメンバーアカウントを作成する

import { Account, Organization } from "@pepperize/cdk-organizations";
import { App, Stack } from "aws-cdk-lib";

const app = new App();
const stack = new Stack();

const organization = new Organization(stack, "Organization");
const account = new Account(stack, "FirstMember", {
  accountName: "first-member",
  email: "your-email+first-member@example.com",
});

このアカウントは自動的に組織のメンバーになり、組織のルートの直接の子になります。

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/aws-builders/how-to-create-an-aws-organization-for-your-account-with-the-aws-cdk-58pi