aws lambda에 google's people api을 사용하려고합니다.aws 람다에 Google 사람들 api에 Oauth2
를 I이 함수와 비밀을 저장 :
from oauth2client.file import Storage
from oauth2client import client, tools
def get_credentials():
credential_path = os.path.join(SCRIPT_DIR, 'people-api-secret.json')
store = Storage(credential_path)
credentials = store.get()
if not credentials or credentials.invalid:
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
flow.user_agent = APPLICATION_NAME
credentials = tools.run_flow(flow, store)
print('Storing credentials to ' + credential_path)
return credentials
그럼 I의 서버없는을 사용 AWS 람다로
people-api-secret.json
전송 API가 OAuth2를 요구하므로 I는 AWS (λ)로 전송 한 후 토큰 국부적으로 OAuth2을 페치하려 뼈대. 하지만 람다에 비밀을로드하려고하면
store.get()
은
None
을 반환합니다. 이 파일은 실제로 AWS에 있습니다 (
os.path.isfile(credential_path)
는
True
을 반환합니다).
다른 컴퓨터/IP 주소에서 이러한 비밀을 복사 할 수 있습니까? 그렇지 않은 경우 : 예를 들어 "완전한 방법"을 수행하지 않고 이것이 작동하도록하는 "최소한의 방법"은 무엇입니까? here
업데이트는 간단한 람다에 오류를 "권한이 거부"의 것을 찾았 print(open(credential_path).read())
는 [Errno 13] Permission denied: '/var/task/people-api-secret.json'
를 얻을 수 있습니다. 그 변수는 파일에서 읽는 대신 환경에 넣어야한다고 생각하십니까?
람다 함수를 배포하기 전에 json 파일에 올바른 권한 (chmod)을 지정했는지 확인하십시오. 런타임에이 파일을 다운로드하는 경우/tmp 디렉토리에 자격 증명을 저장하려고하면 '/tmp/people-api-secret.json'이 표시됩니다.이 파일은 람다 컨테이너에 파일을 쓸 수있는 유일한 디렉토리입니다. –