ãã£ãã
æ±äº¬å€§åŠã®AWSè¬çŸ©ãã³ãŒãã§åŠã¶AWSå
¥éããããããæ±å€§AWSã£ãŠãã€ãè¯ãããããšèããã®ã§ãã£ãŠã¿ãŸããã
確ãã«ããã¯è¯ãã§ããã¯ã©ãŠããããããåŠã³ããæ¹ã«ãã²ããããã
éäžè¬çŸ©çã«äŒæ¥ã«åæ¥ãããã°åŠã¹ãŸãã
ãããAWSè²»çšããããã
ã»ãšãã©ã®ãã¥ãŒããªã¢ã«ãAWSã®ç¡ææ ã§å®è¡ã§ããŠããŸããŸãããã£ãŒãã©ãŒãã³ã°çšã®GPUã€ã³ã¹ã¿ã³ã¹ãã¶ãåããšããã¯ææã§ããããã§ãæ°çŸåã§æžã¿ãŸãã
ããã¯äžéããã³ãºãªã³ããã£ãŠã¿ãAWSã®è²»çšã§ãã

ãã¯ãåŠã°ãªãçç±ãèŠåœãããŸãããã
ãããæžããçç±
ãã£ããæåãªè¬çŸ©è³æãªã®ã§ããŸãã玹ä»ãããŸã§ããªããã¿ããšæã£ãŠããŸãããããããã£ãŠã¿ãããã³ãºãªã³ã®ã³ãŒããæè¿ã®AWSç°å¢ã§ã¯åäœããªãç®æãããã€ããã£ãã®ã§ã
åäœããããã«ä¿®æ£ããæé ããŸãšããŠãããŸããã
æ¬èšäºãã¯ãŠãã950ä»¶ãããã£ãŠããŸããŸãããQiitaã§ãã¹ããã¯ã«ä¿åã§ããã®ã§ãããšã§ãã£ããã§ãããã®ã§ãã³ãºãªã³ã«ææŠããŠããã ããã°å¬ããã§ãããQiitaçã«ã¯ã¹ããã¯ããããã§ä¿åããŠããã£ãã»ããããããã§ããããã
æ¹ããŠããããã§ãïŒãã©ãïŒ
- CDKã§æäœããã®ã§å®è·µç
- æéã«å¶çŽããã倧åŠè¬çŸ©ãããŒã¹ãªã®ã§ãçæéã§èŠç¹ãåŠç¿ã§ãã質ãšé
- 説æãäžå¯§ã§èªç¿ã§ããïŒéèŠïŒïŒ
- ããããªããŠããšããããAWSãäœéšããŠã¿ããšããäœ¿ãæ¹ã§ãè¯ã
- AWSã³ã³ãœãŒã«ã¯è±èªããŒã¹ã§èª¬æããŠããå®è·µçïŒAWSã®ææ°æ©èœã«è§Šããããã«ãè±èªã«æ £ããŠããæ¹ããããïŒ
èŠããã«ã倧åŠã®åºç€æé€ã®è¬çŸ©è³æãªã®ã§ãã
åŠçããã«éããä»äºã§AWSã䜿ããããªãšãã人ã«ãããããã
泚ïŒè¬çŸ©è³æã®åçšå©çšã¯ã§ããªãã®ã§ãç€Ÿå æè²ã«ã¯äœ¿ããªãããªãŒãããããããããã¯å®¶ã§èªç¿ããªããã
è¬çŸ©è³æã®åé¡ç¹ãšæ¹åç
AWSã¯æ¥ã
é²åããã®ã§ãè¬çŸ©è³æã®å
容ããšããã©ããå€ããªã£ãŠããŸã£ãŠããŸããæŠå¿µãæ§é ã®èª¬æã¯ä»ã§ãéçšããã®ã§å€§äžå€«ã§ãããåã
ã®ãã³ãºãªã³ã§äœ¿çšããã¹ã¯ãªããã®ããŒãžã§ã³äºææ§ã«åé¡ãçããŠããŸãã
ãã°ããããã³ãºãªã³ææãªã®ã§ãããæ¥ã
é²åããITæ¥çã®å®¿åœã
å®éã«ææ°ã®AWSç°å¢ã§ã¯è¬çŸ©è³æã®ã¹ã¯ãªããããšã©ãŒã§æ¢ãŸã£ãŠããŸãç®æããããŸãã
ããã§é©å®ä¿®æ£ããªããé²ããæé ããŸãšããŸããã
ãã³ãºãªã³ããã£ãŠã¿ã
äžæºå
端æ«ã®çšæ
Windows端æ«ã§ãç·Žç¿ã§ããã®ã§ãããæ®æ®µäœ¿ãã®ç«¯æ«ã§ã¯ç°å¢äŸåãªã©ããããšé¢åãªã®ã§ãä»åã¯ä»®æ³ç°å¢ã䜿ãç·Žç¿å°çšã®Ubuntu端æ«ãæ°ãã«çšæããŸããã
$ lsb_release -d
Description: Ubuntu 22.04.4 LTS
çµæãšããŠãŸã£ãããªç«¯æ«ããã¹ã¿ãŒããããšã¬ãã¹ã³ãšåãç°å¢ãæ§ç¯ã§ããã®ã§ããšã楜ã§ãã
AWSã®ã·ãŒã¯ã¬ããããŒãäœæ
ã¬ãã¹ã³ã®æé éãã«ããŒãäœæããŠç·Žç¿çšç«¯æ«ã®~/.aws/ãžä»èŸŒã¿ãŸãã
Dockerå®è¡ç°å¢ãæ§ç¯
ãã³ãºãªã³ç°å¢ãæ§ç¯ããæéãæžãããããDockerã䜿ããŸãã
ã¬ãã¹ã³ãåèã«Dockerã³ãã³ããå®è¡ã§ããç°å¢ãæŽããŸãã
éçºç°å¢ã®ã³ã³ããã«ããããåœãŠã
ãã³ãºãªã³ã§æäŸãããŠããã³ã³ããã䜿ããšå¿ èŠãªãã®ãããã«æãã®ã§è¯ãã®ã§ãããå éšã®ãœãããŠã§ã¢ã®ããŒãžã§ã³ãããå€ãã®ã§ããŒãžã§ã³ã¢ããããªããç°å¢ãæ§ç¯ããŸãã
å ·äœçãªã¢ããããŒãç®æã¯ããã³ãºãªã³çšã®ã³ã³ããã§æäŸãããŠããéçºç°å¢ã¯CDK v1ããŒã¹ãªã®ã§ãããv1ã¯AWSã®ãµããŒããåããŠãããã®ãã¡äœ¿çšã§ããªããªãæžå¿µãããã®ã§ãã³ãºãªã³ã®ã³ã³ãããCDK v2ããŒã¹ã«æ¹é ãããã®ãäœã£ãŠããå§ããŸãã
以äžã®å
容ã®DockerfileãçšæããŸãã
Dockeråå¿è åãã«è£è¶³ããã¡ã€ã«å"Dockerfile"ã®ããã¹ããã¡ã€ã«ãäœããŸã
FROM tomomano/labc:latest
# Update tutorial files for CDK v2
RUN cd /root
RUN git clone -b feature/to_cdkv2 https://github.com/takashi-uchida/learn-aws-by-coding.git v2
RUN rm -rf handson ; mv v2/handson . ; rm -rf v2
# Update environment
RUN npm install -g n
RUN n stable
RUN npm i -g aws-cdk@latest
ãã®å 容ã¯ãå ã ã®ãã³ãºãªã³çšã®ã³ã³ããããã¡ãã«ããCDK v2察å¿ã®ãã®ã䜿ãããã«æ¹å€ãããã®ã§ããCDKã³ãã³ã矀ãv2ãžã¢ããã°ã¬ãŒãããŸãã
å ã»ã©äœæããDockerfileãæ ŒçŽããŠãããã£ã¬ã¯ããªã§ã³ã³ããã€ã¡ãŒãžãäœãã³ãã³ããå©ããŸãã
$ docker build -t labc_v2 .
ã€ã¡ãŒãžãçæãããããšã確èª
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
labc_v2 latest fe0d4423e40c 3 days ago 2.37GB
ã³ã³ãããèµ·åããŸãã
$ docker run -it --rm -v ~/.aws:/root/.aws:ro labc_v2
ïŒã³ã³ããã®ã·ã§ã«ãç«ã¡äžãããŸãïŒ
root@aws-handson:~$
root@aws-handson:~$ cdk --version
2.147.2 (build f4b0897)
å ã»ã©ã®èµ·åã³ãã³ãã¯ã15.8. ãã³ãºãªã³å®è¡çšã® Docker image ã®äœ¿ãæ¹ã«æžããŠãã
$ docker run -it -v ~/.aws:/root/.aws:ro tomomano/labc:latest
ã眮ãæãããã®ã§ãã
以éã¯å ã»ã©äœã£ãDockerã³ã³ããã®äžã«å ¥ã£ãŠãã³ãºãªã³ã®ã¬ãã¹ã³ãé²ããŸããããã§ã¯ãã³ãºãªã³ã®4ç« ããæãåãããŠãããŸãããïŒ
ãã³ãºãªã³å®è¡æã«ããã£ããšãããšå¯Ÿç
ãã³ãºãªã³çšã®ãã¡ã€ã«ã¯2幎ã»ã©åã®ãã®ã§ãããããæšä»ã®AWSã®ä»æ§å€æŽã«æ²¿ããªãããšã§å®è¡æã«ãšã©ãŒãçºçããŠãããç®æããããŸããããã§å¯Ÿå¿ã¡ã¢ãæžããŠãããŸãã
以éãç¹ã«æ³šææžãããŠãããšãã以å€ã¯åºæ¬çã«å
ã»ã©äœæãããã³ãºãªã³çšã³ã³ããå
ã§å®è¡ããã³ãã³ãã§ãã
ååå®è¡æ
CloudFormationã«å€ãCDKãå
¥ã£ãŠãããšã$ cdk deployã§å€±æããŸãã
AWSã³ã³ãœãŒã«ã«ãŠãCloudFormation > Stackesã§CDKToolkitãäžåºŠåé€ããŠãã ããããã®åŸ
$ cdk bootstrap
ã§åæ§ç¯ããŸããCloudFormation > Stackesã®äžèº«ã空ã£ãœãªäººã¯åæèšå®ãå®äºããŠããªãã®ã§ãåããäžèšã³ãã³ããå®è¡ããŠãã ããã
6. Hands-on #2: AWS ã§ãã£ãŒãã©ãŒãã³ã°ãå®è·µ
EC2ã®äžéãªããããäžããŠãããæç¶ããå¿
èŠã§ããããã©ã«ãã§GPUã€ã³ã¹ã¿ã³ã¹ã¯äœ¿çšã§ããªãã®ã§äžéãäžããŠããããŸãã
æè¿AWSãžã®ç³è«æé ãå€ãããŸããŠãè¬çŸ©è³æã«èšèŒãããŠããæé ã¯å€ãã§ããæ¬¡ã®ãããªæé ã§ç³è«ããŸãã
- AWSã³ã³ãœãŒã«ã§
Service Quotas > AWS services > Amazon Elastic Compute Cloud (Amazon EC2)ãéã - 衚瀺èšèªãè±èªã«ãã (çŸåšãã®ç³è«æé ã¯è±èªã®ã¿å¯Ÿå¿ã®ããïŒ
- æ€çŽ¢çªã«
Running On-Demand Gãšå ¥å - é
ç®
Running On-Demand G and VT instancesãã¯ãªã㯠-
Request increace at account levelãã¿ã³ãããã
- EC2ã®Gã€ã³ã¹ã¿ã³ã¹ïŒGPUã¿ã€ãïŒã®äžéã¢ããç³è«ç»é¢ãåºãã®ã§å¿ èŠãªvCPUæ°ãå ¥åããŠéä¿¡
ç³è«ããæ°å€ã¯vCPUæ°ã§ã
ãã³ãºãªã³ã§äœ¿çšããEC2ã€ã³ã¹ã¿ã³ã¹g4dn.xlargeã¯1ã€ã³ã¹ã¿ã³ã¹ã§vCPUã4å䜿ãã®ã§'4'ã§ç³è«ããŸãã
Hands-on #4ã®ãããåŠçã§g4dn.xlargeãè€æ°ååæã«ç«ã¡äžãããå Žåã¯vCPUã4åã¥ã€å¢ãããŠç³è«ããŸãã
7. ç³è«ãéä¿¡ããããš Service Quotas > Quota request history äžã«ãµããŒããã±ããã®ãªã³ã¯ãçæããããµãŒãã¹ã»ã³ã¿ãŒã®ç»é¢ã§AWSãµããŒããšãããšããå§ãŸã
8. 3æéãããåŸã«ãäŸé ŒãåŽäžãããã©ãããŠãå¿
èŠãªãã°äœ¿çšç®çãæããŠãããšè¿äºãæ¥ã
9. ãããããªãã®ã§ãI plan to use one g4dn.xlarge host for experimental purpose for a few weeks.ãïŒå®éšç®çã§ãã§ãããã±ãã«ã€ã¿ã€ïŒãšè¿ä¿¡ã
10. 3æ¥åŸããèš±å¯ãããïŒ ã¯ããã®å¡©å¯Ÿå¿ã¯ãããã«ããèªåå¿çã ã£ããã ããããããšãµããŒãããæèšº
ãããªãããšãã§Gã€ã³ã¹ã¿ã³ã¹ã®vCPUå¢å èš±å¯ãããããŸãããä»ã®èšäºãèŠããšç³è«ãäœåºŠãåŽäžãããã±ãŒã¹ããããããªã®ã§ãã©ããããã®ç©éãã©ããããã®æé䜿ãããããšå®éçã«äŸé Œãæèšããæ¹ãè¯ãã®ã§ã¯ãªãããšæããŸããçžæã¯ãã·ã³ãªãœãŒã¹ã®é åãæ°ã«ããŠããã®ã§ãããã
6.7. å®è·µãã£ãŒãã©ãŒãã³ã°! MNISTææžãæ°åèªèã¿ã¹ã¯
MNISTããŒã¿ã»ããã®æ¬å®¶ãµãŒããèœã¡ãŠããŠããã³ãºãªã³å®è¡æã«è¡ãããããŒã¿ã»ããã®ããŠã³ããŒãã¹ã¯ãªããã倱æã«çµããã±ãŒã¹ããšãŠãå€ãã§ããããã§ãã³ãºãªã³ãå§ããåã«ããŠã³ããŒãå URLã皌åçã®é«ããã©ãŒãµãŒããžå€æŽããŠãããŸãã
Jupyter Notebookã§äœæ¥ãå§ãããšãããŸã§ã¬ãã¹ã³ãé²ãããšããã§ãJupyter Notebookã®Webç»é¢äžã§/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/torchvision/datasets/mnist.pyãéããŠããŒã¿ããŠã³ããŒãå
URLå®çŸ©éšåãä¿®æ£ããŸãã
(æžãæãå)
resources = [
("http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz", "f68b3c2dcbeaaa9fbdd348bbdeb94873"),
("http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz", "d53e105ee54ea40749a09fcbcd1e9432"),
("http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz", "9fb629c4189551a2d022fa330f9573f3"),
("http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz", "ec29112dd5afa0611ce80d1b7f02629c")
]
(æžãæãåŸ)
resources = [
("https://storage.googleapis.com/cvdf-datasets/mnist/train-images-idx3-ubyte.gz", "f68b3c2dcbeaaa9fbdd348bbdeb94873"),
("https://storage.googleapis.com/cvdf-datasets/mnist/train-labels-idx1-ubyte.gz", "d53e105ee54ea40749a09fcbcd1e9432"),
("https://storage.googleapis.com/cvdf-datasets/mnist/t10k-images-idx3-ubyte.gz", "9fb629c4189551a2d022fa330f9573f3"),
("https://storage.googleapis.com/cvdf-datasets/mnist/t10k-labels-idx1-ubyte.gz", "ec29112dd5afa0611ce80d1b7f02629c")
]
9. Hands-on #4: AWS Batch
ãããå ã»ã©ãšåæ§ã«MNISTã®ããŒã¿ã»ããããŠã³ããŒãå URLãä¿®æ£ãã察å¿ãããŸãã
~/handson/aws-batch/docker/Dockerfile ãç·šé
ïŒè¿œèšïŒ
# Patch to modify download URL
RUN sed -i 's/http:\/\/yann.lecun.com\/exdb/https:\/\/storage.googleapis.com\/cvdf-datasets/g' /usr/local/lib/python3.8/dist-packages/torchvision/datasets/mnist.py
# Download MNIST dataset and save in /${HOME}
sedã䜿ããdocker imageçææã«ã©ã€ãã©ãªãä¿®æ£ããããããåœãŠã仿ãã§ãã# Download MNIST...è¡ã®çŽåã«è¿œèšããŸãã
ããã«å®è¡ç°å¢ã®ããŒãžã§ã³æå®ãå€ãããšãåå ã§ãdeployæã«S3ãã±ãããçšæãããšããã§ãšã©ãŒãçºçããŠæ¢ãŸã£ãŠããŸãã®ã§ã~/handson/aws-batch/requirements.txtãä¿®æ£ããŸãã
requirements.txt ãä¿®æ£
ïŒä¿®æ£åïŒ
aws-cdk-lib==2.72.0
ïŒä¿®æ£åŸïŒ
aws-cdk-lib==2.80.0
9.7. Docker image ã ECR ã«é 眮ãã
ãã³ãºãªã³ç°å¢ã®ã³ã³ããã«ã¯Dockerã³ãã³ããå
¥ã£ãŠããªãã®ã§ãã³ã³ããã€ã¡ãŒãžãäœæããŠECRãžã¢ããããŒãããæé ã¯ãã³ãºãªã³ç°å¢ã®ã³ã³ããããã¹ãããŠãã端æ«åŽã§è¡ããŸãã
~/handson/aws-batch/dockerãã£ã¬ã¯ããªããšSCPã䜿çšããŠãã¹ã端æ«ãžã³ããŒããŠããå®è¡ããŸããåç« ã§ä¿®æ£ããDockerfileã䜿ãããšãå¿ããã«ã
9.8. åäžã®ãžã§ããå®è¡ãã
ãã³ãºãªã³ç°å¢ãžã¯rootãŠãŒã¶ãŒã§ã·ã§ã«ã«å
¥ã£ãŠããã®ã§ãããJupyter notebookãµãŒãã¯ã»ãã¥ãªãã£å¯Ÿçã®ããrootæš©éã«ããå®è¡ãããã©ã«ãã§ã¯èš±ããŠããªãã®ã§ïŒããŒã8888ãªã®ã§äžè¬ãŠãŒã¶ãŒæš©éã§ååïŒãã¥ãŒããªã¢ã«éãã«èµ·åã§ããŸããã--allow-rootãªãã·ã§ã³ãã€ããŠèµ·åããŸãã
# .env ã®ä»®æ³ç°å¢ã«ããããšã確èª
(.env) $ cd notebook
(.env) $ jupyter notebook --allow-root
Jupyter notebookã¯ãã³ãºãªã³ã®ã³ã³ããå
ã§çšŒåããŠããã®ã§ãWebãã©ãŠã¶ããã¢ã¯ã»ã¹ããããã«SSHã®ããŒããã©ã¯ãŒãã䜿ããŸããã
ïŒdockerã®-pãªãã·ã§ã³ã¯æã£ãããã«åäœããªãã£ãã®ã§SSHã䜿çšïŒ
ãã³ãºãªã³ç°å¢ã®ã³ã³ããã皌åãããŠãããã¹ã端æ«åŽã«ãŠ
$ docker ps
CONTAINER ID IMAGE ....
8816a77aadbc labc_v2 ....
ã³ã³ããIDæå®ã§ãã³ãºãªã³ç°å¢ã®ã·ã§ã«ã«å
¥ã
$ docker exec -ti 8816a77aadbc bash
ãã³ãºãªã³ç°å¢ãããã¹ã端æ«ãžSSHã§ããŒããã©ã¯ãŒã
root@aws-handson:~$ ssh -R localhost:8931:localhost:8888 (ãã¹ã端æ«ã®ãã°ã€ã³ID)@(ãã¹ã端æ«ã®IP)
ãã®ç¶æ
ã®ãŸãŸããã¹ã端æ«äžã§Webãã©ãŠã¶ãç«ã¡äžããŠhttp://localhost:8931ã§Jupyter notebookãžå
¥ããŸãã
12.1. Lambda ãã³ãºãªã³
Python 3.7ã®ã©ã³ã¿ã€ã ã¯AWSããµããŒãçµäºããã®ã§ãã®ãŸãŸã§ã¯ã§deployæã«ãšã©ãŒã§æ¢ãŸããŸãã
v3.9ã§åããããã«å€æŽããŠããå®è¡ããŸãã
app.py ãä¿®æ£
(ä¿®æ£å)
runtime=_lambda.Runtime.PYTHON_3_7
(ä¿®æ£åŸ)
runtime=_lambda.Runtime.PYTHON_3_9
12.3. S3 ãã³ãºãªã³
ãã®ãŸãŸå®è¡ãããšdeployã§äºææ§ãšã©ãŒãåºãã®ã§ãcdk libããŒãžã§ã³ãäžããå¿ èŠããããŸãã
requirements.txt ãä¿®æ£
(ä¿®æ£å)
aws-cdk-lib==2.70.0
(ä¿®æ£åŸ)
aws-cdk-lib==2.80.0
13. Hands-on #6: Bashoutter
ãã®ãŸãŸå®è¡ãããšpip install, deployæã«ãšã©ãŒãçºçããŠæ¢ãŸãã®ã§ãäžéšä¿®æ£ããŸãã
requirements.txt ãš app.py ãä¿®æ£ããŸãã
requirements.txt ãä¿®æ£
(ä¿®æ£å)
aws-cdk-lib==2.70.0
(ä¿®æ£åŸ)
aws-cdk-lib==2.80.0 <-- ä¿®æ£
urllib3<1.27,>=1.25.4 <-- 远èš
urllib3<1.27,>=1.25.4ã¯pip installæã«çºçããã©ã€ãã©ãªã®äºææ§ãšã©ãŒåé¿ã®ããã§ãã
app.py ãä¿®æ£
(ä¿®æ£å)
website_index_document="index.html",
public_read_access=True,
(ä¿®æ£åŸ)
website_index_document="index.html",
block_public_access=s3.BlockPublicAccess.BLOCK_ACLS, <-- 远èš
public_read_access=True,
(ä¿®æ£å)
common_params = {
"runtime": _lambda.Runtime.PYTHON_3_7,
(ä¿®æ£åŸ)
common_params = {
"runtime": _lambda.Runtime.PYTHON_3_9, <-- ä¿®æ£
block_public_access=s3.BlockPublicAccess.BLOCK_ACLS,ã远èšããçç±ã¯ããããªãã¯å
¬éåã®S3ãæ°èŠçæããéã®ã»ãã¥ãªãã£ä»æ§å€æŽã®ããã§ãã
æçµè¡ã®ä¿®æ£ PYTHON_3_9 ã¯ãåè¿°ããã12.1. Lambda ãã³ãºãªã³ããšåæ§ã«Pythonã®ã©ã³ã¿ã€ã ããŒãžã§ã³ã倿Žããä¿®æ£ã§ãã
泚èš
ã²ãšãŸããšã©ãŒãåºããã«éãã§åäœã§ããæå°éã®ä¿®æ£ã®ã¿ãã£ãŠãŸãã®ã§ãäœæ¥äžã¯ãããªãã«warningãåºãŸãã
ãããã«
æ°ã«å ¥ã£ãŠããã ãããããããïŒããããã£ãŠããã ããšå¬ããã§ãð€