reInvent2020에서 발표된 LambdaContainer를 CDK로 구현해 본다
1. 소개
일본 시간의 2020년 12월 2일 오전 1시경부터 시작된 1번째의 KeyNote로,
갑자기 LambdaContainer
가 발표되었습니다 (참고).
나도, 이 발표는 리얼타임으로 보고 있어 「우아아아아아아」라고 마음속에서 수호를 올렸습니다.
콘솔 등에서는 이미 이용할 수 있는 것 같습니다.
또, 놀란 것이, AWS CDK 하지만, LambdaContainer
의 발표로부터 몇 시간 후에는
버젼이 1.76.0
에 올라, 그 때에 LambdaContainer
가 서포트된 것입니다.
2. 구현
CDK 에서의 구현에 관한 문서는 공식 로 제공되고 있어 지금까지의 배포와 대차 없이 이용할 수 있을 것 같습니다.
또, DockerFile 는 Developers.IO 님의 기사 를 참고로 했습니다.
2.1 파일 구성
CDK를 배포하는 파일 구성은 다음과 같습니다.
lambda-container/
├── app.py
├── cdk.json
└── docker/
├── Dockerfile
├── app.py
└── requirements.txt
2.2 Lambda의 주요 함수
특히 의미가 없는 Lambda 함수입니다.
requirements.txt에서 설치 한 패키지를 올바르게 사용할 수 있는지,
pandas 버전을 표시해 봅시다.
docker/app.pyimport pandas as pd
def lambda_handler(event, _):
print(pd.__version__)
return event
2.3 Dockerfile
Lambda에 올리는 Dockerfile의 예는 다음과 같습니다.
(이쪽의 Dockerfile 은 참고의 기사를 그대로 이용시켜 주었습니다)
FROM public.ecr.aws/lambda/python:3.8
COPY app.py requirements.txt ./
RUN python3.8 -m pip install -r requirements.txt -t .
# ここのコマンドは
# app.pyのスクリプトにある、lambda_handlerという関数をエントリポイントにする、
# という意味です。
CMD ["app.lambda_handler"]
다른 Python 버전은 여기을 참조하십시오.
( 2.7
게다가 일단 이용할 수 있는 것 같네요)
2.4 CDK에서의 구현
공식 문서를 참고로 구현하겠습니다.
app.pyfrom aws_cdk import (
aws_lambda as lambda_,
core,
)
class LambdaContainer(core.Stack):
def __init__(self, app: core.App, _id: str):
super().__init__(scope=app, id=_id)
_ = lambda_.DockerImageFunction(
scope=self,
id="container_function",
code=lambda_.DockerImageCode.from_image_asset(
directory="docker",
repository_name="lambda_container_example"
)
)
def main():
app = core.App()
LambdaContainer(app, "LambdaContainer")
app.synth()
if __name__ == "__main__":
main()
2.5 배포
지금까지 할 수 있으면 CDK app.py가 있는 디렉토리에서 다음 명령을 실행하면 배포할 수 있습니다.
# pythonコードが正しいか確認
# 構文エラーがなければ、デプロイ可能なStackが表示されます。
$ cdk ls
LambdaContainer
# 実際にdeploy
$ cdk deploy
배포를 시작하면 평소처럼 리소스를 만들 것인지 묻습니다.
y
를 눌러 진행하면 docker 의 build 가 시작되고,
ECR
로 PUSH되어 CDK 배포가 완료되었습니다.
2.6 확인
실제로 Lambda 화면에서 확인해 봅시다.
입력 한 event
의 값이 그대로 반환되었거나 pandas.__version__
가 표시되고,docker/app.py
에서 설정한 대로 동작하고 있는 것을 알 수 있군요.
또, 실행해 보았더니, 첫회야말로 기동에 조금 시간(3초 정도)이 걸렸습니다만,
2회째 이후는 즉시 결과가 돌아왔습니다.
ECR
의 화면을 확인하면 repository_name
로 기술한 이름으로 등록되어 있었습니다.
2.7 리소스 삭제
마지막으로 작성한 리소스는 다음 명령으로 삭제해야 합니다.
$ cdk destroy
단, ECR
의 리포지토리까지는 삭제되지 않으므로, 불필요한 경우는 수동으로 삭제해 주세요.
3. 결론
Lambda는 Lambda이므로 실행 시간 등의 관점에서 이용 장소를 파악할 필요가 있습니다.
다만, Lambda에서도 컨테이너를 이용할 수 있게 된 것으로, 다른 컨테이너의 서비스에 유연하게 이행할 수 있게 되는 것은 매우 기쁘네요.
어느 쪽인가 하면, 지금까지는 Lambda용으로 독자적인 배치 환경등을 준비할 필요가 있었습니다만,
그것이 사라지면 더 많은 사람들이 만지기 쉬워졌다고 생각합니다.
앞으로, reInvent
그럼 4개의 KeyNote도 있고, 2020년도 아직도 즐길 수 있군요.
Reference
이 문제에 관하여(reInvent2020에서 발표된 LambdaContainer를 CDK로 구현해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gsy0911/items/943533045bec5d7de2b1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
CDK 에서의 구현에 관한 문서는 공식 로 제공되고 있어 지금까지의 배포와 대차 없이 이용할 수 있을 것 같습니다.
또, DockerFile 는 Developers.IO 님의 기사 를 참고로 했습니다.
2.1 파일 구성
CDK를 배포하는 파일 구성은 다음과 같습니다.
lambda-container/
├── app.py
├── cdk.json
└── docker/
├── Dockerfile
├── app.py
└── requirements.txt
2.2 Lambda의 주요 함수
특히 의미가 없는 Lambda 함수입니다.
requirements.txt에서 설치 한 패키지를 올바르게 사용할 수 있는지,
pandas 버전을 표시해 봅시다.
docker/app.py
import pandas as pd
def lambda_handler(event, _):
print(pd.__version__)
return event
2.3 Dockerfile
Lambda에 올리는 Dockerfile의 예는 다음과 같습니다.
(이쪽의 Dockerfile 은 참고의 기사를 그대로 이용시켜 주었습니다)
FROM public.ecr.aws/lambda/python:3.8
COPY app.py requirements.txt ./
RUN python3.8 -m pip install -r requirements.txt -t .
# ここのコマンドは
# app.pyのスクリプトにある、lambda_handlerという関数をエントリポイントにする、
# という意味です。
CMD ["app.lambda_handler"]
다른 Python 버전은 여기을 참조하십시오.
(
2.7
게다가 일단 이용할 수 있는 것 같네요)2.4 CDK에서의 구현
공식 문서를 참고로 구현하겠습니다.
app.py
from aws_cdk import (
aws_lambda as lambda_,
core,
)
class LambdaContainer(core.Stack):
def __init__(self, app: core.App, _id: str):
super().__init__(scope=app, id=_id)
_ = lambda_.DockerImageFunction(
scope=self,
id="container_function",
code=lambda_.DockerImageCode.from_image_asset(
directory="docker",
repository_name="lambda_container_example"
)
)
def main():
app = core.App()
LambdaContainer(app, "LambdaContainer")
app.synth()
if __name__ == "__main__":
main()
2.5 배포
지금까지 할 수 있으면 CDK app.py가 있는 디렉토리에서 다음 명령을 실행하면 배포할 수 있습니다.
# pythonコードが正しいか確認
# 構文エラーがなければ、デプロイ可能なStackが表示されます。
$ cdk ls
LambdaContainer
# 実際にdeploy
$ cdk deploy
배포를 시작하면 평소처럼 리소스를 만들 것인지 묻습니다.
y
를 눌러 진행하면 docker 의 build 가 시작되고,ECR
로 PUSH되어 CDK 배포가 완료되었습니다.2.6 확인
실제로 Lambda 화면에서 확인해 봅시다.
입력 한
event
의 값이 그대로 반환되었거나 pandas.__version__
가 표시되고,docker/app.py
에서 설정한 대로 동작하고 있는 것을 알 수 있군요.또, 실행해 보았더니, 첫회야말로 기동에 조금 시간(3초 정도)이 걸렸습니다만,
2회째 이후는 즉시 결과가 돌아왔습니다.
ECR
의 화면을 확인하면 repository_name
로 기술한 이름으로 등록되어 있었습니다.2.7 리소스 삭제
마지막으로 작성한 리소스는 다음 명령으로 삭제해야 합니다.
$ cdk destroy
단,
ECR
의 리포지토리까지는 삭제되지 않으므로, 불필요한 경우는 수동으로 삭제해 주세요.3. 결론
Lambda는 Lambda이므로 실행 시간 등의 관점에서 이용 장소를 파악할 필요가 있습니다.
다만, Lambda에서도 컨테이너를 이용할 수 있게 된 것으로, 다른 컨테이너의 서비스에 유연하게 이행할 수 있게 되는 것은 매우 기쁘네요.
어느 쪽인가 하면, 지금까지는 Lambda용으로 독자적인 배치 환경등을 준비할 필요가 있었습니다만,
그것이 사라지면 더 많은 사람들이 만지기 쉬워졌다고 생각합니다.
앞으로, reInvent
그럼 4개의 KeyNote도 있고, 2020년도 아직도 즐길 수 있군요.
Reference
이 문제에 관하여(reInvent2020에서 발표된 LambdaContainer를 CDK로 구현해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gsy0911/items/943533045bec5d7de2b1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(reInvent2020에서 발표된 LambdaContainer를 CDK로 구현해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gsy0911/items/943533045bec5d7de2b1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)