この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
いわさです。
Amazon PersonalizeでCloudFormationが使えるようになりました。
必要な全リソースではないですが、事前定義の大部分をコード化出来るようになっています。
本日は、Personalizeのチュートリアル相当の構成を、CloudFormationで構築してみました。
Personalizeの概念と作成出来る範囲
Amazon Personalizeは以下の流れで利用することが出来ます。
そして、2~5の太字部分を今回CloudFormationで作成することが出来るようになりました。
- S3バケットへトレーニングデータをアップロードする
- データセットとデータセットグループを作成する
- スキーマを定義する
- データセットへデータをインポートする
- データグループからソリューションを作成する
- ソリューションバージョンを作成する
- ソリューションバージョンからキャンペーンを作成する
- キャンペーンからレコメンドを取得
テンプレート
この記事ではカスタムデータセットグループのGet Startedと同じ内容のものをCloudFormation化してみました。
おそらくこれが最小構成のテンプレートかなという感じです。
今回は使ってませんが、ドメインデータセットグループもCloudFormationで利用可能です。
Getting started with a Custom dataset group - Amazon Personalize
上記の事前準備に従って、前データの用意とS3バケットへの格納、バケットポリシーなどの設定は事前に済ませておきます。
WSTemplateFormatVersion: 2010-09-09
Description: ---
Parameters:
TrainingDataBucket:
Type: String
Description: ARN
PersonalyzeRole:
Type: String
Description: ARN
Resources:
##########################################################
# ステップ1:トレーニングデータをインポートする
##########################################################
# create-dataset-group
HogeDatasetGroup:
Type: AWS::Personalize::DatasetGroup
Properties:
Name: iwasa-hoge-dataset-group
# create-schema
HogeSchema:
Type: AWS::Personalize::Schema
Properties:
Name: iwasa-hoge-schema
Schema: |
{
"type": "record",
"name": "Interactions",
"namespace": "com.amazonaws.personalize.schema",
"fields": [
{
"name": "USER_ID",
"type": "string"
},
{
"name": "ITEM_ID",
"type": "string"
},
{
"name": "TIMESTAMP",
"type": "long"
}
],
"version": "1.0"
}
# create-dataset & create-dataset-import-job
HogeDataSet:
Type: AWS::Personalize::Dataset
Properties:
Name: iwasa-hoge-dataset
DatasetType: Interactions
SchemaArn: !Ref HogeSchema
DatasetGroupArn: !Ref HogeDatasetGroup
DatasetImportJob:
JobName: iwasa-hoge-importjob
DataSource:
DataLocation: !Ref TrainingDataBucket
RoleArn: !Ref PersonalyzeRole
##########################################################
# ステップ2:ソリューションを作成する(モデルをトレーニングする)
##########################################################
# ソリューションの作成: create-solution
HogeSolution:
Type: AWS::Personalize::Solution
Properties:
Name: iwasa-hoge-solution
DatasetGroupArn: !Ref HogeDatasetGroup
RecipeArn: arn:aws:personalize:::recipe/aws-user-personalization
# create-solution-version
# CloudFormationに対応していない
##########################################################
# ステップ3:キャンペーンを作成する(ソリューションを展開する)
##########################################################
# create-campaign
Outputs:
HogeSolution:
Value: !Ref HogeSolution
上記のスタックを作成すると、諸々のPersonalizeリソースが作成されデータインポートジョブが開始されます。
チュートリアルの後半のトレーニングとデプロイを行う部分については引き続き手動で作成する必要があります。
スタックからソリューションのARNが取得出来ますので、バージョンを作成してキャンペーンを作成しましょう。
ソリューションバージョンを作成
ここでは以下の手順でソリューションバージョンを作成しています。
CLIから作成しているので、カスタムリソースでも対応出来そうですね。
作成処理に数十分かかります。
$ aws personalize create-solution-version --solution-arn arn:aws:personalize:ap-northeast-1:123456789012:solution/iwasa-hoge-solution
{
"solutionVersionArn": "arn:aws:personalize:ap-northeast-1:123456789012:solution/iwasa-hoge-solution/cd636685"
}
$ aws personalize describe-solution-version --solution-version-arn arn:aws:personalize:ap-northeast-1:123456789012:solution/iwasa-hoge-solution/cd636685 | jq '.solutionVersion.status'
"CREATE IN_PROGRESS"
$ aws personalize describe-solution-version --solution-version-arn arn:aws:personalize:ap-northeast-1:123456789012:solution/iwasa-hoge-solution/cd636685 | jq '.solutionVersion.status'
"ACTIVE"
キャンペーンを作成
ソリューションバージョンが作成出来たら、そこからキャンペーンを作成します。
ここも数分〜数十分かかります。
$ aws personalize create-campaign \
--name iwasa-hoge-campaign \
--solution-version-arn arn:aws:personalize:ap-northeast-1:123456789012:solution/iwasa-hoge-solution/cd636685 \
--min-provisioned-tps 1
{
"campaignArn": "arn:aws:personalize:ap-northeast-1:123456789012:campaign/iwasa-hoge-campaign"
}
$ aws personalize describe-campaign \
--campaign-arn arn:aws:personalize:ap-northeast-1:123456789012:campaign/iwasa-hoge-campaign | jq '.campaign.status'
"CREATE IN_PROGRESS"
$ aws personalize describe-campaign \
--campaign-arn arn:aws:personalize:ap-northeast-1:123456789012:campaign/iwasa-hoge-campaign | jq '.campaign.status'
"ACTIVE"
レコメンドを取得
キャンペーンが作成出来たら、あとはレコメンデーションを取得できるようになっています。
$ aws personalize-runtime get-recommendations \
--campaign-arn arn:aws:personalize:ap-northeast-1:123456789012:campaign/iwasa-hoge-campaign \
--user-id 123
{
"itemList": [
{
"itemId": "4776",
"score": 0.0079922
},
{
"itemId": "4025",
"score": 0.0071286
},
{
"itemId": "5299",
"score": 0.0061172
},
{
"itemId": "7090",
"score": 0.0050712
},
....
さいごに
AWS CLIやAPIと同じ操作感でCloudFormationは利用出来るので、AWS CLIでのPersonalizeチュートリアルに沿ってCloudFormationに落とし込むと、結構簡単にCloudFormation化することが出来ました。
この記事のテンプレートはいくつかパラメータを省略しておりまして、作成オプションが豊富にあります。
CloudFormationのドキュメントもよく確認してください。チュートリアルではKMSを利用していますが、私のテンプレートでは省略してます。