AWS-使用CFT将Lambda与API网关集成

时间:2018-07-17 22:56:45

标签: amazon-web-services aws-lambda aws-api-gateway amazon-cloudformation

我正在尝试构建一个CFT,该CFT创建一个Lambda函数和一个API,并将两者集成在一起。我目前可以创建Lambda函数和API,但无法集成它们。

我考虑过使用AWS:Lambda:Permission或在AWS:RestApi资源中指定Lambda函数,但是两者都需要Lambda函数的ARN值或API ID-我都无法访问因为我正在尝试在单一CFT中创建,部署和集成Lambda和API网关。

我应该在CFT中指定哪些方法或资源来集成我的lambda函数和API网关,而不需要Lambda ARN或API ID,因为在它们创建后我才可以访问这些方法或资源?

编辑:如果有帮助,我也在CFT中使用Swagger

1 个答案:

答案 0 :(得分:0)

因此,您要做的第一件事就是创建Lambda函数。

  1. 确保lambda是CFN要做的第一件事。您可以通过为DependsOn指定AWS::ApiGateway::RestApi属性来执行此操作-但是CFN通常足够聪明以找出它。值将是AWS::Lambda::Function的资源名称。

  2. 定义您的其余API。在大张旗鼓的文档中,您必须具有自定义x-amazon-apigateway-integration部分。请参阅x-amazon-apigateway-integration。此属性的uri包含先前创建的lambda函数的ARN。这不是Lambda控制台上显示的ARN。可以这样构造(yaml示例)。如果您有lambda的阶段或版本,则可能需要更多。

    uri: !Join ["", ["arn:aws:apigateway:", {"Ref": "AWS::Region"}, ":lambda:path/2015-03-31/functions/", !GetAtt <YourLambdaResourceName>.Arn, "/invocations"]]
    
  3. 还要在credentials的{​​{1}}属性中定义一个角色。该角色需要为API网关定义许可以调用lambda。 CFN Yaml中的角色和政策示例。

    x-amazon-apigateway-integration
  4. 最后创建一个lambda权限,其功能名称为刚创建的lambda的ARN(GetAtt .Arn),主体为ApiGatewayRole: Type: "AWS::IAM::Role" Properties: RoleName: !Join ["-", [{"Ref": "AWS::Region"}, {"Ref": "AWS::StackName"}, "apigateway_lambda_role"]] AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Action: - "sts:AssumeRole" Principal: Service: - "apigateway.amazonaws.com" Path: "/" ApiGatewayPolicy: Type: "AWS::IAM::Policy" DependsOn: ApiGatewayRole Properties: PolicyName: !Join ["-", [{"Ref": "AWS::Region"}, {"Ref": "AWS::StackName"}, "apigateway_lambda_policy"]] PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Action: "lambda:InvokeFunction" Resource: - "*" Roles: - Ref: ApiGatewayRole 。样本

    apigateway.amazonaws.com

可以通过使用Ref函数来检索API ID。 希望这会有所帮助。