AWSCloudFormationのテンプレートを使用したWebsocketAPIとLambda関数の設定

実現したいこと

AWSCloudFormationのテンプレートを使用したWebsocketAPIとLambda関数のテンプレートを別々に作成し、Lambda関数にAPIを紐付けたい。
※紐づける設定はTemplate側で行いたい

発生している問題・分からないこと

LambdaとAPIGatewayそれぞれのテンプレートを作成し、AWS上にデプロイをかけるところまではできているが、以下の画像のようにLambda関数側にトリガーを設定するテンプレートを設定することができない
イメージ説明

エラーメッセージ

error

1エラーはなく正常にデプロイができている。

該当のソースコード

lambdaのテンプレート.yaml

1AWSTemplateFormatVersion: "2010-09-09" 2Transform: "AWS::Serverless-2016-10-31" 3Description: "AWS SAM Template for sockapi_handle_connect" 4 5Resources: 6 SockApiHandleConnectFunction: 7 Type: "AWS::Serverless::Function" 8 Properties: 9 FunctionName: "sockapi_handle_connect" 10 Description: "接続通知受信" 11 Handler: "lambda_handler.lambda_handler" 12 Runtime: "python3.10" 13 CodeUri: "../../../lambda/sockapi_handle_connect" 14 Role: !ImportValue SockApiIamRoleArn 15 AutoPublishAlias: "live" 16 Layers: 17 - !ImportValue SockApiDbAccessLayerArn 18 - !ImportValue SockApiUtilityLayerArn 19 Policies: 20 - Statement: 21 - Effect: Allow 22 Action: 23 - "execute-api:ManageConnections" 24 Resource: 25 - !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${SockApiWebSocketApiId}/*" 26 - Effect: Allow 27 Action: 28 - "logs:CreateLogGroup" 29 - "logs:CreateLogStream" 30 - "logs:PutLogEvents" 31 Resource: "*" 32 - AWSLambdaBasicExecutionRole 33 34Outputs: 35 SockApiHandleConnectFunctionArn: 36 Description: "sockapi_handle_connect Lambda Function ARN" 37 Value: !GetAtt SockApiHandleConnectFunction.Arn 38 Export: 39 Name: SockApiHandleConnectFunctionArn

APIGatewayのテンプレート

1AWSTemplateFormatVersion: "2010-09-09" 2Description: "API Gateway WebSocket API" 3 4Resources: 5 SockApiWebSocketApi: 6 Type: "AWS::ApiGatewayV2::Api" 7 Properties: 8 Name: "sockapi_websocket_api" 9 ProtocolType: "WEBSOCKET" 10 RouteSelectionExpression: "$request.body.action" 11 DisableExecuteApiEndpoint: false 12 13 ConnectIntegration: 14 Type: "AWS::ApiGatewayV2::Integration" 15 Properties: 16 ApiId: !Ref SockApiWebSocketApi 17 IntegrationType: AWS_PROXY 18 IntegrationUri: !Sub 19 - "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ConnectFunctionArn}/invocations" 20 - ConnectFunctionArn: !ImportValue SockApiHandleConnectFunctionArn 21 IntegrationMethod: POST 22 PayloadFormatVersion: "1.0" 23 TimeoutInMillis: 29000 24 25 ConnectRoute: 26 Type: "AWS::ApiGatewayV2::Route" 27 Properties: 28 ApiId: !Ref SockApiWebSocketApi 29 RouteKey: "$connect" 30 AuthorizationType: NONE 31 Target: !Sub "integrations/${ConnectIntegration}" 32 33 SockApiWebSocketStage: 34 Type: "AWS::ApiGatewayV2::Stage" 35 Properties: 36 ApiId: !Ref SockApiWebSocketApi 37 StageName: "production" 38 AutoDeploy: true 39 DefaultRouteSettings: 40 ThrottlingRateLimit: 10000 41 ThrottlingBurstLimit: 5000 42 43Outputs: 44 SockApiWebSocketApiId: 45 Description: "WebSocket API ID" 46 Value: !Ref SockApiWebSocketApi 47 Export: 48 Name: SockApiWebSocketApiId 49 50 SockApiWebSocketApiEndpoint: 51 Description: "WebSocket API Endpoint" 52 Value: !Sub "wss://${SockApiWebSocketApi}.execute-api.${AWS::Region}.amazonaws.com/production/" 53 54 SockApiWebSocketApiConsoleUrl: 55 Description: "AWS Console URL for the WebSocket API" 56 Value: !Sub "https://${AWS::Region}.console.aws.amazon.com/apigateway/main/apis/${SockApiWebSocketApi}/routes?api=${SockApiWebSocketApi}&region=${AWS::Region}" 57

試したこと・調べたこと

上記の詳細・結果

別のアプリケーションでローカルで手動で作ったWebsocketAPIに紐づいているテンプレートを確認すると

Events: Api1: Type: Api Properties: Path: /MyResource Method: $connect

上記のような記述があり、これを使い紐付けを行なっているのかと思い、試してみたが、うまく行かななった。

補足

もし設定でおかしなところがあれば教えていただけたら幸いです。
よろしくお願いいたします。

コメントを投稿

0 コメント