在 Cloudformation 的 Lambda 定义的事件 属性 中创建时如何获取 API 端点的 URL
How do you get the API endpoint's URL when it's created within the Events property of Cloudformation's Lambda definition
我正在通过 CloudFormation(AWS 的 SAM:无服务器应用程序模型)创建 Lambda 函数,并通过 Lambda 函数的事件定义了一个 API 端点 属性。
...
MyFunction:
Type: AWS::Serverless::Function
Properties:
Description: Do amazing things
CodeUri: my_function/
Events:
Trigger:
Type: Api
Properties:
Path: /p1/{v1}
Method: post
Handler: app.run
...
我现在想使用在 CloudFormation YAML 文件的另一部分中创建的端点的 URL。我尝试使用 the SAM documentation for Lambda,但唯一的 return 值与函数的 ARN 和资源名称有关。
具体来说,我认为与确切问题无关,我想使用 API 端点作为 SNS 主题的订阅。
¿如何获取 API 端点的 URL?
我想我在几个地方找到了答案。
表明创建了一个隐式引用,您可以按如下方式使用它
!Ref ServerlessRestApi
这在实践中得到了 SAM Respository App
的支持
然后我重新仔细阅读 SAM API documentation,其中显示了 RestApiId
属性。它说
...Typically, this is set to reference an AWS::Serverless::Api resource defined in this template. If not defined, a default AWS::Serverless::Api resource is created..."
因此看起来您可以将其引用为 !Ref ServerlessRestApi
而无需对原始问题中的 YAML 进行任何修改,或者您可以添加以下 属性、RestApiId: MyAPI
和引用它作为 !Ref MyAPI
.
但是,要获得实际的 URL,您似乎必须使用 Fn::Sub 将几个部分粘合在一起。 Pahud Hsieh 在他上面的 SAM Repository 应用程序中做到了这一点
Outputs:
APIUrlPrefix:
Value:
Fn::Sub:
- https://${ServerlessRestApi}.execute-api.${Region}.amazonaws.com/Prod/incomingwebhooks/
- Region:
Ref: AWS::Region
ServerlessRestApi:
Ref: ServerlessRestApi
...
您可以像这样直接引用 RestApi
资源。
Resources:
apiGateway:
Type: AWS::ApiGateway::RestApi
Properties:
Name: !Sub ${AWS::StackName}-my-api
Description: my-api-edge
Outputs:
apiGatewayInvokeURL:
Value: !Sub "https://${apiGateway}.execute-api.${AWS::Region}.amazonaws.com/${apiGatewayStageName}"
lambdaArn:
Value: !GetAtt "lambdaFunction.Arn"
我正在通过 CloudFormation(AWS 的 SAM:无服务器应用程序模型)创建 Lambda 函数,并通过 Lambda 函数的事件定义了一个 API 端点 属性。
...
MyFunction:
Type: AWS::Serverless::Function
Properties:
Description: Do amazing things
CodeUri: my_function/
Events:
Trigger:
Type: Api
Properties:
Path: /p1/{v1}
Method: post
Handler: app.run
...
我现在想使用在 CloudFormation YAML 文件的另一部分中创建的端点的 URL。我尝试使用 the SAM documentation for Lambda,但唯一的 return 值与函数的 ARN 和资源名称有关。
具体来说,我认为与确切问题无关,我想使用 API 端点作为 SNS 主题的订阅。
¿如何获取 API 端点的 URL?
我想我在几个地方找到了答案。
!Ref ServerlessRestApi
这在实践中得到了 SAM Respository App
的支持然后我重新仔细阅读 SAM API documentation,其中显示了 RestApiId
属性。它说
...Typically, this is set to reference an AWS::Serverless::Api resource defined in this template. If not defined, a default AWS::Serverless::Api resource is created..."
因此看起来您可以将其引用为 !Ref ServerlessRestApi
而无需对原始问题中的 YAML 进行任何修改,或者您可以添加以下 属性、RestApiId: MyAPI
和引用它作为 !Ref MyAPI
.
但是,要获得实际的 URL,您似乎必须使用 Fn::Sub 将几个部分粘合在一起。 Pahud Hsieh 在他上面的 SAM Repository 应用程序中做到了这一点
Outputs:
APIUrlPrefix:
Value:
Fn::Sub:
- https://${ServerlessRestApi}.execute-api.${Region}.amazonaws.com/Prod/incomingwebhooks/
- Region:
Ref: AWS::Region
ServerlessRestApi:
Ref: ServerlessRestApi
...
您可以像这样直接引用 RestApi
资源。
Resources:
apiGateway:
Type: AWS::ApiGateway::RestApi
Properties:
Name: !Sub ${AWS::StackName}-my-api
Description: my-api-edge
Outputs:
apiGatewayInvokeURL:
Value: !Sub "https://${apiGateway}.execute-api.${AWS::Region}.amazonaws.com/${apiGatewayStageName}"
lambdaArn:
Value: !GetAtt "lambdaFunction.Arn"