[{"data":1,"prerenderedAt":342},["ShallowReactive",2],{"content-\u002Fcontents\u002Faws-fargate":3,"surroundPost-\u002Fcontents\u002Faws-fargate":333},{"id":4,"title":5,"body":6,"createdAt":320,"description":321,"draft":322,"extension":323,"meta":324,"navigation":325,"path":326,"seo":327,"stem":328,"tags":329,"thumbnail":331,"updatedAt":320,"__hash__":332},"contents\u002Fcontents\u002Faws-fargate.md","前処理の日時処理をFargateのスケジュール起動で試してみた",{"type":7,"value":8,"toc":305},"minimark",[9,13,16,19,22,25,54,57,62,65,68,71,89,92,95,98,102,110,113,116,119,122,132,137,140,143,146,149,152,161,165,168,173,176,179,190,193,199,208,211,214,217,220,223,226,228,231,234,237,240,243,246,249,252,255,258,262,265,268,271,274,277,280,284,287,290,293,296,299,302],[10,11,12],"p",{},"今回は AWS でコンテナを扱うサービスについて調べた内容をまとめます。",[10,14,15],{},"具体的には ECS、ECR、Fargate についてです。",[10,17,18],{},"調べた理由は AWS Lambda で難しい処理を行うのにコンテナを使った方法がよいと思ったからです。",[10,20,21],{},"やりたい処理はテキストの前処理です。最近取り組んでいるツイート分析システムで紹介した GiNZA を使った前処理を行うには Lambda では制限に引っかかって無理でした。",[10,23,24],{},"過去記事は以下になります。",[26,27,28,36,42,48],"ul",{},[29,30,31],"li",{},[32,33,35],"a",{"href":34},"about-twitter-api","Python と Twitter API を利用したツイート収集方法",[29,37,38],{},[32,39,41],{"href":40},"aws-lambda-upload-docker","AWS Lambda を使ったツイート収集システム",[29,43,44],{},[32,45,47],{"href":46},"ginza-docker","Docker で GiNZA の環境構築をしてみた|SudachPy のユーザー辞書登録方法も紹介",[29,49,50],{},[32,51,53],{"href":52},"preprocessing","前処理を行いツイートを WordCloud で可視化する方法",[10,55,56],{},"※ 情報が古かったり、間違い等がある場合があります。",[58,59,61],"h2",{"id":60},"ecs-とは","ECS とは",[10,63,64],{},"ECS とはコンテナを管理するサービスです。よくコンテナオーケストレーションサービスなどとも呼ばれます。",[10,66,67],{},"複数のコンテナを手動で管理するのは大変なので ECS のようなオーケストレーションサービスが使われます。",[10,69,70],{},"ECS では以下のような構造でコンテナを管理します。",[26,72,73],{},[29,74,75,76],{},"ECS\n",[26,77,78],{},[29,79,80,81],{},"クラスター\n",[26,82,83,86],{},[29,84,85],{},"サービス",[29,87,88],{},"タスク定義",[10,90,91],{},"クラスターというのは、サービスやタスク定義をまとめる単位です。",[10,93,94],{},"次にサービスは複数のコンテナを管理する単位です。例えば、Auto Scaling などでコンテナ数をコントールするのはサービスで管理できます。",[10,96,97],{},"タスク定義というのが実際のコンテナの設定部分です。\nコンテナイメージは ECR にアップされているものを指定します。",[58,99,101],{"id":100},"fargate-とは","Fargate とは",[10,103,104,105,109],{},"公式では",[106,107,108],"strong",{},"コンテナ向けサーバレスコンピューティングエンジン","と言われています。",[10,111,112],{},"コンテナを使うにはコンテナをのせる場所が必要です。AWS ではコンテナをのせる場所として EC2 か Fargate を選択することができます。",[10,114,115],{},"EC2 の場合は EC2 の管理もしなくてはいけないというのがデメリットでしたが、Fargate の場合はホストマシンの管理が不要になります。",[10,117,118],{},"特別な理由がなければ EC2 より Fargate を使った方が楽です。ただし、料金については EC2 のほうがスペックあたりで比較すると割安です。",[10,120,121],{},"Fargate の料金は利用するメモリと CPU ごとに値段が設定されており、それらの稼働時間によって計算されます。",[10,123,124,125,131],{},"詳しい料金は",[32,126,130],{"href":127,"rel":128},"https:\u002F\u002Faws.amazon.com\u002Fjp\u002Ffargate\u002Fpricing\u002F",[129],"nofollow","公式サイト","に記載されてます。",[133,134,136],"h3",{"id":135},"fargate-spot","Fargate Spot",[10,138,139],{},"最近でたのがこの Faragate Spot。",[10,141,142],{},"EC2 のスポットインスタンスのようなものです。",[10,144,145],{},"なんと Fargate 価格から最大 70%割引で利用できるとのこと。",[10,147,148],{},"EC2 のスポットインスタンス同様に起動したタスクが中断される可能性があります。",[10,150,151],{},"Fargate Spot については情報が少ないですが、クラメソさんの記事が参考になります。",[26,153,154],{},[29,155,156],{},[32,157,160],{"href":158,"rel":159},"https:\u002F\u002Fdev.classmethod.jp\u002Farticles\u002Ffargate-spot-detail\u002F",[129],"Fargate をスポットで 7 割引で使う Fargate Spot とは？ #reinvent",[58,162,164],{"id":163},"fargate-の使い方","Fargate の使い方",[10,166,167],{},"コンテナを実行するまでの流れは以下になります。今回はサービスを使わずに単体のタスクを Fargate で起動することを想定しています。",[169,170],"img",{"alt":171,"img-src":172},"Fargate 使い方","\u002Fimg\u002Faws-fargate\u002Fpart3.jpg",[10,174,175],{},"図にある ECR は Docker コンテナレジストリです。DockerHub の AWS 版です。あらかじめ ECR でリポジトリで作成し、ローカルから Docker イメージを ECR に push します。",[10,177,178],{},"今回使用するイメージの Dockerfile は以下です。",[180,181,186],"pre",{"className":182,"code":184,"language":185},[183],"language-text","# ベースとなるDockerイメージ指定\nFROM python:3.7.7\n\n# python package\nRUN pip install --upgrade pip\nRUN pip install pandas wordcloud emoji neologdn boto3\nRUN pip install -U ginza\n\nCOPY .\u002Fpreprocess\u002F \u002Fhome\u002Fwork\n\n# コンテナログイン時のディレクトリ指定\nWORKDIR \u002Fhome\u002Fwork\u002F\n\nCMD [\"sh\", \"init.sh\"]\n","text",[187,188,184],"code",{"__ignoreMap":189},"",[10,191,192],{},"この Dockerfile については、以下の記事に書いてある内容を少し変えただけなので、よければ参考にしてください。",[26,194,195],{},[29,196,197],{},[32,198,47],{"href":46},[10,200,201,202,207],{},"また、",[32,203,206],{"href":204,"rel":205},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fja_jp\u002FAmazonECS\u002Flatest\u002Fuserguide\u002Fwhat-is-fargate.html",[129],"公式ドキュメント","にも詳しい Fargate に関する情報が記載されています。",[133,209,210],{"id":210},"クラスター作成",[10,212,213],{},"AWS コンソールから ECS を選択します。ECS ではまずクラスターを作成します。",[169,215],{"alt":171,"img-src":216},"\u002Fimg\u002Faws-fargate\u002Fpart1.jpg",[10,218,219],{},"今回は Auto Scaling を使わないので左上のネットワーキングのみを選択します。",[10,221,222],{},"次はクラスター名などを決めます。クラスターはこれだけで終わりです。",[169,224],{"alt":171,"img-src":225},"\u002Fimg\u002Faws-fargate\u002Fpart2.jpg",[133,227,88],{"id":88},[10,229,230],{},"続いてタスク定義を行います。ECS からタスク定義のページにいき、新しいタスク定義の作成を選択します。",[10,232,233],{},"まず起動タイプは Fargate を選択します。",[169,235],{"alt":171,"img-src":236},"\u002Fimg\u002Faws-fargate\u002Fpart4.jpg",[10,238,239],{},"あとは、タスク実行ロールと必要なメモリと CPU を指定します。メモリと CPU はあとから簡単に変更できるので適当で大丈夫です。ECS のクラスターからメトリクスが見れるので、CPU の使用率などをみて調整すると無駄のない調整ができます。",[10,241,242],{},"そのあとは、コンテナの追加から ECR にあるイメージを指定して完了です。",[169,244],{"alt":171,"img-src":245},"\u002Fimg\u002Faws-fargate\u002Fpart5.jpg",[10,247,248],{},"注意として、タスク実行ロールにはコンテナで実行する処理に必要なロールを割り当てる必要があります。例えば、今回は S3 にアクセスする処理があるので S3 のアクセス権が必要です。",[133,250,251],{"id":251},"コンテナ定期実行",[10,253,254],{},"作成したクラスターを選択し、そこからタスクのスケジューリングを選び、作成を押下します。",[10,256,257],{},"まずスケジュールの実行間隔を定義します。やり方は CloudWatch Events と同じです。",[169,259],{"alt":260,"img-src":261},"タスクのスケジューリング","\u002Fimg\u002Faws-fargate\u002Fpart7.jpg",[10,263,264],{},"その下でスケジュールで実行するターゲットを指定します。",[169,266],{"alt":171,"img-src":267},"\u002Fimg\u002Faws-fargate\u002Fpart8.jpg",[10,269,270],{},"起動タイプは Fargate で、さきほど作成したタスク定義を選択します。",[169,272],{"alt":171,"img-src":273},"\u002Fimg\u002Faws-fargate\u002Fpart9.jpg",[10,275,276],{},"セキュリティグループや VPC を選びます。新しい VPC を作成していなければデフォルトの VPC で大丈夫です。サブネットはプライベートなものを選択します。",[10,278,279],{},"画像ではパブリック IP が DISABLED になっていますが、ENABALED にしないとタスクが実行されませんでした。",[58,281,283],{"id":282},"boto3-は使える","boto3 は使える？",[10,285,286],{},"ローカルで boto3 を使う場合は aws cli を docker コンテナで使えるように認証を設定する必要があったので、ECS で boto3 を使う場合も必要なのか疑問でした。",[10,288,289],{},"結論としては、コンテナに aws cli のインストールや認証情報の設定は必要なかったです。適切なロールを作成し、タスクに設定すれば大丈夫なようです。",[10,291,292],{},"ただ、ローカルでの検証時には認証情報が必要になるので、コンテナに認証情報をなんらかの方法で渡す必要があります。",[58,294,295],{"id":295},"感想",[10,297,298],{},"Fargate が思っていたよりも安く使い勝手がよく驚きました。",[10,300,301],{},"普段から Docker を使って環境構築を行っていたので簡単に利用開始できたのもよかったです。",[10,303,304],{},"気になっているのは Fargate Spot がタスクのスケジュール実行で利用できているのかです。\n一応キャパシティープロバイダーで Fargate spot の Base を１にして Fargate のほうを０にしてみました。\nログにはどちらのインスタンスが使われたのかが見当たらなかったので料金から逆算するしかないのかなーと考えてます。",{"title":189,"searchDepth":306,"depth":306,"links":307},2,[308,309,313,318,319],{"id":60,"depth":306,"text":61},{"id":100,"depth":306,"text":101,"children":310},[311],{"id":135,"depth":312,"text":136},3,{"id":163,"depth":306,"text":164,"children":314},[315,316,317],{"id":210,"depth":312,"text":210},{"id":88,"depth":312,"text":88},{"id":251,"depth":312,"text":251},{"id":282,"depth":306,"text":283},{"id":295,"depth":306,"text":295},"2020-04-11","Lambdaではできない日時処理をAWS Fargateのタスクのスケジュール実行機能で試してみました。Fargateの基本的な情報やタスクの定期実行を行うまでの手順を紹介します。",false,"md",{},true,"\u002Fcontents\u002Faws-fargate",{"title":5,"description":321},"contents\u002Faws-fargate",[330],"AWS","\u002Fimg\u002Ftwitter-card.png","3wHH0sEm5xH4AZxFAwDXZ2GkDdBP92PxzKTJFd1a_1Y",[334,338],{"title":335,"path":336,"stem":337,"children":-1},"Argus Paper Summary","\u002Fcontents\u002Fargus-evidence-assembly","contents\u002Fargus-evidence-assembly",{"title":339,"path":340,"stem":341,"children":-1},"AWS Lambdaを使ったツイート収集システム","\u002Fcontents\u002Faws-lambda-upload-docker","contents\u002Faws-lambda-upload-docker",1782427531208]