Service Catalogを使った運用を考えてみた
はじめに
こんにちは。
くコ:彡がトレードマークの阿部です。
AWS Service Catalogを使った運用とその手順を考えてみました。
AWS Service Catalogとは?
AWS Service Catalogは組織としてのガバナンスが適用された製品を、AWS利用者であるユーザー部門が早く簡単に立ち上げる事ができるサービスです。
Service Catalogは、CloudFormationテンプレートを[製品]としてインポートする事が出来ます。
CloudFormationテンプレートには、多くのAWSサービスの構成情報を記載できます。
これにより、スタンプを押すように統一的な環境を作成する事が出来ます。
管理部門は製品とその設定(制約、アクセス許可)をポートフォリオとして登録します。
マスタAMIの更新やNW設定等の変更があった場合は、新しいバージョンとして製品を登録します。
ユーザ部門はポートフォリオから、必要な製品をバージョンを指定して起動します。
製品はCloudFormationスタックとして作成されます。
管理部門、ユーザ部門にはそれぞれどのようなメリットがあるのでしょうか。
ユーザ部門にとっては、製品を起動するだけで環境が出来上がるメリットがあります。
管理理部門にとっては、インスタンスタイプなど一定の制限を与えつつ、製品の起動や削除をユーザ部門に委任する事が出来ます。
また、インスタンスの命名規則やセキュリティグループのルールや適用方法など、統一的な環境を作ってもらうことが可能です。
CloudFormationを単体で使う場合はAWSリソースを作成する権限が必要ですが、Service Catalogでは、起動制約を使う事で権限がなくても環境を作成する事が出来ます。
ユーザ部門が利用するIAMユーザにはService Catalogを利用する権限を与えます。
AWSリソースを作成する権限は、Service Catalogに割り当てられたIAMロールが引き受けます。
ServiceCatalogを使った運用
ServiceCatalogを使った運用と手順について考えてみました。
AWSアカウントの作成
ユーザー部門はプロジェクト毎にAWSアカウントを発行するものとします。
マスターAMIの作成
管理部門はEC2をローンチしソフトウェアをセットアップします。
セットアップが完了したらマスタAMIを作成し、ユーザー部門のAWSアカウントに共有します。
CloudFormationテンプレートの作成
CloudFormationテンプレートを作成します。
テンプレート中のEC2インスタンス(AWS::EC2::Instanceリソース)では、マスタAMIを指定します。
ポートフォリオの作成と製品のアップロード
ポートフォリオの作成
AWSマネージメントコンソールから、Service Catalog画面にアクセスします。
[ポートフォリオの作成]を選択し、Web Server製品を登録するWeb Systems
というポートフォリオを作成しました。
ポートフォリオ名 | Web Systems |
説明 | (空欄) |
所有者 | 情報管理部 |
新しい製品のアップロード
作成したポートフォリオを選択し、[新しい製品のアップロード]を選択します。
先ほど作成したポートフォリオWeb Systems
にWebServers ELB, 2 Instances
という製品をアップロードします。
製品名 | WebServers ELB, 2 Instances |
短い説明 | AmazonLinux,Apache |
説明 | AmazonLinux,Apache |
提供元 | 情報管理部 |
ベンダー | (空欄) |
製品のサポート情報を入力します。
製品ページをwiki等で準備している場合は、サポートリンクが活躍しそうです。
連絡先 E メール | (空欄) |
サポートリンク | (空欄) |
サポートの説明 | (空欄) |
CloudFormationテンプレートをアップロードまたは、s3にアップロードした際のパスを指定します。
バージョンはフリーフォーマットで指定します。
テンプレートの選択 | テンプレートのアップロード/s3 URLの指定 |
バージョンタイトル | v1.0 |
説明 | BASE Version |
インスタンスタイプの制約
指定できるインスタンスタイプを制限します。
CloudFormationでは、環境作成時にParameters
部に記載された内容を指定する事が出来ます。
検証用のテンプレートでは、インスタンスタイプを指定するWebServerInstanceType
を記載しました。
{ "Parameters": { "WebServerInstanceType": { "Description": "", "Type": "String" } } }
[制約の追加]を選択し、製品WebServers ELB, 2 Instances
とタイプ:テンプレートを選択します。
ServiceCatalogの制約機能では、テンプレート形式で制約を設定することが出来ます。
WebServerInstanceType
の値をt2.nano
とt2.micro
のみに制限しました。
{ "Rules": { "Rule1": { "Assertions": [ { "Assert": { "Fn::Contains": [ [ "t2.nano", "t2.micro" ], { "Ref": "WebServerInstanceType" } ] }, "AssertDescription": "Instance type should be either t2.nano or t2.micro" } ] } } }
他のAWSアカウントとの共有
製品を別のAWSアカウントのユーザーが利用できるようにするには、ポートフォリオを該当のAWSアカウントに共有します。
アカウントの追加を選択し、共有するAWSアカウントIDを指定します。
ポートフォリオをインポートするための、URLが表示されます。
URLは後ほど使うため、控えておきます。
管理部門のアカウントで行う作業は以上です。
共有された側の作業
共有されたポートフォリオの確認
共有された側(ユーザー部門のアカウント)ではAWSマネジメントコンソールにログインし、インポートURLにアクセスします。
一度インポートしてしまえば、以降は[インポートされたポートフォリオ]から、確認出来ます。
製品と製品バージョン、テンプレートの制約は継承されます。
インポート時の挙動は、AWS Service Catalog 管理者ガイドをご覧下さい。
アクセス許可
製品を起動する権限を与えます。
[ユーザー、グループ、またはロールの追加]を選択します。
検証では、Administrators
グループを選択しました。
起動制約を使えば、最小限の権限を持ったユーザーやグループを指定出来ます。
製品の起動
Administrators
グループのユーザでService Catalogコンソールに接続します。
[Service Catalog]>[エンドユーザー]を選択します。
製品を選択し、[製品の起動]を選択します。
Provisioned productでは、スタック名を入力します。
製品バージョンを指定し、次へを選択します。
CloudFormationのパラメーター入力に移ります。
インスタンスタイプにt2.nano、t2.micro以外を入力すると、エラーになります。
制約が効いている事がわかります。
タグと通知については、デフォルトのままとしました。[作成する]を選択すると、製品が作成されます。
製品の確認
Provisioned productsにて、利用可能になるのを待ちます。
Provisioned product details画面では、CloudFormationのOutput
を確認出来ます。
作成された環境情報(インスタンスIDやElastic IPアドレス等)を確認する事が出来ます。
環境情報は、EC2画面から確認する形でも問題ありません。
初期環境構築はService Catalogを使って、設定変更はEC2画面から行うような運用もあり得るかと思います。
Service Catalogを導入する際は、「誰がいつ何をするのか」「誰にどんな権限を与えるのか」をよく検討する必要がありそうです。
バージョン管理
製品のバージョンアップを行う手順を確認しましょう。
CloudFormationテンプレートのアップデート
マスタAMIの更新やVPC設定など更新が必要になった場合、CloudFormationテンプレートを更新します。
新しいバージョンの登録
管理部門のアカウントで、テンプレートを新しいバージョンとして登録します。
ユーザー部門のアカウントでポートフォリオを確認すると、新しいバージョンの製品を確認出来ます。
バージョンの更新が、共有されたポートフォリオに反映される事がわかりました。
参考
- AWS Service Catalog 管理者ガイド
- AWS Solutions Architect ブログ - AWS Black Belt Tech Webinar 「AWS Service Catalog」資料公開
おわりに
CloudFormationはAWSリソースをテンプレート化する事で、スタンプを押すように同様の環境を作成する事が出来ます。
AWS Service Catalogは、CloudFormationの機能に加えて、[制約][起動制約][アクセス制御][製品のバージョン管理]を利用できます。
検証では、ポートフォリオを共有しインスタンスタイプの制約が適用されること、テンプレートの更新と登録で製品のバージョン管理を行える事を確認しました。
では、また!