Amazon Web Services ブログ
東京大学 松尾・岩澤研究室主催の AI エンジニアリング実践講座にて、1400 名を超える受講者に AWS 上でのクラウド開発を体験していただきました [ 後片づけ編 ]
本ブログは、東京大学松尾・岩澤研究室が主催する AI エンジニアリング実践講座において、AWS を活用した講座の取り組みをご紹介する、AWS との共同寄稿です。
はじめに
本ブログシリーズでは、2025 年 4 月から 7 月にかけて実施した東京大学 松尾・岩澤研究室の AI エンジニアリング実践講座において、 AWS クラウドを活用した実践的な学習環境を用意し、1400 名を超える受講申し込み者に対して、個別のAWSアカウントを提供する大規模なオンライン講義を開講した取り組みを全 3 回に分けてまとめたものです。
- [準備、構築編] 講義に参加する受講生に AWS アカウントを準備し、受講者情報と紐づける
- [演習、運用編] それぞれの AWS アカウントに適切な権限を配布し、提供期間中管理/運用する
- [後片づけ編] 講義終了後に、適切にアカウントをクリーンアップする(本ブログ)
最初の[準備、構築編]では、講義で利用する AWS アカウントを作成し、申し込みがあった受講者のメールアドレスと紐づけるところを解説しました。
前回の[演習、運用編]では、受講生の使う AWS アカウントに対して権限の適用と管理方法について説明しました。今回は、環境の後片付けの実施方法とそこで得た知見について共有します。
環境の後片付け
講義終了後、環境の後片付けを実施しました。
まずは受講者の権限を外すために、IAM Identity Center にて、ユーザーの削除を aws identitystore delete-user コマンドにて行いました。これにより受講者は環境へのログインができなくなりました。
次に、演習用アカウントの後片付けを行います。後片付けとしては、提供したAWSアカウントを閉鎖するのがもっとも確実な方法ですが、AWS Organizations の制限として、「 30 日以内に閉鎖できるアカウントの数」が「組織内のメンバーアカウントの 10% 」となっており、すべてのアカウントを閉鎖するには何ヶ月もの時間が必要で現実的ではありません。加えて、今回の講座は今後も実施する予定があるため、再利用のためにアカウントは残しつつ、費用がかからないようにアカウント内の全てのリソースを削除する方式をとりました。リソースの全削除にはソリューションアーキテクトにご紹介頂いた aws-nuke という OSS を利用しました。aws-nuke はコマンド一つで対象のAWSアカウントに存在するリソースを全て削除することができる非常に強力なツールです。今回はこちらを利用して演習で利用したすべての子アカウントのリソースを全て削除し、次回以降も再利用可能な状態で保持しています。
aws-nuke実行の具体的手順
以降は aws-nuke を利用するために具体的に実施した手順となります。
- 作業ユーザーに各アカウントの Administrator 権限を付与する
- 全アカウントにアクセスするための .aws/config を作成する
- すべての削除対象のアカウントにアカウントエイリアスを設定する
- aws-nuke で使用する nuke-config.yaml を作成する
- SCP を修正し
ec2:DescribeRegionsを実行できるようにする - aws-nuke を実行し、全ての演習アカウントの全てのリソースを削除する
それぞれの手順についてより詳細に説明していきます。
1. 作業ユーザーに各アカウントの Administrator 権限を付与する
各アカウントで削除を行える権限として Administrator 権限を付与しました。IAM Identity Center のユーザーに対して、Administrator 権限を設定した許可セットを作成し、aws sso-admin create-account-assignment コマンドにてすべての演習アカウントへの権限付与を実施しました。このとき、セッション時間も 12 時間などに長めに設定しておくと aws-nuke 実行時にセッションが切れず安心なので設定しておきましょう。
2. 全アカウントにアクセスするための .aws/config を作成する
aws-nuke を利用するためには AWS Profile の指定が必要です。各アカウントの Profile をそれぞれ下記のように作成し、aws sso login を実施するのみで全アカウントにアクセスできるように設定しました。
[profile lecture-practical-ai-engineering-weblab-XXXX-admin]
sso_session = lecture-ai-engineering-weblab
sso_account_id = xxxxxxxxxxxx
sso_role_name = AdministratorAccess
region = us-east-1
output = json
3. すべての削除対象のアカウントにアカウントエイリアスを設定する
aws-nuke を利用するためには対象のアカウントにアカウントエイリアスが設定されていることが必須要件となっていました。そこで、先ほど作成した Profileと aws iam create-account-alias コマンドを利用して、すべてのアカウントにエイリアスを設定しました。
4. aws-nuke で使用する nuke-config.yaml を作成する
aws-nuke は実行時に config ファイルを必ず指定し、対象のアカウントが削除許可のものかどうか、削除対象のリソースは何かなどを確認した上で実行する仕組みになっています。今回は下記のように config を作成しています。
regions:
- all
blocklist:
- "XXXXXXXXXXXX" # lecture-practical-ai-engineering-weblab
presets:
common:
filters:
IAMRole:
- "OrganizationAccountAccessRole"
IAMRolePolicyAttachment:
- "OrganizationAccountAccessRole → AdministratorAccess"
resource-types:
includes:
- APIGatewayAPIKeyLister
- APIGatewayAPIKey
...
accounts:
XXXXXXXXXXXX: # 0000
presets:
- common
XXXXXXXXXXXX: # 0001
presets:
- common
...
bypass-alias-check-accounts:
- XXXXXXXXXXX
- XXXXXXXXXXX
...
それぞれについてポイントを説明すると、
- regions については今回 SCP 側で特に制限を設定しなかったので
allを指定しています。削除の作業時間を考えると、次回以降は SCP にて region を制限し、対象を限定する形に改善を検討しています。 - presetsとして、IAM Identity Center で作成される OrganizationAccountAccessRole と
OrganizationAccountAccessRole → AdministratorAccessの PolicyAttachment を除外する設定を作成しています。これを除外しないと、IAM Identity Center 経由でのログイン等ができなくなってしまうので必ず filters で除外するようにしましょう。各アカウントの filters の設定を適用するために presets として定義し、各アカウント全てに反映されるようにaccountsの指定でpresets: [common]を設定しています。 - resource-types については数が多いので省略しますが、今回 SCP で除外したサービス以外の全てを含むように記載しました。
- bypass-alias-check-accounts に全ての対象のアカウントを記載しています。これは aws-nuke の実行時に確認プロンプトを skip するための設定で、今回はスクリプトにて大量のアカウントに対する自動実行を行うために設定をしています。
5. SCP を修正し ec2:DescribeRegions を実行できるようにする
aws-nuke 実行時に、ec2:DescribeRegionsの権限が必要なため ec2:* を全て拒否していた SCP を修正する必要がありました。
6. aws-nuke を実行し、全ての演習アカウントの全てのリソースを削除する
いよいよ削除の実行ですが、単体のアカウントに対して実行する場合は下記のようになります。
$ ./aws-nuke nuke -c config/nuke-config.yaml --profile lecture-practical-ai-engineering-weblab-XXXX-admin --no-alias-check --no-prompt --no-dry-run
ここで --no-alias-check --no-prompt --no-dry-run は確認なしで削除を実行するオプションとなるため、利用の際には十分に注意して実行する必要があります。aws-nuke には事故を起こさないためのいくつもの機能が備わっていますが、さらなる安全のため実行時の端末側の aws config は削除対象のアカウントのみしか設定されていない状態にして作業を実施しました。
実行時間ですが、削除リソースがない場合は大体 1 ~ 2 分、削除リソースがある場合は 5 ~ 7 分程度の時間が実績としてかかりました。
大規模並列実行
今回は大量のアカウントに対して aws-nuke を実行する必要があるため、ローカル環境内で並列実行することにしました。aws-nuke 自体は大きくリソースを使用するものではないので、筆者の MacBook Pro では 12 並列にしても大きな問題なく実行できました。もし大量に実施する際はご参考いただければと思います。
実際に使用したスクリプトはこちらになります。
#!/bin/bash
START=0
END=1424
N_PARALLEL=12 # 並列数をここで指定
TOTAL=$((END - START + 1))
CHUNK_SIZE=$((TOTAL / N_PARALLEL))
for i in $(seq 0 $((N_PARALLEL - 1))); do
RANGE_START=$((START + i * CHUNK_SIZE))
if [ "$i" -eq $((N_PARALLEL - 1)) ]; then
RANGE_END=$END
else
RANGE_END=$((RANGE_START + CHUNK_SIZE - 1))
fi
echo "並列処理 $((i+1)): ${RANGE_START} ~ ${RANGE_END}"
(
for ACCOUNT_NO in $(seq $RANGE_START $RANGE_END); do
ACCOUNT_NAME=$(printf "%04d\n" ${ACCOUNT_NO})
echo ./aws-nuke nuke -c config/nuke-config.yaml --profile lecture-practical-ai-engineering-weblab-${ACCOUNT_NAME}-admin --no-alias-check --no-prompt --no-dry-run
# ▼処理を実行し、失敗したらログに記録
if ! time ./aws-nuke nuke -c config/nuke-config.yaml --profile lecture-practical-ai-engineering-weblab-${ACCOUNT_NAME}-admin --no-alias-check --no-prompt --no-dry-run; then
echo "FAILED: ${ACCOUNT_NO}" >> "error_${i}.log"
fi
done
) > "output_${i}.log" 2>&1 &
done
wait
echo "全ての並列処理が終了しました"
失敗パターンと対処法
上記実行後、2 つのパターンで削除が失敗したものがあるため、その対処についても記載しておきます。
- AWS CloudFormation (Cfn) 実行用 Role が先に削除されてしまって Stack が削除できなくなりエラーとなる
(ValidationError: Role arn:aws:iam::xxxxx:role/cdk-xxxxxxxxx-cfn-exec-role-xxxxxxxxxx-us-east-1 is invalid or cannot be assumed)
→ 手動で Role 作成して Stack を削除する必要がある - 削除保護が有効なリソースがありエラーとなる
(deletion protection is activated)
→ ユーザーが最終課題で作成したリソースに Amazon Cognito が設定されており、手動で解除する必要があった
以上の手順を踏むことで、全ての演習用アカウントから全てのリソースを削除することができました。削除後はコストエクスプローラにて、対象のアカウントで費用が発生していないことを持って最終確認としました。
次回以降の実施に向けて
今回は初回かつ短期間での準備であったため、コストやセキュリティ、構築時のリスクを低減できるようにシンプルかつ不確実性の低い構成を選択しました。結果として大きな問題なく短期間かつ低コストで環境を提供することができましたが、利用できるサービスを一部制限するなどの安全に倒した形での運用となりました。次回以降では、管理側の仕組み(コストアラート/自動停止等のガードレールの構築など)をより充実させることでサービス制限の緩和などに取り組みたいと考えています。
なお、本対応を実施後に AWS から Innovation Sandbox on AWS という一時的に利用するAWSアカウントを発行する仕組みのテンプレートが AWS solutions で公開されました。用意されたテンプレートを展開することで、AWSのサービスを組み合わせたソリューションを展開して特定の機能が利用ができる仕組みです。 Innovation Sandbox on AWS では、AWS アカウント管理者が一時利用 AWS アカウントの利用期間や金額条件等を設定し、利用者が申請して設定された条件の範囲ならばセルフサービスで AWS アカウントを一時利用できる仕組みを簡単に提供できるとのことです。このソリューションが我々の要件にマッチするかはまだ確認できていませんが、アカウントごとのコスト制限を設けられる点がとても魅力的なので、次回の実施の際はぜひ追加で検証してみたいと考えています。
まとめ
今回の東京大学松尾研究室でのデータサイエンス講座における AWS 環境を活用した大規模演習は、以下の点で大きな成果を上げました。
- 大規模クラウド環境の教育活用
1400 名もの参加者に対し、個別の AWS アカウントを提供することで、実践的なクラウド環境での学習機会を創出しました。従来の小規模・単発の講義とは異なり、多数の受講者が同時にクラウドリソースにアクセスできる環境を構築したことは、教育におけるクラウド活用の新たなモデルケースとなりました。 - 最新技術の実践的学習
サーバレスアーキテクチャを中心とした最新のクラウド技術と生成AIの組み合わせにより、次世代のアプリケーション開発手法を体験的に学習する機会を提供しました。特に、Amazon Bedrock を活用したチャットボット開発は、AI とクラウドの融合を実践的に理解する貴重な経験となりました。 - 大規模ユーザー管理の実践
IAM Identity Center と AWS Organizations を活用した大規模ユーザー管理の実践例を確立しました。この知見は、今後の同様の教育プログラムや大規模クラウド環境の管理に応用可能です。 - セキュリティとコスト管理の両立
適切な権限設定とサーバレスアーキテクチャの採用により、セキュリティリスクとコスト管理を両立させることができました。特に、不要なサービスへのアクセス制限などの工夫は、教育環境におけるクラウド利用の重要なノウハウとなりました。 - 理論と実践の融合
講義と演習を組み合わせることで、クラウドとAIの理論的理解と実践的スキルの両方を習得できる学習体験を提供しました。リアルタイムとオンデマンドの両方の受講形態を用意したことで、多様な学習スタイルに対応できました。
今回の取り組みでは、従来の教室内での限定的な演習環境から脱却し、実際のクラウド環境で最新技術に触れる機会を提供することができました。このような理論と実践を融合させた学習体験が、受講者のスキル習得に大きく貢献し、将来の IT 人材育成に向けた重要なステップとなることを期待します。
今後の課題は、さらに多様なクラウドサービスを取り入れたカリキュラムの開発や、より効率的な環境構築・管理手法の確立が挙げられます。このような大規模クラウド環境を活用した教育プログラムは、次世代のAIエンジニア育成において重要な役割を果たせると考えられます。
松尾・岩澤研究室では、今回ご紹介したAIエンジニアリング実践講座だけでなく、様々な先進的な講座を開講しています。年間を通じて受講生を募集しており、2014 年から提供するAI講座の累計受講者数が 75,000 人を突破しました(2025年6月時点)。各講座はオンライン講義が中心なので、全国どこからでも参加可能です。大学生・大学院生だけでなく、中学生・高校生・高専生・専門学校生・短大生でも無料で参加できます。また、社会人の方が募集できる講座も用意しております。現在募集中の講座一覧はこちらとなりますので、ぜひご確認ください。
執筆者
Hideaki Masuda 増田 英晃
東京大学大学院 工学系研究科 松尾・岩澤研究室
Saori Yagyu 柳生 さおり
アマゾン ウェブ サービス ジャパン合同会社
パブリックセクター教育事業本部 アカウントエグゼクティブ
Naoya Funazashi 篙 直矢
アマゾン ウェブ サービス ジャパン合同会社
パブリックセクター技術統括本部 ソリューションアーキテクト
Kei Sasaki 佐々木 啓
アマゾン ウェブ サービス ジャパン合同会社
パブリックセクター技術統括本部 シニアソリューションアーキテクト