저는 서버리스 프레임 워크를 사용하여 람다 함수를 만들고 있으며 serverless.yml의 다른 부분에서 Arn과 이름을 상호 참조 할 수 있기를 원합니다.
! GetAtt 및! Ref가 바닐라 CloudFormation을 통해 람다를 만든 경우 예상대로 작동하지 않는 것 같기 때문에 이것을 찾는 것이 얼마나 어려운지 놀랐습니다. (AWS :: Lambda :: Function이 Ref 및 Fn :: GetAtt를 반환하므로이를 쉽게 수행 할 수 있습니다!)
해결책을 암시하는 몇 개의 게시물을 찾았지만이를 달성하는 방법을 일반 영어로 설명하는 것은 없습니다.
...
functions:
- ${file(functions/sendEmail.yml)}
...
sendEmail:
handler: lambda-functions/send-email.handler
...
템플릿의 다른 부분에서 시도했습니다.
...
LambdaFunctionArn: !GetAtt sendEmail.Arn
하지만 배포하면 다음과 같은 결과가 나타납니다.
Error: The CloudFormation template is invalid: Template error: instance of Fn::GetAtt references undefined resource sendEmail
최종 CloudFormation 템플릿이 sendEmail을 sendEmailLambdaFunction으로 변환 한 것을 확인한 다음 시도했습니다.
LambdaFunctionArn: !GetAtt sendEmailLambdaFunction.Arn
그러나 비슷한 오류가 발생했습니다.
나도 이름을 언급하고 싶지만 슬프게도
!Ref sendEmail
오류가 발생합니다.
Error: The CloudFormation template is invalid: Template format error: Unresolved resource dependencies [sendEmail] in the Resources block of the template
람다의 Arn과 이름을 잡기 위해 필요한 정확한 변경과 관련하여 도움을 주시면 대단히 감사하겠습니다!
미리 감사드립니다! 나는
모범 사례는 확실하지 않지만 아래 내용이 적합합니다.
서버리스 함수에 functionName을 제공하고 arn을 원할 때 만들 수 있습니다.
test.yaml
TestFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
FunctionName: myFunction
참조 할 때
LambdaArn: !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:myFunction
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다