使用SAM

时间:2019-01-27 06:26:49

标签: amazon-web-services aws-serverless aws-sam serverless-application-model

我在SAM(亚马逊的无服务器应用程序模型)中创建代理资源的要求很简单。实际上如此简单,以至于Amazon的文档似乎把它作为exercise留给了读者!

我想创建一个AWS API Gateway通用终端节点,以将所有内容代理到另一个HTTP服务。

在AWS控制台中,我尝试构建的配置如下:

enter image description here

我已经看到Christian Johansen提出的出色的post以及他有关如何在CloudFormation中执行相同操作的Stack Overflow问题here。我想我可以在SAM中使用该代码,但是SAM具有其隐式和显式的API,因此如果“正确的方法”是指隐式资源,则我想避免创建显式资源。

有人知道该怎么做吗?

1 个答案:

答案 0 :(得分:1)

经过大量的尝试,我相信我在示例here中找到了答案。相对于SAM开箱即用的Hello World示例的差异是:

diff --git a/sam-app/template.yaml b/sam-app/template.yaml
index 02cd901..f349dcc 100644
--- a/sam-app/template.yaml
+++ b/sam-app/template.yaml
@@ -17,11 +17,11 @@ Resources:
         Variables:
           PARAM1: VALUE
       Events:
-        HelloWorld:
+        ProxyApiGreedy:
           Type: Api
           Properties:
-            Path: /hello
-            Method: get
+            Path: /{proxy+}
+            Method: ANY
 Outputs:
   HelloWorldApi:
     Description: API Gateway endpoint URL for Prod stage for Hello World function

换句话说,像这样:

Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      ...
      Events:
        ProxyApiGreedy:
          Type: Api
          Properties:
            Path: /{proxy+}
            Method: ANY