Lambda든 Glue든 zip으로 만들어서 upload해야 한다.
다른 점은 어디에 upload 해야하느냐 뿐이다.
zip 파일의 이름은 라이브러리 이름으로 하지만 내부 폴더 이름은 python이어야 한다.
$ cd ~ && mkdir python
$ cd python && python3 -m pip install package_name -t .
zip으로 압축한다.
$ zip -r package_name.zip ./python
Lambda
Layer에 upload한다.
콘솔에서 하는게 확실하고 빠르고 편하다.
cli에서 하자면 아래와 같다.
$ aws lambda publish-layer-version --layer-name package_name --zip-file fileb://package_name.zip --compatible-runtimes python3.7
runtime정보는 아래 중에서 고를 수 있다.
nodejs
nodejs4.3
nodejs6.10
nodejs8.10
nodejs10.x
nodejs12.x
java8
java11
python2.7
python3.6
python3.7
python3.8
dotnetcore1.0
dotnetcore2.0
dotnetcore2.1
dotnetcore3.1
nodejs4.3-edge
go1.x
ruby2.5
ruby2.7
provided
Glue
S3 버킷에 넣어두고 스크립트 상에서 다운로드 한다.
그러고보니 Lambda와 다른 점이 있었다.
이번엔 package_name으로 폴더를 만들어서 압축해야 한다.
그렇지 않으면 그런 이름의 모듈을 찾을 수 없다고 에러가 난다.
$ cd where/you/make/package/zip/file/path && mkdir package_name
$ python3 -m pip install package_name -t .
$ zip -r package_name.zip ./package_name
$ aws s3 cp ./package_name.zip s3://bucket_name/key_path/package_name.zip --profile profile_name
Glue는 PySpark가 더 사용하기 쉽게 되어 있지만 나는 Python shell을 사용하므로.
from awsglue.utils import getResolvedOptions
args = getResolvedOptions(sys.argv, ['S3_BUCKET'])
s3 = boto3.resource('s3')
bucket = s3.Bucket(args['S3_BUCKET'])
bucket.download_file('no/need/bucket_name/path/package_name.zip', 'package_name.zip')
os.system('unzip package_name.zip')
import psycopg2