AWS Lambda에서 환경 변수의 TZ를 지정하지 않는 것이 좋습니다.

개시하다
Lambda에서 현재 재일시를 얻었습니다.
영역과 관계없이 기본값은 UTC입니다.
따라서 업무 등에서 사용하기 편리하도록 JST로 전환해서 활용해야 한다고 생각합니다.
그 방법으로 2022년 1월까지 현재는 2가지 패턴이 흔하다.
이 기사는 파이썬 3입니다.사용하다
다른 언어로 바꿔도 내용은 문제없다.
1. Lambda의 환경 변수를 통해 시간대를 설정하는 방법
우선 환경 변수 없이 얻으려고 시도해 보자.
from datetime import datetime

def lambda_handler(event, context):

    current_at = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    print(current_at)

실행 결과
2022-01-28 11:21:22
이 보도의 집필 시간은 20시 21분이다
이렇게 하면 UTC를 빼낼 수 있다.
그럼 다음은 람다의 환경 변수를 설정해 봅시다.
키에 TZ를 설정하고 값에 Asia/Tokyo를 설정합니다.

실제로 얻어 보다.
코드는 아까와 같다.
from datetime import datetime

def lambda_handler(event, context):

    current_at = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    print(current_at)

실행 결과
2022-01-28 20:21:59
JST에서는 환경 변수의 설정만으로 현재 날짜를 가져올 수 있습니다.
2. 프로그램에서 가져올 때 JST를 지정하는 방법
환경 변수에 대해 설정된 내용이 없습니다.

코드에 JST를 지정하면 현재 시간을 가져옵니다.
from datetime import datetime, timedelta, timezone

def lambda_handler(event, context):

    JST = timezone(timedelta(hours=+9), 'JST')
    current_at = datetime.now(JST).strftime('%Y-%m-%d %H:%M:%S')

    print(current_at)

실행 결과
2022-01-28 20:22:41
여기도 환경 변수의 시간대가 바뀌었을 때와 같다
JST에서 받았습니다.
문제점
다음은 본론.
환경 변수의 설정은 왜 JST가 되었을까...?이런 의문을 품고 있습니다.
신경 쓰여서 찾아봤어요.
TZ는 AWS Lambda의 예약어인 것 같습니다.
그 중
미리 정의된 환경 변수
TZ - 환경의 시간대(UTC)입니다.운영 환경에서 NTP를 사용하여 시스템 시계를 동기화합니다.
이런 기술이 있다.
신중을 기하기 위해 확인했다
import os

def lambda_handler(event, context):

    print(os.environ['TZ'])
실행 결과
:UTC
확실히 설치했어.
그 밖에
정의된 런타임 환경 변수
Lambda 실행 시간은 초기화할 때 여러 환경 변수를 설정합니다.대부분의 환경 변수는 함수나 운행 시간에 대한 정보를 제공한다.이러한 환경 변수의 키는 유지되므로 함수 설정에서 설정할 수 없습니다.
환경 변수의 키가 예약되어 함수 설정에서 설정할 수 없습니다
실제로 설정할 수 있다.
결론
스타일이 좀 미묘하지는 않지만.
문서에 명확하게 예약어로 기재되어 있어 설정할 수 없는 옵션
나는 기본적으로 그다지 좋지 않다고 생각한다.
언제 수정될지 모르기 때문에 프로그램에서 직접 받을 때는 JST를 지정하는 것이 좋다.
참고 자료
보충(2022/1/31)
선생님이 가르쳐 주셨어요.
몇 년 전에 서버 직원이 AWS 지원에 의해 확인되었습니다.
AWS에 대한 지원도 "향후 TZ가 덮어쓸 수 있을 것이라고 장담할 수 없기 때문에 환경 변수 TZ를 사용하지 마십시오"라고 확인했다.

좋은 웹페이지 즐겨찾기