一般公開されたAWS Service Catalogを試してみた

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

ウィスキー、シガー、パイプをこよなく愛する大栗です。

昨夜開催されたAWS Summit NewYorkでAWS Service Catalogの一般公開されました。昨年のre:Inventで発表されて以来、個人的に心待ちにしていたサービスなので早速試してみました。

AWS Service Catalog ?

AWS Service Catalogは、昨年11月に開催されたre:Invent 2014で発表されたサービスで、以下のような機能を提供するサービスです。

  • IT管理部門向けには、CloudFormationのテンプレートとして管理されるAWSリソース定義や、これらの利用権限をカタログとして一元管理する機能を提供します。
  • ユーザ部門ではIT管理部門が作成したカタログより、求める機能に応じたAWS環境を必要に応じて起動する事が可能となります。

Catalog

Service Catalogの利点は?

Service Catalogには大きく2つの利点があります。

  • CloudFormationのテンプレートの管理が可能
  • 環境を構築する権限がなくてもプロダクトを起動できる

CloudFormationのテンプレートの管理が可能

複数のCloudFormationテンプレートをポートフォリオとして、まとめて管理ができ、バージョン管理まで行えます。そのため常に最新のテンプレートを柔軟にエンドユーザに提供できます。

環境を構築する権限がなくてもプロダクトを起動できる

通常CloudFormationを起動するためには、テンプレートが提供するリソースを全て作成できる権限が必要になります。IAM Role付きのEC2を起動するためにはIAM権限が必要になります。そのため操作を誤ると環境を破壊できてしまいます。 しかし、Service Catalogの制約でLaunchを設定すると、ログインユーザに構築する権限がなくてもAWS環境一式を構築できます。これは運用統制上エンドユーザには直接CloudFormationを起動することを許可できない場合もあったと思います。Service CatalogでCloudFormationを起動することで安全にAWS環境を構築できるようになります。

Service Catalogの設定を行う

事前準備

エンドユーザ用のIAMユーザを作成します。使用するIAM PolicyはServiceCatalogEndUserです。 ユーザ名はEngineerとしました。

ポートフォリオを作成する

ポートフォリオ(Portfolio)は、Service Catalogでエンドユーザが構築する構成情報の集まりです。エンドユーザの役割単位などで作成します。

項目 設定値
Portfolio name Engineering Tools
Description Sample portfolio that contains a single product.
Owner IT (it@example.com)

Catalog

プロダクトを作成する

プロダクト(Products)は、AWS上に構築するサービスのまとまりです。

ポートフォリオを作成した後の画面でProductsタグのUpload new productをクリックします。

Catalog

Step 1: Enter product details

プロダクトの詳細を記述します。例として以下の様に記載します。

項目 設定値
Product name Linux Desktop
Short description Cloud development environment.
Description Cloud development environment configured for engineering staff. Runs AWS Linux.
Provided by IT
Vendor

Catalog

Step 2: Enter support details

エンドユーザのサポート先の情報を記載します。例として以下の様に記載します。

項目 設定値 備考
Email contact ITSupport@example.com 問い合わせ先のメールアドレス
Support link https://wiki.example.com/IT/support 問い合わせ情報があるWebサイトのURL
Support description Contact the IT department for issues deploying or connecting to this product. サポートのコメント

Catalog

Step 3: Select package

構築する内容のCloudFormationテンプレートを登録します。

項目 設定値 備考
Select template https://awsdocs.s3.amazonaws.com/servicecatalog/development-environment.template テンプレートをアップロードするかURLを指定します|本URLはService Catalogのサンプルテンプレート
Version title v1.0
Description Base Version

Select_template

Step 4: Review

プロダクトの内容を確認して、Confirm and uploadをクリックします。

Catalog

制約を設定する

ポートフォリオに対して制約(Constraints)という物を設定します。制約にはLaunchTemplateがあり、Launchはポートフォリを起動するIAM Roleを指定して、Templateは起動時のパラメータの内容を指定できます。

Template

まずは制約をTemplateで設定します。 Select product and typeで以下の内容を選択します。

項目 設定値
Product Linux Desktop
Condtraint type Template

Catalog

Template constraint builderでは、Descriptionにタイトルを記載して、Template constraintに以下の内容を記載しました。 インスタンスタイプをt2.microt2.smallに制限しています。

{
  "Rules": {
    "Rule1": {
      "Assertions": [
        {
          "Assert" : {"Fn::Contains": [["t2.micro", "t2.small"], {"Ref": "InstanceType"}]},
          "AssertDescription": "Instance type should be t2.micro or t2.small"
        }
      ]
    }
  }
}

TagタブとReviewタブは何も記述せずに進めます。

Launch

次は制約をLaunchで設定しますが、IAM Roleの作成が必要です。IAM Roleの作成から始めます。

IAM画面のRolesCreate New Roleをクリックします。 IAM Roleの名称をCatalogEndUserAdminとします。

IAM_Management_Console

Role TypeはAWS Service RolesAmazon EC2を選択します。

IAM_Management_Console

アタッチするポリシーはAdministratorAccessとします。

IAM_Management_Console

Reviewで内容を確認してCreate Roleをクリックします。

次にService Catalogに対して、このRoleで実行できる設定を行います。 CatalogEndUserAdminRoleを選択して、一番下のEdit Trust Relationshipをクリックします。

IAM_Management_Console

Policyは以下のように、PrincipalでServiceにservicecatalog.us-west-2.amazonaws.comservicecatalog.us-east-1.amazonaws.comを追加します。これでオレゴンとバージニアのService CatalogからRoleで実行できます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "servicecatalog.us-west-2.amazonaws.com",
          "servicecatalog.us-east-1.amazonaws.com",
          "ec2.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ここでService Catalogに戻ります。先ほどのポートフォリオの制約Upload new productをクリックします。Select product and typeで以下の内容を選択します。

項目 設定値
Product Linux Desktop
Condtraint type Launch

Launch constraintで先ほど作成したRoleであるCatalogEndUserAdminを選択すします。

Launch_constraint

ユーザ、グループ、Roleの設定

事前準備で作成したIAMユーザEngineerを選択します。

Catalog

Service Catalogを使用する

EngineerユーザでManagement ConsoleへアクセスしてService Catalogの画面へ遷移します。 プロダクトLinux Desktopを選択してLaunch productをクリックします。

Dashboard

Nameにはcatalog-1、バージョンは1つだけなのでv1.0を選択します。

Launch_product

Server sizeに起動するEC2のインスタンスタイプを設定します。制約で記述した通り、t2.microt2.smallのみが選択可能です。 Key pairにEC2に設定するKey pairを、CIDR rangeにsshアクセスするアクセス元を設定します。

Launch_product

TagタブとReviewタブは何も記述せずに進めます。

しばらく待つと起動が完了してcatalog-1がAvailableになりました。

Dashboard

起動したStackのOutputsに表示されているPublicIPAddressに対して、sshでログインしてみます。

Stack_details

このようにログインできました。

$ ssh -i ./.aws/keypair/cm-oguri-XXXX-XXXX.pem ec2-user@XX.XX.XX.XX
Warning: Permanently added 'XX.XX.XX.XX' (RSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
28 package(s) needed for security, out of 129 available
Run "sudo yum update" to apply all updates.
Amazon Linux version 2015.03 is available.
$

さいごに

CloudFormationで構築できるサービスであればService Catalogで管理ができるようになります。AWS管理者がCloudFormationを準備すれば、管理者が環境構築をせずにエンドユーザに任す運用も可能になると思います。ユーザ部門がオンデマンドで環境を用意できるので、よりアジリティがある運用が可能になるのではないでしょうか? 早く東京リージョンに来て欲しいです。