#amazon-web-services #aws-api-gateway #amazon-cloudwatch
Вопрос:
У меня есть функция AWS lambda, созданная с помощью AWS SAM. Он использует AWS::Serverless::HttpApi
. Мне нужно отслеживать показатели шлюза API, такие как 4xx, 5xx, задержка и т.д. Когда я захожу CloudWatch -> Metrics -> All metrics -> By Api Name
, я вижу только показатели для шлюза API, работающего по протоколу REST. Я могу получать показатели на основе протокола HTTP только через ApiId. На экране ниже By Api Name
и By Stage
показывает мне только показатели для API REST, остальные 4 вкладки дадут мне только API HTTP.
Есть ли способ создать такое сопоставление, чтобы я мог просматривать свои показатели на основе имени шлюза API? Иметь его по идентификатору не очень удобно.
Шаблон AWS SAM:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
SecurityGroupIds:
Type: CommaDelimitedList
SubnetIds:
Type: CommaDelimitedList
Region:
Type: String
Resources:
FooFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: api
Handler: run_lambda.lambda_handler
Runtime: python3.8
Tracing: Active
VpcConfig:
SecurityGroupIds: !Ref SecurityGroupIds
SubnetIds: !Ref SubnetIds
Policies:
- Statement:
- Sid: SES
Effect: Allow
Action:
- ses:Send*
Resource: !Sub "arn:aws:ses:${Region}:${AWS::AccountId}:identity/*"
Events:
SendEmail:
Type: HttpApi
Properties:
ApiId:
Ref: FooAPI
Path: /foo/bar
Method: POST
FooApiLogs:
Type: AWS::Logs::LogGroup
Properties:
RetentionInDays: 5
FooAPI:
Type: AWS::Serverless::HttpApi
Properties:
CorsConfiguration:
AllowOrigins:
- "*"
AllowMethods:
- GET
- POST
AllowHeaders:
- authorization
- content-type
AccessLogSettings:
DestinationArn: !GetAtt FooApiLogs.Arn
Format: |
{ "requestId": "$context.requestId", "ip": "$context.identity.sourceIp", "requestTime": "$context.requestTime", "httpMethod": "$context.httpMethod", "routeKey": "$context.routeKey", "status": "$context.status", "authorizerPrincipalId": "$context.authorizer.principalId", "authorizerError": "$context.authorizer.error", "integrationError": "$context.integration.error", "integrationErrorMessage": "$context.integrationErrorMessage", "authorizerPayload": "$context.authorizer.payload" }