SAM이 자동으로 생성하는 리소스를 찾는 방법
4279 단어 samCloudFormationAWS
tl;dr
AWS에서 서버리스 개발할 때 자주 사용하는 SAM(Serverless Application Model), 여러가지 리소스를 자동으로 만들어 주어 편리합니다만, 가끔 자동으로 생성되는 리소스의 논리 ID가 문서화되어 있지 않고, 자동 작성된 자원을 참조할 수 없어서 곤란할 경우가 있습니다.
그럴 때는 sam deploy
의 출력에 있는 LogicalResourceId 를 보면 논리 ID 를 알 수 있습니다. 여기에 나오는 LogicalResourceId를 지정하여 template.yaml
에서 해당 리소스를 참조 할 수 있습니다.
이 예의 경우 AWS::ApiGateway::RestApi
가 자동으로 만들어진 리소스입니다만, 그 ID 가 "ServerlessRestApi
"라고 하는 것을 알 수 있다, 라고 하는 치수입니다.
LogicalResourceId는 sam deploy
의 출력 외에도 AWS Management Console에서 볼 수 있습니다.
상세한 설명
AWS SAM?
AWS에서 제공하는 SAM(Serverless Application Model)은 서버리스 개발에 사용되는 리소스 배포를 선언적으로 작성하는 메커니즘입니다. AWS에서 Infrastruture as Code를 구현하는 메커니즘인 CloudFormation의 확장으로 구현되었습니다. SAM을 사용하면 간단한 정의로 Lambda나 APIGateway 등 필요한 리소스를 여러가지 시작해 주어 매우 편리합니다.
자동 생성 리소스와 드문 문제
이 자동으로 만들어지는 리소스를 템플릿내에서 참조하고 싶은 경우, 기본적으로는 문서에 걸려 있기 때문에, 그 값을 사용하면 됩니다만, 가끔 리소스명이 문서에 쓰여지지 않은 것이 있습니다 .
예를 들어 다음과 같은 template.yaml
를 준비하고 sam-cli
, https://......./api_endpoint
라는 웹 API가 시작됩니다.
template.yamlAWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: CloufFormation Template for project_name
Resources:
EndPointFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: python3.8
CodeUri: src
Handler: lambda_handler.lambda_handler
Events:
API:
Type: Api
Properties:
Path: /api_endpoint
Method: post
이 때, 실제로 생성된 API 의 풀 패스를 출력하려고 하면, API Gateway 의 RestApi 리소스를 참조할 필요가 있습니다만, SAM 문서 에는 a default AWS::Serverless::Api resource is created
에 대한 논리 ID가 작성되지 않았습니다(2020/11 현재)
지금까지 어떻게 자동으로 만들어지는 리소스를 참조하고 싶을 때 어떻게 해야할지 엄청나게 살아 버려, 수동으로 리소스를 만들도록 하고 있었습니다만,,,
해결책
어느 날, LogicalResourceId를 보면 좋다는 것을 깨달았습니다.
여기의 값을 사용하여 예를 들어
template.yamlOutputs:
ApiEndpointURL:
Description: API Endpoint URL
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/${ServerlessRestApi.Stage}/api_endpoint"
와 같이, ServerlessRestApi
를 참조해, 필요한 정보를 낼 수 있습니다!
여록
뭐, 이런 문서를 봐도 논리 ID를 모르는 것이 있으면, 문서에 PR 를 던진다, 라고 하는 것이 본근입니다만, 어떻게 고치면 좋은가를 아는 것과, 당좌의 작업을 진행시키기 위한 방법으로서, 떠난다.
StackOverflow 에서도 곤란한 사람이 있었으므로, 대답했습니다. .
Reference
이 문제에 관하여(SAM이 자동으로 생성하는 리소스를 찾는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/smatsumt/items/0e535b65926690491559
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
AWS SAM?
AWS에서 제공하는 SAM(Serverless Application Model)은 서버리스 개발에 사용되는 리소스 배포를 선언적으로 작성하는 메커니즘입니다. AWS에서 Infrastruture as Code를 구현하는 메커니즘인 CloudFormation의 확장으로 구현되었습니다. SAM을 사용하면 간단한 정의로 Lambda나 APIGateway 등 필요한 리소스를 여러가지 시작해 주어 매우 편리합니다.
자동 생성 리소스와 드문 문제
이 자동으로 만들어지는 리소스를 템플릿내에서 참조하고 싶은 경우, 기본적으로는 문서에 걸려 있기 때문에, 그 값을 사용하면 됩니다만, 가끔 리소스명이 문서에 쓰여지지 않은 것이 있습니다 .
예를 들어 다음과 같은
template.yaml
를 준비하고 sam-cli
, https://......./api_endpoint
라는 웹 API가 시작됩니다.template.yaml
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: CloufFormation Template for project_name
Resources:
EndPointFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: python3.8
CodeUri: src
Handler: lambda_handler.lambda_handler
Events:
API:
Type: Api
Properties:
Path: /api_endpoint
Method: post
이 때, 실제로 생성된 API 의 풀 패스를 출력하려고 하면, API Gateway 의 RestApi 리소스를 참조할 필요가 있습니다만, SAM 문서 에는
a default AWS::Serverless::Api resource is created
에 대한 논리 ID가 작성되지 않았습니다(2020/11 현재)지금까지 어떻게 자동으로 만들어지는 리소스를 참조하고 싶을 때 어떻게 해야할지 엄청나게 살아 버려, 수동으로 리소스를 만들도록 하고 있었습니다만,,,
해결책
어느 날, LogicalResourceId를 보면 좋다는 것을 깨달았습니다.
여기의 값을 사용하여 예를 들어
template.yaml
Outputs:
ApiEndpointURL:
Description: API Endpoint URL
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/${ServerlessRestApi.Stage}/api_endpoint"
와 같이,
ServerlessRestApi
를 참조해, 필요한 정보를 낼 수 있습니다!여록
뭐, 이런 문서를 봐도 논리 ID를 모르는 것이 있으면, 문서에 PR 를 던진다, 라고 하는 것이 본근입니다만, 어떻게 고치면 좋은가를 아는 것과, 당좌의 작업을 진행시키기 위한 방법으로서, 떠난다.
StackOverflow 에서도 곤란한 사람이 있었으므로, 대답했습니다. .
Reference
이 문제에 관하여(SAM이 자동으로 생성하는 리소스를 찾는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/smatsumt/items/0e535b65926690491559텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)