gpt4 book ai didi

amazon-web-services - AWS 云信息 : How to fix "Api Event must reference an Api in the same template" error?

转载 作者:行者123 更新时间:2023-12-03 07:13:21 24 4
gpt4 key购买 nike

我正在尝试将堆栈拆分为嵌套堆栈,因为我达到了 AWS 最大堆栈资源限制。我正在构建一个 REST API。我想对所有堆栈使用一个 API 网关。下面是我的代码。

模板.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
aws-restapi

Sample SAM Template for aws-restapi

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 5
VpcConfig:
SecurityGroupIds:
- sg-041f2xxxd921e8e
SubnetIds:
- subnet-03xxxb2d
- subnet-c4dxxxcb

Resources:
ApiGatewayApi:
Type: AWS::Serverless::Api
Properties:
StageName: prod

GetAllAccountingTypesFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: aws-restapi/
Handler: source/accounting-types/accountingtypes-getall.getallaccountingtypes
Runtime: nodejs14.x
Events:
GetAllAccountingTypesAPIEvent:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /accountingtypes/getall
Method: get
RestApiId:
Ref: ApiGatewayApi
GetAccountingTypeByIDFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: aws-restapi/
Handler: source/accounting-types/accountingtypes-byid.getbyid
Runtime: nodejs14.x
Events:
GetAllAccountingTypesAPIEvent:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /accountingtypes/getbyid
Method: get
RestApiId:
Ref: ApiGatewayApi

NestedStackTwo:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: nestedstack.yaml

LambdaRole:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- 'sts:AssumeRole'
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Policies:
- PolicyName: root
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- ec2:DescribeNetworkInterfaces
- ec2:CreateNetworkInterface
- ec2:DeleteNetworkInterface
- ec2:DescribeInstances
- ec2:AttachNetworkInterface
Resource: '*'

Outputs:
HelloWorldApi:
Description: "API Gateway endpoint URL for Prod stage for functions"
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"

nestedstack.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
aws-restapi

Sample SAM Template for aws-restapi

Globals:
Function:
Timeout: 5
VpcConfig:
SecurityGroupIds:
- sg-041f2459dcd921e8e
SubnetIds:
- subnet-03xxxx2d
- subnet-c4dxxxxcb

Parameters:
ApiId: ApiGatewayApi

Resources:
GetAllPromotionsFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: aws-restapi/
Handler: source/promotions/promotions-getall.getAllPromotions
Runtime: nodejs14.x
Events:
GetAllPromotionsAPIEvent:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /promotions/getall
Method: get
RestApiId:
Ref: !Ref ApiId
SavePromotionsFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: aws-restapi/
Handler: source/promotions/promotions-save.savePromotions
Runtime: nodejs14.x
Events:
SavePromotionsAPIEvent:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /promotions/save
Method: post
RestApiId:
Ref: !Ref ApiId
UpdatePromotionsFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: aws-restapi/
Handler: source/promotions/promotions-update.updatePromotions
Runtime: nodejs14.x
Events:
UpdatePromotionsAPIEvent:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /promotions/update
Method: post
RestApiId:
Ref: !Ref ApiId


GetAllStaticInfoFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: aws-restapi/
Handler: source/static-info/staticinfo-getall.getAllStaticInfo
Runtime: nodejs14.x
Events:
GetAllStaticInfoAPIEvent:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /staticinfo/getall
Method: get
RestApiId:
Ref: !Ref ApiId
SaveStaticInfoFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: aws-restapi/
Handler: source/static-info/staticinfo-save.saveStaticInfo
Runtime: nodejs14.x
Events:
SaveStaticInfoAPIEvent:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /staticinfo/save
Method: post
RestApiId:
Ref: !Ref ApiId
UpdateStaticInfoFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: aws-restapi/
Handler: source/static-info/staticinfo-update.updateStaticInfo
Runtime: nodejs14.x
Events:
UpdateStaticInfoAPIEvent:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /staticinfo/update
Method: post
RestApiId:
Ref: !Ref ApiId


但是,我无法使用 sam build 构建此项目。我收到以下错误。

InvalidSamDocumentException(
samcli.commands.validate.lib.exceptions.InvalidSamDocumentException: [InvalidResourceException('GetAllPromotionsFunction', 'Event with id [GetAllPromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.')

嵌套堆栈中的所有函数都会生成上述错误。如果您需要完整的堆栈跟踪,请参见下面。

Traceback (most recent call last):
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/samlib/wrapper.py", line 68, in run_plugins
parser.parse(template_copy, all_plugins) # parse() will run all configured plugins
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/samlib/wrapper.py", line 88, in parse
sam_plugins.act(LifeCycleEvents.before_transform_template, sam_template)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samtranslator/plugins/__init__.py", line 136, in act
raise ex
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samtranslator/plugins/__init__.py", line 133, in act
getattr(plugin, method_name)(*args, **kwargs)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samtranslator/plugins/api/implicit_api_plugin.py", line 100, in on_before_transform_template
raise InvalidDocumentException(errors)
samtranslator.model.exceptions.InvalidDocumentException: [InvalidResourceException('GetAllPromotionsFunction', 'Event with id [GetAllPromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('SavePromotionsFunction', 'Event with id [SavePromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('UpdatePromotionsFunction', 'Event with id [UpdatePromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('GetAllStaticInfoFunction', 'Event with id [GetAllStaticInfoAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('SaveStaticInfoFunction', 'Event with id [SaveStaticInfoAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('UpdateStaticInfoFunction', 'Event with id [UpdateStaticInfoAPIEvent] is invalid. Api Event must reference an Api in the same template.')]

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/opt/homebrew/bin/sam", line 8, in <module>
sys.exit(cli())
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/click/decorators.py", line 73, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/telemetry/metric.py", line 153, in wrapped
raise exception # pylint: disable=raising-bad-type
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/telemetry/metric.py", line 122, in wrapped
return_value = func(*args, **kwargs)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/utils/version_checker.py", line 42, in wrapped
actual_result = func(*args, **kwargs)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/cli/main.py", line 90, in wrapper
return func(*args, **kwargs)
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/commands/build/command.py", line 210, in cli
do_cli(
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/commands/build/command.py", line 279, in do_cli
with BuildContext(
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/commands/build/build_context.py", line 84, in __enter__
self._stacks, remote_stack_full_paths = SamLocalStackProvider.get_stacks(
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/providers/sam_stack_provider.py", line 242, in get_stacks
stacks_in_child, remote_stack_full_paths_in_child = SamLocalStackProvider.get_stacks(
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/providers/sam_stack_provider.py", line 236, in get_stacks
current = SamLocalStackProvider(
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/providers/sam_stack_provider.py", line 51, in __init__
self._template_dict = self.get_template(
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/providers/sam_base_provider.py", line 189, in get_template
template_dict = SamTranslatorWrapper(template_dict, parameter_values=parameters_values).run_plugins()
File "/opt/homebrew/Cellar/aws-sam-cli/1.29.0/libexec/lib/python3.8/site-packages/samcli/lib/samlib/wrapper.py", line 70, in run_plugins
raise InvalidSamDocumentException(
samcli.commands.validate.lib.exceptions.InvalidSamDocumentException: [InvalidResourceException('GetAllPromotionsFunction', 'Event with id [GetAllPromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('SavePromotionsFunction', 'Event with id [SavePromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('UpdatePromotionsFunction', 'Event with id [UpdatePromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('GetAllStaticInfoFunction', 'Event with id [GetAllStaticInfoAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('SaveStaticInfoFunction', 'Event with id [SaveStaticInfoAPIEvent] is invalid. Api Event must reference an Api in the same template.'), InvalidResourceException('UpdateStaticInfoFunction', 'Event with id [UpdateStaticInfoAPIEvent] is invalid. Api Event must reference an Api in the same template.')] ('GetAllPromotionsFunction', 'Event with id [GetAllPromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.') ('GetAllStaticInfoFunction', 'Event with id [GetAllStaticInfoAPIEvent] is invalid. Api Event must reference an Api in the same template.') ('SavePromotionsFunction', 'Event with id [SavePromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.') ('SaveStaticInfoFunction', 'Event with id [SaveStaticInfoAPIEvent] is invalid. Api Event must reference an Api in the same template.') ('UpdatePromotionsFunction', 'Event with id [UpdatePromotionsAPIEvent] is invalid. Api Event must reference an Api in the same template.') ('UpdateStaticInfoFunction', 'Event with id [UpdateStaticInfoAPIEvent] is invalid. Api Event must reference an Api in the same template.')

我该如何解决这个问题?

最佳答案

如果你查看documentation对于无服务器功能的 API 事件,他们写道:

RestApiId Identifier of a RestApi resource, which must contain anoperation with the given path and method. Typically, this is set toreference an AWS::Serverless::Api resource defined in this template.

If you don't define this property, AWS SAM creates a defaultAWS::Serverless::Api resource using a generated OpenApi document. Thatresource contains a union of all paths and methods defined by Apievents in the same template that do not specify a RestApiId.

This cannot reference an AWS::Serverless::Api resource defined inanother template.

template.yaml:

NestedStackTwo:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: nestedstack.yaml
Parameters:
ApiId: !Ref ApiGatewayApi

nestedstack.yaml:

Parameters:
ApiId:
Type: string

关于amazon-web-services - AWS 云信息 : How to fix "Api Event must reference an Api in the same template" error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68979324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com