AWS Service Catalog
について調べたので、その時のメモ書きです。Blackbeltはこちら。
AWS Black Belt - AWS Service Catalog
Service Catalogとは
公式サイトで謳われていること。
AWS Service Catalog では、AWS での使用が承認された IT サービスのカタログを作成および管理できます。この IT サービスには、仮想マシンイメージ、サーバー、ソフトウェア、データベースから包括的な多層アプリケーションアーキテクチャまで、あらゆるものが含まれます。AWS Service Catalog では、一般的にデプロイされた IT サービスを集中管理でき、一貫性のあるガバナンスを実現し、コンプライアンス要件を満たすと同時に、ユーザーは必要な承認済みの IT サービスのみをすばやくデプロイできます。
なんのこっちゃなので、 Getting Started
を試してみます。
概念図
とりあえずの概念図。
portfolioの作成
portfolioを作成します。1件につき、$5/月かかるので注意。
> aws servicecatalog create-portfolio ^ --display-name "sample" ^ --description "sample portfolio" ^ --provider-name "admin" ^ --tags "Key=Env,Value=Dev"
AWS service catalog - create-portfolio
Productの作成
CloudFormationのテンプレートを利用して、監視したいAWSリソースを定義してあげます。サンプル用のCloudFormationテンプレートは、こちらで公開されています。
サンプルを若干変更しつつYAML形式に変更して、以下のようなテンプレートを作成しています。
AWSTemplateFormatVersion: "2010-09-09" Description: "AWS Service Catalog sample template." Parameters: KeyName: Description: "Name of an existing EC2 key pair for SSH access to the EC2 instance." Type: "AWS::EC2::KeyPair::KeyName" InstanceType: Description: "EC2 instance type." Type: String Default: "t2.micro" AllowedValues: - "t2.micro" - "t2.small" - "m3.medium" - "m3.large" SSHLocation: Description: "The IP address range that can SSH to the EC2 instance." Type: String MinLength: 9 MaxLength: 18 Default: "0.0.0.0/0" Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: "Instance configuration" Parameters: - InstanceType - Label: default: "Security configuration" Parameters: - KeyName - SSHLocation ParameterLabels: InstanceType: default: "Server size:" KeyName: default: "Key pair:" SSHLocation: default: "CIDR range:" Mappings: AWSRegionArch2AMI: "ap-northeast-1": HVM64: "ami-35072834" Resources: EC2Instance: Type: "AWS::EC2::Instance" Properties: InstanceType: !Ref InstanceType SecurityGroups: - !Ref InstanceSecurityGroup KeyName: !Ref KeyName ImageId: !FindInMap - AWSRegionArch2AMI - !Ref "AWS::Region" - HVM64 Tags: - Key: Env Value: Dev InstanceSecurityGroup: Type: "AWS::EC2::SecurityGroup" Properties: GroupDescription: "Enable SSH access via port 22" SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: !Ref SSHLocation Tags: - Key: Env Value: Dev Outputs: PublicDNSName: Description: "Public DNS name of the new EC2 instance" Value: !GetAtt EC2Instance.PublicDnsName PublicIPAddress: Description: "Public IP address of the new EC2 instance" Value: !GetAtt EC2Instance.PublicIp
Service Catalogのコンソールから、ぽちぽち作成しています。
暫くすると、Productが作成されるので、 Add product to portfolio
より作成したProductをPortfolioに追加してあげます。
Constraintsの作成
テンプレート用
上記のCloudFormationテンプレートから、m3系のEC2インスタンスでは起動できないよう、起動可能EC2インスタンスを制限するConstraintsを作成します。PortfolioのConstraintsセクションに移動して、 ADD CONSTRAINTS
をクリックします。
制約ルールとするテンプレートは、公式に記載されていたものを利用しています。ここはjsonで書かないとだめみたいです。
{ "Rules": { "Rule1": { "Assertions": [ { "Assert" : {"Fn::Contains": [["t2.micro", "t2.small"], {"Ref": "InstanceType"}]}, "AssertDescription": "Instance type should be t2.micro or t2.small" } ] } } }
Step 5: Add a Template Constraint to Limit Instance Size
テンプレートの書き方はこちら。assert構文を作っているイメージでしょうか。
launch用
ServiceCatalogを操作する利用者のIAMポリシーと、ServiceCatalogによりAWSリソースが作成されるIAMポリシーを、分離することができます。
まず、ServiceCatalogで利用するIAMロールを作成します。以下のIAMポリシーと、 AmazonEC2FullAccess
ポリシーを持ったServiceCatalog用ロールを作成してあげます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "catalog-user:*", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStacks", "cloudformation:GetTemplateSummary", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:UpdateStack", "s3:GetObject" ], "Resource": "*" } ] }
続いて、テンプレートの時と同様に、PortfolioのConstraintsセクションに移動して、 ADD CONSTRAINTS
をクリックします。
TagOptionの設定
TagOption
とは、作成するAWSリソースに一括でタグを設定できる機能となります。基本的に画面を見れば作成できるので、ぽちぽち作成していきます。
作成したTagOptionを、portfolio内に配置したproductに対して、TagOptionsのセクションで ADD TAGOPTION
をクリックして追加してあげます。
portfolioアクセス権をIAMユーザに付与
portfolioの Users, groups and roles
セクションにて、アクセス可能としたいIAMユーザなりグループを追加します。なお、該当IAMユーザには、最低限以下のIAMポリシーを付与しておく必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "servicecatalog:ProvisionProduct", "servicecatalog:CreateProvisioningArtifact", "servicecatalog:UpdateProvisionedProduct", "servicecatalog:UpdateProvisioningArtifact", "servicecatalog:TerminateProvisionedProduct" ], "Resource": "*" } ] }
Service CatalogによるAWSリソースの作成
上記のIAMユーザでAWSコンソールにログイン、Service Catalogのページより、今回作成したProductを作成/更新/削除できるようなっています。