🙌

Amazon Pinpointのハンズオンをやってみた(その3)

2023/08/25に公開

はじめに

Amazon Pinpointのハンズオンの3回目をお送りします。
Lambda Functionで、エンドポイントの作成をやっていきたいと思います。

ハンズオンのURL

https://catalog.workshops.aws/amazon-pinpoint-customer-experience/ja-JP/prerequisites/create-a-project

AWS Lambda Function の作成と実行

ではでは、行ってみますか。
Lambdaへ移動します。
移動したら、関数の作成ボタンをクリックします。

一から作成を選択し、任意の関数名をつけ、ランタイムにはPython3.11を選択し、関数の作成ボタンをクリックしていきます。
(ハンズオンではPhthon3.9だったけど、最新のものを使っちゃう)

はい、というわけで、ここまであっという間にできてしまいました。

関数の中身を実装

以下のコードをコピーし、lambda_functionに貼り付けてください。

import boto3

client = boto3.client('pinpoint')

def lambda_handler(event, context):

	application_id = event['application_id']
	first_name = event['first_name']
	email_address = event['email_address']
	endpoint_id = event['endpoint_id']
	user_id = event['user_id']
	age = event['age']
	interests = event['interests']

	response = client.update_endpoint(
	ApplicationId=application_id,
	EndpointId= endpoint_id,
	EndpointRequest={
		'Address': email_address,
		'ChannelType': 'EMAIL',
		'Metrics': {
			'age': age
		},
		'OptOut': 'NONE',
		'User': {
			'UserAttributes': {
				'FirstName': [
					first_name,
				],
				'interests': [
					interests
				]
			},
			'UserId': user_id
		}
	}
	)

	return response

権限の付与

Amazon Pinpointのプロジェクトに対してAWS Lambda Functionupdate_endpoint操作を実行できるようにする必要があるため、IAMポリシーを追加していきます。

設定 > アクセス権限に移動し、ロール名のリンクをクリックします。

許可の追加 > インラインポリシーを作成を選択します。

アクセス許可を指定する画面に遷移しましたので、ここで、JSONタブに切り替えます。

以下のJSONに差し替えます。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "UpdateEndpoint",
			"Effect": "Allow",
			"Action": [
				"mobiletargeting:UpdateEndpoint*"
			 ],
			"Resource": "arn:aws:mobiletargeting:AWS-REGION:AWS-ACCOUNT-ID:*"
		}
		]
}

AWS-REGIONは自身の使用リージョン、AWS-ACCOUNT-IDは自分のアカウントIDに置き換えてください。
下記のコマンドで、アカウントIDを確認することができるよ。

aws sts get-caller-identity

これで、許可ポリシーの設定が完了しました。
次はまた、Lambdaに戻るよー

テストの作成

コードにあるTestボタンのドロップダウンを選択し、Configure test eventを選択します。

イベント名testと入力します(ここはなんでもいい)。
イベントJSONのところを、下記のコードに置き換えます。
application_idはPinpointのプロジェクトIDに置き換えます
email_addressは登録したメールアドレスに置き換えます

{
    "application_id" : "---",
    "first_name" : "Jake",
    "email_address" : "---",
    "endpoint_id" : "222",
    "user_id" : "userid2",
	"age": 35,
	"interests": "shirts"
}

ここまでできたら、保存ボタンをクリックします。

次にDeployボタンをクリックします。

これでテストの準備が整ったので、早速テストしてみましょう。
テストボタンをクリックします。

"An error occurred (AccessDeniedException) when calling the UpdateEndpoint operation: ...

あれっ、何か設定間違えたか!?
設定を確認してみます。
・・・しまった、インラインポリシーがちゃんと追加できていなかった。
権限がないので、エラーになっていたみたいです。

気を取り直して再度テストを実行します。
下記のような感じで、うまく成功したみたいです。

というわけで、Lambda Functionからエンドポイントの作成を行ってみました。
次回は、S3イベント通知を使用そたエンドポイントの自動インポートをやってみます。
それでは、また!

GitHubで編集を提案

Discussion