Service Catalogを使った運用を考えてみた

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

はじめに

こんにちは。
くコ:彡がトレードマークの阿部です。

AWS Service Catalogを使った運用とその手順を考えてみました。

AWS Service Catalogとは?

AWS Service Catalogは組織としてのガバナンスが適用された製品を、AWS利用者であるユーザー部門が早く簡単に立ち上げる事ができるサービスです。

Service Catalogは、CloudFormationテンプレートを[製品]としてインポートする事が出来ます。
CloudFormationテンプレートには、多くのAWSサービスの構成情報を記載できます。
これにより、スタンプを押すように統一的な環境を作成する事が出来ます。

管理部門は製品とその設定(制約、アクセス許可)をポートフォリオとして登録します。
マスタAMIの更新やNW設定等の変更があった場合は、新しいバージョンとして製品を登録します。

概要

ユーザ部門はポートフォリオから、必要な製品をバージョンを指定して起動します。
製品はCloudFormationスタックとして作成されます。

管理部門、ユーザ部門にはそれぞれどのようなメリットがあるのでしょうか。
ユーザ部門にとっては、製品を起動するだけで環境が出来上がるメリットがあります。
管理理部門にとっては、インスタンスタイプなど一定の制限を与えつつ、製品の起動や削除をユーザ部門に委任する事が出来ます。
また、インスタンスの命名規則やセキュリティグループのルールや適用方法など、統一的な環境を作ってもらうことが可能です。

概要2


CloudFormationを単体で使う場合はAWSリソースを作成する権限が必要ですが、Service Catalogでは、起動制約を使う事で権限がなくても環境を作成する事が出来ます。
ユーザ部門が利用するIAMユーザにはService Catalogを利用する権限を与えます。
AWSリソースを作成する権限は、Service Catalogに割り当てられたIAMロールが引き受けます。

ServiceCatalogを使った運用

ServiceCatalogを使った運用と手順について考えてみました。

AWSアカウントの作成

ユーザー部門はプロジェクト毎にAWSアカウントを発行するものとします。

シナリオ0

マスターAMIの作成

管理部門はEC2をローンチしソフトウェアをセットアップします。
セットアップが完了したらマスタAMIを作成し、ユーザー部門のAWSアカウントに共有します。

シナリオ1

CloufFormationテンプレートの作成

CloudFormationテンプレートを作成します。
テンプレート中のEC2インスタンス(AWS::EC2::Instanceリソース)では、マスタAMIを指定します。

シナリオ2

ポートフォリオの作成と製品のアップロード

ポートフォリオの作成

AWSマネージメントコンソールから、Service Catalog画面にアクセスします。
[ポートフォリオの作成]を選択し、Web Server製品を登録するWeb Systemsというポートフォリオを作成しました。

ポートフォリオの作成
ポートフォリオ名 Web Systems
説明 (空欄)
所有者 情報管理部

新しい製品のアップロード

作成したポートフォリオを選択し、[新しい製品のアップロード]を選択します。
先ほど作成したポートフォリオWeb SystemsWebServers 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.nanot2.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を指定します。

3

ポートフォリオをインポートするための、URLが表示されます。
URLは後ほど使うため、控えておきます。

4

管理部門のアカウントで行う作業は以上です。

共有された側の作業

共有されたポートフォリオの確認

共有された側(ユーザー部門のアカウント)ではAWSマネジメントコンソールにログインし、インポートURLにアクセスします。
一度インポートしてしまえば、以降は[インポートされたポートフォリオ]から、確認出来ます。

5

製品と製品バージョン、テンプレートの制約は継承されます。
インポート時の挙動は、AWS Service Catalog 管理者ガイドをご覧下さい。

アクセス許可

製品を起動する権限を与えます。
[ユーザー、グループ、またはロールの追加]を選択します。

6

検証では、Administratorsグループを選択しました。
起動制約を使えば、最小限の権限を持ったユーザーやグループを指定出来ます。

7

製品の起動

AdministratorsグループのユーザでService Catalogコンソールに接続します。
[Service Catalog]>[エンドユーザー]を選択します。

8

製品を選択し、[製品の起動]を選択します。

9

Provisioned productでは、スタック名を入力します。
製品バージョンを指定し、次へを選択します。

10

CloudFormationのパラメーター入力に移ります。
インスタンスタイプにt2.nano、t2.micro以外を入力すると、エラーになります。
制約が効いている事がわかります。

11

タグと通知については、デフォルトのままとしました。[作成する]を選択すると、製品が作成されます。

製品の確認

Provisioned productsにて、利用可能になるのを待ちます。
Provisioned product details画面では、CloudFormationのOutputを確認出来ます。
作成された環境情報(インスタンスIDやElastic IPアドレス等)を確認する事が出来ます。

12

環境情報は、EC2画面から確認する形でも問題ありません。
初期環境構築はService Catalogを使って、設定変更はEC2画面から行うような運用もあり得るかと思います。
Service Catalogを導入する際は、「誰がいつ何をするのか」「誰にどんな権限を与えるのか」をよく検討する必要がありそうです。

バージョン管理

製品のバージョンアップを行う手順を確認しましょう。

CloudFormationテンプレートのアップデート

マスタAMIの更新やVPC設定など更新が必要になった場合、CloudFormationテンプレートを更新します。

シナリオ4

新しいバージョンの登録

管理部門のアカウントで、テンプレートを新しいバージョンとして登録します。
13

ユーザー部門のアカウントでポートフォリオを確認すると、新しいバージョンの製品を確認出来ます。
バージョンの更新が、共有されたポートフォリオに反映される事がわかりました。

14

参考

おわりに

CloudFormationはAWSリソースをテンプレート化する事で、スタンプを押すように同様の環境を作成する事が出来ます。
AWS Service Catalogは、CloudFormationの機能に加えて、[制約][起動制約][アクセス制御][製品のバージョン管理]を利用できます。
検証では、ポートフォリオを共有しインスタンスタイプの制約が適用されること、テンプレートの更新と登録で製品のバージョン管理を行える事を確認しました。
では、また!