はじめに
Fargateでタスクを動かす例を探していましたが、ほとんどWebサービスの例でしたので、自分で調べて記事にしました。
概要
- 文字列をPrintするだけのタスクを動かします
- CloudWatch Logsに出力されます
- Dockerコンテナを作り、ECRにPUSHして、それを実行します
- 使うベースのイメージはUbuntu
- AWS提供イメージではないです
- Pythonをインストールするところからです
- 使うベースのイメージはUbuntu
- ECSはコンソールから作っていきます
- 作成するのはクラスターとタスクになります
- 実行VPCは、デフォルトVPCを使います
やってみた
環境
Cloud9で、t2.microを用いてます。
コンテナ作成
Cloud9上で、コマンドで作っていきます。
# プロジェクトディレクトリ作成
mkdir sample-fargate-task && cd sample-fargate-task
# リージョンとアカウントIDを環境変数にセット
REGION="ap-northeast-1"
ACCOUNTID=$(aws sts get-caller-identity --output text --query Account)
IMAGENAME="test-task1"
touch app.py
touch Dockerfile
def handler(event, context):
print("hogehoge")
if __name__ == "__main__":
handler(None,None)
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3-pip
COPY app.py /function/
WORKDIR /function
ENTRYPOINT [ "/usr/bin/python3" ]
CMD [ "app.py" ]
Buildして、試しに動かしてみます。
docker build -t ${IMAGENAME} .
docker run ${IMAGENAME}
ECRにPUSH
作ったコンテナをECRにPUSHします。
まずECRを作るCFnです。
# ECRリポジトリ作成CFn
touch createECRRepository.yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
RepositoryName:
Type: String
Resources:
TestEcrPoc:
Type: AWS::ECR::Repository
Properties:
RepositoryName: !Ref RepositoryName
Outputs:
Task1RepositoryUri:
Value: !GetAtt TestEcrPoc.RepositoryUri
ECRを作って、PUSHします。
# ECRにレポジトリ作成
REPSTACKNAME="create-ecrrepo-task1"
REPOSITORYNAME="test-task1-ecs"
aws cloudformation create-stack --stack-name ${REPSTACKNAME} \
--template-body file://createECRRepository.yaml \
--region ${REGION} \
--parameters \
ParameterKey=RepositoryName,ParameterValue=${REPOSITORYNAME}
# イメージにタグ付与
TAGNAME=`aws cloudformation describe-stacks --stack-name ${REPSTACKNAME} --query "Stacks[].Outputs[?OutputKey=='Task1RepositoryUri'].[OutputValue]" --output text`:latest
docker tag ${IMAGENAME}:latest ${TAGNAME}
# 認証
aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin ${ACCOUNTID}.dkr.ecr.${REGION}.amazonaws.com
# 作ったイメージをPUSH
docker push ${TAGNAME}
ECSでタスク実行
ここからはコンソールを操作します。
クラスタ作成
ECSの画面で、クラスターの作成を行います。設定はFargateにします。
タスク定義
次はタスク定義をします。
ecsTaskExecutionRole
がない場合、以下のようなロールが自動で作られます。
- ポリシー:AmazonECSTaskExecutionRolePolicy
- 信頼関係:ecs-tasks.amazonaws.com
コンテナの指定をします。
イメージURIはecho ${TAGNAME}
の値をセットします。
また、ポートマッピングは削除しておきます。
後はそのまま、作成します。
タスクの実行
タスク定義から作成したタスクを選択し、タスクの実行をクリックします。
動かすクラスターを選択します。コンピューティング設定は起動タイプにします。
CloudWatch Logsに出ていますので、確認します。
おわりに
今回はタスクを動かすFargateの例を記事にしました。
クラスターとタスクだけでできる例ですので、ちょっと触ってみたいという方はお試しください。
この記事がどなたかのお役に立てれば幸いです。