
一般公開された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環境を必要に応じて起動する事が可能となります。
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) |
プロダクトを作成する
プロダクト(Products)は、AWS上に構築するサービスのまとまりです。
ポートフォリオを作成した後の画面でProductsタグのUpload new productをクリックします。
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 |
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. | サポートのコメント |
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 |
Step 4: Review
プロダクトの内容を確認して、Confirm and uploadをクリックします。
制約を設定する
ポートフォリオに対して制約(Constraints)という物を設定します。制約にはLaunchとTemplateがあり、Launchはポートフォリを起動するIAM Roleを指定して、Templateは起動時のパラメータの内容を指定できます。
Template
まずは制約をTemplateで設定します。
Select product and typeで以下の内容を選択します。
| 項目 | 設定値 |
|---|---|
| Product | Linux Desktop |
| Condtraint type | Template |
Template constraint builderでは、Descriptionにタイトルを記載して、Template constraintに以下の内容を記載しました。
インスタンスタイプをt2.microとt2.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画面のRolesでCreate New Roleをクリックします。
IAM Roleの名称をCatalogEndUserAdminとします。
Role TypeはAWS Service RolesのAmazon EC2を選択します。
アタッチするポリシーはAdministratorAccessとします。
Reviewで内容を確認してCreate Roleをクリックします。
次にService Catalogに対して、このRoleで実行できる設定を行います。
CatalogEndUserAdminRoleを選択して、一番下のEdit Trust Relationshipをクリックします。
Policyは以下のように、PrincipalでServiceにservicecatalog.us-west-2.amazonaws.comとservicecatalog.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を選択すします。
ユーザ、グループ、Roleの設定
事前準備で作成したIAMユーザEngineerを選択します。
Service Catalogを使用する
EngineerユーザでManagement ConsoleへアクセスしてService Catalogの画面へ遷移します。
プロダクトLinux Desktopを選択してLaunch productをクリックします。
Nameにはcatalog-1、バージョンは1つだけなのでv1.0を選択します。
Server sizeに起動するEC2のインスタンスタイプを設定します。制約で記述した通り、t2.microとt2.smallのみが選択可能です。
Key pairにEC2に設定するKey pairを、CIDR rangeにsshアクセスするアクセス元を設定します。
TagタブとReviewタブは何も記述せずに進めます。
しばらく待つと起動が完了してcatalog-1がAvailableになりました。
起動したStackのOutputsに表示されているPublicIPAddressに対して、sshでログインしてみます。
このようにログインできました。
$ 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を準備すれば、管理者が環境構築をせずにエンドユーザに任す運用も可能になると思います。ユーザ部門がオンデマンドで環境を用意できるので、よりアジリティがある運用が可能になるのではないでしょうか? 早く東京リージョンに来て欲しいです。


























