AWS AppRunner与发送到VPC的出站流量无法直接连接到AWS SES。要解决此问题,可以使用AWS PrivateLink来将AWS SES与VPC进行私有连接。
下面是一个示例代码,展示如何使用AWS SDK for Python(Boto3)创建一个使用AWS PrivateLink连接到SES的AWS AppRunner服务:
import boto3
# 创建AWS AppRunner客户端
apprunner_client = boto3.client('apprunner')
# 创建一个AWS AppRunner服务
response = apprunner_client.create_service(
ServiceName='my-app-service',
SourceConfiguration={
'ImageRepository': {
'ImageIdentifier': '111111111111.dkr.ecr.us-east-1.amazonaws.com/my-app-image',
'ImageRepositoryType': 'ECR'
},
'AuthenticationConfiguration': {
'AccessRoleArn': 'arn:aws:iam::111111111111:role/service-role/my-app-service-role'
}
},
InstanceConfiguration={
'InstanceRoleArn': 'arn:aws:iam::111111111111:role/my-app-service-instance-role',
'InstanceType': 'FARGATE_1GB'
},
EncryptionConfiguration={
'KmsKey': 'arn:aws:kms:us-east-1:111111111111:key/12345678-1234-1234-1234-1234567890ab'
},
NetworkConfiguration={
'VpcConfiguration': {
'VpcId': 'vpc-12345678',
'SubnetIds': [
'subnet-12345678',
'subnet-23456789'
],
'SecurityGroupIds': [
'sg-12345678'
]
},
'PrivateDnsEnabled': True
}
)
# 获取AWS AppRunner服务的访问地址
service_id = response['Service']['ServiceId']
response = apprunner_client.describe_service(ServiceArn=service_id)
service_url = response['Service']['ServiceUrl']
# 创建AWS SES客户端
ses_client = boto3.client('ses')
# 发送邮件
response = ses_client.send_email(
Source='sender@example.com',
Destination={
'ToAddresses': [
'recipient@example.com',
],
},
Message={
'Subject': {
'Data': 'Hello from AWS AppRunner',
},
'Body': {
'Text': {
'Data': 'This email was sent from AWS AppRunner using AWS SES.',
},
},
},
)
print("Email sent successfully!")
上述代码使用AWS SDK for Python(Boto3)创建了一个AWS AppRunner服务,并使用AWS PrivateLink将该服务连接到VPC。然后,使用AWS SDK for Python(Boto3)创建了一个AWS SES客户端,并发送了一封电子邮件。
确保替换代码中的占位符(例如VPC ID、子网 ID、安全组 ID、KMS 密钥 ARN、角色 ARN、图像标识符等)为正确的值。
此代码示例假设您已经设置了AWS CLI和AWS SDK for Python(Boto3),并且具有适当的权限来创建和管理AWS AppRunner服务、AWS SES和其他相关服务。