Ajoutez un formulaire de messagerie à l'application Web créée dans Création d'une application Web sans serveur à l'aide d'AWS. Il est composé de deux parties, et je pense qu'il vaut mieux regarder d'abord le front-end. Formulaire de courrier supplémentaire à l'application Web sans serveur ~ Front end ~
Étant donné que l'application Web de base utilise AppSync, AppSync est également le moyen d'appeler Lambda pour envoyer des messages depuis le front-end.
Lors de la création d'une nouvelle fonction Lambda, ajoutez «Politique de publication Amazon SNS» dans la sélection et la création des rôles d'exécution.
Ajoutez un IF qui appelle Lambda à AppSync que vous utilisez déjà. L'article suivant que j'ai écrit l'autre jour sera utile à la fois. Appeler Lambda avec AppSync
Ajoutez le Lambda ci-dessus à la source de données, ajoutez un IF similaire au suivant au schéma et attachez-le au résolveur.
input ProcessSendMailInput {
name: String!
email: String!
message: String!
}
type ProcessSendMailResult @aws_cognito_user_pools {
statusCode: Int!
body: String
}
type Mutation {
processSendMail(input: ProcessSendMailInput!): ProcessSendMailResult
@aws_cognito_user_pools
:
Nous mettrons en place un SNS pour vous informer par e-mail du contenu envoyé via AppSync.
À tout le moins, il semble bon de n'entrer que le nom.
Créez un abonnement pour le sujet que vous avez créé. Le protocole est «email» et le point final est «adresse email de destination». Lorsque vous créez un abonnement, un e-mail de confirmation sera envoyé à l'adresse e-mail que vous avez spécifiée pour votre point de terminaison. Si vous sélectionnez le lien «Confirmer l'abonnement» dans le corps de l'e-mail, l'abonnement sera vérifié et le statut passera de «En attente de confirmation» à «Confirmé».
Vous pouvez envoyer un e-mail de test à partir de "Message du problème" en haut à droite de l'écran du sujet, il est donc judicieux de le vérifier. En outre, l'ARN dans les détails de la rubrique sera utilisé plus tard dans le programme.
Il s'agit d'un code Python qui vous informe via SNS du contenu envoyé via AppSync.
lambda_function.py
import boto3
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
sns = boto3.client("sns")
TOPIC_ARN = "arn:aws:sns:ap-northeast-1:888888888888:sample_sns_topic"
REQUEST_BODY_TEMPLATE = """
name : {0}
email : {1}
message :
{2}
"""
def lambda_handler(event, context):
try:
logger.info(event)
name = event["input"]["name"]
email = event["input"]["email"]
message = event["input"]["message"]
requestBody = REQUEST_BODY_TEMPLATE.format(name, email, message)
logger.info(requestBody)
request = {
"TopicArn": TOPIC_ARN,
"Message": requestBody,
"Subject": "mail from form by {0}".format(name)
}
response = sns.publish(**request)
return {
"statusCode": 200,
"body": json.dumps("Email sent successfully.")
}
except Exception as e:
logger.exception(e)
return {
"statusCode": 500,
"body": json.dumps(e)
}
Il est décrit dans Front end bias.
Le formulaire de courrier a été plus facile que prévu. Avec cela seul, le nombre d'étapes est d'environ 1,0H. Cependant, je pense qu'un mécanisme distinct est nécessaire pour empêcher la falsification.
Je pense utiliser le service reCAPTCHA de Google. Je l'écrirai à nouveau lorsque je le présenterai la prochaine fois.