要解决AWS事件桥不通知AWS App Runner状态的问题,您需要在AWS事件桥规则中添加一个Lambda函数来处理状态通知。以下是一个示例解决方案的代码示例:
首先,创建一个Lambda函数来处理状态通知:
import json
import boto3
def lambda_handler(event, context):
# 解析事件桥事件
event_detail = event['detail']
status = event_detail['status']
# 检查状态是否为SUCCEEDED
if status == 'SUCCEEDED':
# 获取App Runner服务名称和ID
service_name = event_detail['resources'][0]['ARN'].split('/')[-2]
service_id = event_detail['resources'][0]['ARN'].split('/')[-1]
# 更新App Runner服务状态
client = boto3.client('apprunner')
response = client.update_service(
ServiceArn=event_detail['resources'][0]['ARN'],
Status='ACTIVE'
)
# 打印更新结果
print(response)
return {
'statusCode': 200,
'body': json.dumps('Status notification processed successfully.')
}
接下来,创建一个AWS事件桥规则,将其与Lambda函数关联,以便在状态更改时触发Lambda函数:
import boto3
client = boto3.client('events')
response = client.put_rule(
Name='AppRunnerStatusChangeRule',
EventPattern=json.dumps({
"source": ["aws.apprunner"],
"detail-type": ["App Runner Service State Change"],
"detail": {
"status": ["SUCCEEDED"]
}
}),
State='ENABLED',
Description='App Runner status change rule'
)
response = client.put_targets(
Rule='AppRunnerStatusChangeRule',
Targets=[
{
'Id': 'Target1',
'Arn': 'arn:aws:lambda:your_lambda_function_arn',
},
]
)
确保将arn:aws:lambda:your_lambda_function_arn
替换为您创建的Lambda函数的ARN。这将使AWS事件桥规则在App Runner服务状态更改为"SUCCEEDED"时触发Lambda函数。
这样,当App Runner服务的状态更改为"SUCCEEDED"时,Lambda函数将被触发,并使用App Runner服务的ARN更新服务状态为"ACTIVE"。
请注意,此示例仅处理状态为"SUCCEEDED"的情况。您可以根据需要修改Lambda函数和事件桥规则以处理其他状态。