[Workshop] Marketplace 製品の導入と管理を学べる「AWS Marketplace: Deploy, govern & analyze spend of third-party software」に参加しました #MKT304 #AWSreInvent
中川です。
AWS re:Invent 2024 でワークショップ「AWS Marketplace: Deploy, govern & analyze spend of third-party software」に参加してきました。
会場の雰囲気
ワークショップの時間帯が 12:00 ~ 14:00 ということもあり、会場へランチボックスを持ち込み昼食を取りながら参加している方が多かったです。
ワークショップの概要
- セッション ID:MKT304
- タイトル:AWS Marketplace: Deploy, govern & analyze spend of third-party software
- スピーカー:Joseph Shih (Principal Specialist Solutions Architect), Chandrashekar Vishweshwara(AWS Marketplace Solutions Architect)
- レベル:300
re:Invent 2024 公式サイトのワークショップ概要を翻訳した内容が以下となります。
AWS Marketplace を利用すると、サードパーティのソフトウェア、データ、およびサービスの検索、契約、導入、管理が容易になります。このワークショップでは、AWS Marketplaceについて学び始めたばかりの購入者を対象としたハンズオンラボと、知識の拡大を目指す経験豊富な購入者を対象としたラボのどちらかを選択できます。新規購入者は、AWS Marketplaceでさまざまなタイプのサードパーティ製品を購入し、デプロイする方法を学ぶことができます。経験豊富な購入者は、承認済みの製品のプライベートマーケットプレイスをセットアップし、ライセンスを共有し、支出を分析し、コストを割り当てることで、購入を管理する方法を学ぶことができます。このセッションに参加するには、AWSアカウント(管理者権限)が必要です。参加するには、ノートパソコンを持参する必要があります。
ワークショップの内容
6 つのラボに分かれており 1~5 のでは Marketplace 製品の導入を学びます。6 のラボでは、組織で Marketplace を使うためのガバナンスを効かせた管理方法について学びます。
- Deploy a free Amazon Machine Image (AMI)
- Deploy a free container product
- Deploy a free EKS add-on
- Subscribe to a SaaS
- Deploy a pre-trained ML model
- Govern your third-party purchases
今回は太字のラボを体験しましたので紹介します。
Lab 2. Deploy a free container product
ラボ 2 では、Marketpalce からコンテナ製品(Istio の Tetrate Distro)を調達して、デプロイする流れを試します。
用意されたスクリプトを実行して、eksctl、kubectl、helm をインストールします。
$ ./pre-reqs.sh
インストールスクリプト(bashpre-reqs.sh )
echo "..........Installing EKSCTL now ............"
ARCH=amd64
PLATFORM=$(uname -s)_$ARCH
curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz" && tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
echo "..........Installing KUBECTL now ............"
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.30.4/2024-09-11/bin/linux/amd64/kubectl
kubectl version --short --client
echo "..........Installing HELM now ............"
wget https://get.helm.sh/helm-v3.16.3-linux-amd64.tar.gz
tar -zxvf helm-v3.16.3-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
helm version
echo "..........EKTCTL, KUBECTL, HELM Installed Successfully!!............"
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform
echo "........................Installed Terraform as well................."[cloudshell-user@ip-10-132-84-240 ~]$
EKS クラスターを作成します。
$ eksctl create cluster --name mpbuyerlab-mp-container-test-cluster --nodegroup-name mpbuyerlab-mp-container-test-cluster-ng --region us-east-1 --zones=us-east-1a,us-east-1b --version 1.302024-12-02
kubeconfig の設定を更新します。
$ aws eks update-kubeconfig --name mpbuyerlab-mp-container-test-cluster --region us-east-1
ノードが立ち上がっていることを確認します。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-14-221.ec2.internal Ready <none> 8m39s v1.30.6-eks-94953ac
ip-192-168-56-194.ec2.internal Ready <none> 7m46s v1.30.6-eks-94953ac
IAM OIDC Identity プロバイダーを作成し、Amazon EKS クラスターのサービスアカウントに IAM ロールを使用します。
$ eksctl utils associate-iam-oidc-provider --region=us-east-1 --cluster=mpbuyerlab-mp-container-test-cluster --approve
IAM ロールと Kubernetes サービスアカウントを作成します。
$ kubectl create namespace istio-system
$ eksctl create iamserviceaccount \
--name tid-deployment \
--namespace istio-system \
--cluster mpbuyerlab-mp-container-test-cluster \
--attach-policy-arn arn:aws:iam::aws:policy/AWSMarketplaceMeteringFullAccess \
--attach-policy-arn arn:aws:iam::aws:policy/AWSMarketplaceMeteringRegisterUsage \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AWSLicenseManagerConsumptionPolicy \
--approve \
--override-existing-serviceaccounts
Helm チャートは Kubernetes クラスタにデプロイするのに必要なリソースをすべて含んだパッケージ形式です。
ここでは Helm チャートを使用してサードパーティのコンテナ製品を Amazon EKS クラスターにデプロイします。
$ export HELM_EXPERIMENTAL_OCI=1
$ aws ecr get-login-password \
--region us-east-1 | helm registry login \
--username AWS \
--password-stdin 709825985650.dkr.ecr.us-east-1.amazonaws.com
$ mkdir awsmp-chart && cd awsmp-chart
$ helm pull oci://709825985650.dkr.ecr.us-east-1.amazonaws.com/tetrate-io/tetrate-istio --version 1.24.10001
$ tar xf $(pwd)/* && find $(pwd) -maxdepth 1 -type f -delete
$ helm install --generate-name \
--namespace istio-system ./* \
--set Helmkeyname2=tid-deployment \
--set global.hub=709825985650.dkr.ecr.us-east-1.amazonaws.com/tetrate-io/tetrate-istio \
--set global.tag=1.24.10001-tetrate-v0
Istio の Tetrate Distro が正常にインストールされたことを確認できました
アドオンのステータスを表示するとリソースが正常に起動できていることを確認できます。
Lab 6. Govern your third-party purchases
このラボでは、Private Marketplace の機能を使用して、誰がサブスクライブできるか、どの製品をサブスクライブできるかを制御する方法を学びます。
準備として、管理者とエンドユーザーの 2 つのロールを CloudFormation で展開します。
管理者ロールでは承認済みの製品リストを作成し、エンドユーザーロールでは承認済みの製品を展開と承認されていない製品の要求します。
CloudFormation テンプレート
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "AWS setup private MP",
"Outputs":
{
"MPAdmin":
{
"Description": "Use this role for a PrivMP Administrator",
"Value":
{
"Fn::Sub": "https://signin.aws.amazon.com/switchrole?account=${AWS::AccountId}&roleName=${mpadmin}&displayName=mpAdmin"
}
},
"MPAdminLinks":
{
"Description": "https://aws.amazon.com/marketplace/privatemarketplace#/ https://aws.amazon.com/marketplace/privatemarketplace/requests https://aws.amazon.com/marketplace/privatemarketplace#/dashboard",
"Value": "https://aws.amazon.com/marketplace/privatemarketplace#/ https://aws.amazon.com/marketplace/privatemarketplace/requests https://aws.amazon.com/marketplace/privatemarketplace#/dashboard"
},
"MPenduser":
{
"Description": "Use this role for a PrivMP enduser",
"Value":
{
"Fn::Sub": "https://signin.aws.amazon.com/switchrole?account=${AWS::AccountId}&roleName=${mpenduser}&displayName=mpEndUser"
}
}
},
"Resources":
{
"mpadmin":
{
"Properties":
{
"AssumeRolePolicyDocument":
{
"Statement":
[
{
"Action":
[
"sts:AssumeRole"
],
"Effect": "Allow",
"Principal":
{
"AWS":
[
{
"Ref": "AWS::AccountId"
}
]
}
}
],
"Version": "2012-10-17"
},
"ManagedPolicyArns":
[
"arn:aws:iam::aws:policy/AWSPrivateMarketplaceAdminFullAccess",
"arn:aws:iam::aws:policy/AWSMarketplaceProcurementSystemAdminFullAccess",
"arn:aws:iam::aws:policy/ReadOnlyAccess",
"arn:aws:iam::aws:policy/AWSCloudFormationReadOnlyAccess"
],
"Path": "/",
"Policies":
[
{
"PolicyDocument":
{
"Statement":
[
{
"Action":
[
"aws-marketplace:Subscribe",
"aws-marketplace:Unsubscribe",
"aws-marketplace:ViewSubscriptions",
"aws-marketplace:StartBuild"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "2012-10-17"
},
"PolicyName": "privmpadmin"
},
]
},
"Type": "AWS::IAM::Role"
},
"mpenduser":
{
"Properties":
{
"AssumeRolePolicyDocument":
{
"Statement":
[
{
"Action":
[
"sts:AssumeRole"
],
"Effect": "Allow",
"Principal":
{
"AWS":
[
{
"Ref": "AWS::AccountId"
}
]
}
}
],
"Version": "2012-10-17"
},
"ManagedPolicyArns":
[
"arn:aws:iam::aws:policy/AWSServiceCatalogEndUserFullAccess",
"arn:aws:iam::aws:policy/AWSServiceCatalogEndUserReadOnlyAccess",
"arn:aws:iam::aws:policy/AWSPrivateMarketplaceRequests",
"arn:aws:iam::aws:policy/AWSCloudFormationReadOnlyAccess"
],
"Path": "/",
"Policies":
[
{
"PolicyDocument":
{
"Statement":
[
{
"Action":
[
"aws-marketplace:Subscribe",
"aws-marketplace:Unsubscribe",
"aws-marketplace:ViewSubscriptions",
"aws-marketplace:StartBuild",
"ec2:RunInstances",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateSecurityGroup",
"ec2:DeleteSecurityGroup",
"ec2:DescribeSubnets",
"ec2:DescribeKeyPairs",
"ec2:DescribeSecurityGroups",
"ec2:DescribeVpcs",
"ec2:DescribeInstances",
"ec2:CreateKeyPair",
"ec2:DeleteKeyPair",
"ec2:TerminateInstances"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "2012-10-17"
},
"PolicyName": "privmpenduser"
}
]
},
"Type": "AWS::IAM::Role"
}
}
}
スイッチロール運用をしている環境ではスイッチロールに失敗するため、管理者とエンドユーザーのロールそれぞれで信頼ポリシーを更新します。
また、手順にはありませんが、Private Marketplace を管理アカウントで有効にする必要があります。
有効にされていないアカウントの場合は、このタイミングで有効化しましょう。
有効化できたら、作成した管理ロールにスイッチロールします。
Private Marketplace Dashboard のナビゲーションペインから[experience]を開き、[Create experience]をクリックします。
Experience title を入力し、[Create experience]をクリックします。
作成した Experience「DevOps」を開き、Products > All AWS Marketplace products とクリックします。
検索欄に "WordPress Certified by Bitnami and Automattic" と入力して、対象にチェックしたら[Add]をクリックします。
次に、オーディエンスを作成して Experience と関連付けることで、組織やアカウントを管理できるようになります。
Assosiation audience タブの[Add additional audience]より、アカウントを追加することで、そのアカウント上で WordPress Certified by Bitnami and Automattic を利用できるようになります。
ここまでで管理側の作業が完了しました。
エンドユーザーのロールにスイッチロールして、Marketplace のサブスクライブをできるか確認します。
WordPress Certified by Bitnami and Automattic のページからサブスクライブして、ネットワークやセキュリティグループなどの設定を行います。
EC2 が起動し、パブリック DNS 名から HTTP 接続するとブログページを表示できました。
最後に同じエンドユーザーのロールを使って、未承認の製品をサブスクライブしてみようと思います。
製品の一覧から未承認の「LAMP packaged by Bitnami」を検索してクリックします。
上部に未承認であることのエラーが表示されました。
続けて、エラーメッセージの右側にある[Request product]をクリックします。
Private Marketplace 対してリクエストを投げられますので、理由を入力してリクエストを投げます。
もう一度、管理のロールに戻り、Experience の Product を確認すると、リクエストした製品がペンディングになっていることを確認できました。
これにてワークショップは終了になります。
さいごに
本ワークショップを通じて、Marketplace を通じてサードパーティのソフトウェアを導入するときの流れを確認できました。
今回はワークショップの手順通り進めましたが、製品ページにも導入手順が記載されており、スムーズに導入できそうでした。
また、Private Marketplace の基本的な機能を試すことができ、組織として Marketplace を管理したいときの操作を体験できました。
組織でサードパーティ製品のガバナンスを効かせたいときに活用したいです。