Program Tip

AWS Lambda 함수가 CloudWatch에 로깅 (텍스트 출력)하도록 할 수 없음

programtip 2020. 12. 9. 21:36
반응형

AWS Lambda 함수가 CloudWatch에 로깅 (텍스트 출력)하도록 할 수 없음


S3 버킷에 업로드 될 때 파일을 처리 할 Lambda 함수를 설정하려고합니다. console.log파일을 업로드 할 때 출력을 볼 방법이 필요 하지만 Lambda 함수를 CloudWatch에 연결하는 방법을 알 수 없습니다.

context내 로그 그룹이 /aws/lambda/wavToMp3있고 로그 스트림이 인 개체를 살펴봄으로써 알아 냈습니다 2016/05/23/[$LATEST]hex_code_redacted. 그래서 CloudWatch에서 해당 그룹과 스트림을 생성했지만 아무것도 기록되지 않았습니다.


Lambda 함수가 로그 스트림을 생성하고 Cloudwatch에 로그를 게시하려면 Lambda 실행 역할에 다음 권한이 있어야합니다.

{
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                 "logs:CreateLogStream",
                 "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
} 

자세한 내용은 다음 AWS 문서를 참조하십시오. http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role


정책을 업데이트 한 후 새 정책을 읽으려면 모든 작업 인스턴스를 새로 고치도록 함수 설정을 업데이트해야하는 것 같습니다.

따라서 IAM에서 역할 정책을 업데이트 한 후 Lambda 콘솔에서 '테스트'버튼을 클릭하면 캐시 된 Lambda 인스턴스에 여전히 이전 역할 권한이 있으므로 Cloudwatch 로그에 기록되는 로그가 계속 표시되지 않습니다.

시간 제한을 1 초 정도 변경 하고 '저장 및 테스트'버튼을 클릭하면 Cloudwatch에서 로그를 볼 수 있습니다.


Lambda 함수가 로그 스트림을 생성하고 Cloudwatch에 로그를 게시하려면 Lambda 실행 역할에 다음 권한이 있어야합니다.

나는 이미 이러한 권한을 가지고 있지만 작동하지 않았습니다.

시간 제한을 1 초 정도 변경하고 '저장 및 테스트'버튼을 클릭하면 Cloudwatch에서 로그를 볼 수 있습니다.

시간 제한을 변경하고 저장했는데 로그가 여전히 작동하지 않습니다.

다른 역할을 할당했는데 로그가 여전히 작동하지 않습니다.

저에게 효과가 있었던 것은 "맞춤 역할 만들기"를 클릭 한 다음 "허용"을 클릭하는 것이 었습니다. 이것이 바로 로그가 생성되기 시작했지만 새 역할이 아닌 기존 역할을 사용하고 싶지 않았기 때문에 나중에 기존 역할을 할당하고 작동했습니다. 기술적으로는 작동하지 않았지만 이제는 작동하는 원래 구성으로 돌아 가야했습니다. 그림을 이동.


로깅이 발생하기위한 또 다른 필요성은 Lambda 함수가 완료를 나타내야한다는 것입니다. 예를 들어 Python 컨텍스트에서 핸들러는 None.


람다 함수 "구성"에 "기존 역할"의 전체 경로가 있는지 확인하십시오.

역할 : 기존 역할 선택 기존 역할 : service-role / yourRoleName

어떤 이유로 yourRoleName 만 입력하면 일부 서비스 (예 : SES)에서는 작동하지만 CloudWatch에서는 작동하지 않습니다.

또한 기존 역할을 사용하는 대신 새 역할을 만들 수도 있습니다. 이렇게하면 적절한 구성으로 역할이 생성됩니다.


문제는 AWS :: Logs :: LogGroup에 의해 Cloudformation 스크립트에 로그 그룹을 생성 한 다음 Lambda 로그를이 로그 그룹에 푸시하려고했습니다. : P 초보자주의 깊게 읽은 후 Lambda가 앞서 언급 한 형식으로 자체 로그를 생성한다는 것을 발견했습니다. / aws / lambda /이 로그 그룹에 정책 권한을 제공하거나 다음과 같은 리소스를 사용하여 일반 권한 만 제공하면됩니다. arn : aws : 로그 ::: *

도움이 되었기를 바랍니다


이미 기록되었을 수 있지만 예상 한 로그를 찾을 수 없습니다.

예 :

app.use(function simpleLogger (req, res, next) {
  console.info('[Logger]', req.method, req.originalUrl)
  next()
})

수행 한 후 GET /hello?world=1,

로컬 콘솔 : (간단하고 명확합니다!)

[Logger] GET /hello?world=1

CloudWatch Logs : (아래에서 정확한 로그를 쉽게 찾을 수 있습니까?)

START RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0 Version: $LATEST
2018-12-04T09:26:11.236Z  a3552c34-f7a6-11e8-90ba-2fb886f31fb0  [Logger] GET /hello?world=1
END RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0
REPORT RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0  Duration: 41.02 ms  Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 29 MB

결론 : 너무 장황해서 원래 로그를 찾을 수 없습니다.


조금 늦었을 수도 있지만 여전히 클라우드 워치에서 람다 로그를 보는 데 어려움을 겪는 사람들을 위해. 람다 함수의 실행 역할과 관련하여 "이 함수에 기존 역할을 사용할 수 있습니다. 역할은 Lambda에서 맡을 수 있어야하며 Cloudwatch Logs 권한이 있어야합니다." 그래서 IAM에서 나는 내 기능에 할당 한 역할에 "CloudWatchLogsFullAccess"를 부여했습니다. 그런 다음 cloudwatch의 로그 아래에서이 역할이 할당 된 기능에 대한 로그를 볼 수 있습니다.


다른 답변에 따르면 클라우드 감시 로그에 로그를 게시 할 수있는 람다 권한을 부여해야합니다. AWS는이를위한 AWSLambdaExecute정책 을 제공 했습니다. 그것은 json입니다-

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

이 정책을 람다에 할당 된 역할에 추가 할 수 있으며 로그보기를 시작해야합니다.

NOTE: It also has S3 read/write access. If you do not want it you can create a custom policy with just the logs part.


I encountered this problem but none of the answers above solved my issue. It turns out that the region was somehow set to Ohio when I first started CloudWatch. After I changed it to US East (N. Virginia), everything works fine.


CloudWatch & CloudWatch Logs are different Permissions, you need add CloudWatch Logs to the policy which attached with your role.


There's a writeup called How to Monitor AWS Lambda with CloudWatch with a section on "How to Use CloudWatch Logs with Lambda". Looks like you already found your answer, but for anybody without the IAM specific issues, this may help.

참고URL : https://stackoverflow.com/questions/37382889/cant-get-aws-lambda-function-to-log-text-output-to-cloudwatch

반응형