0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Fargateでスタンドアロンタスクを動かす

Posted at

はじめに

Fargateでタスクを動かす例を探していましたが、ほとんどWebサービスの例でしたので、自分で調べて記事にしました。

概要

  • 文字列をPrintするだけのタスクを動かします
    • CloudWatch Logsに出力されます
  • Dockerコンテナを作り、ECRにPUSHして、それを実行します
    • 使うベースのイメージはUbuntu
      • AWS提供イメージではないです
      • Pythonをインストールするところからです
  • 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
app.py
def handler(event, context):
  print("hogehoge")
    
if __name__ == "__main__":
  handler(None,None)
Dockerfile
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
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にします。

image.png

タスク定義

次はタスク定義をします。

image.png

インフラ定義で、小さいCPUとメモリにしました。
image.png

ロールをあてがいます。
image.png

ecsTaskExecutionRoleがない場合、以下のようなロールが自動で作られます。

  • ポリシー:AmazonECSTaskExecutionRolePolicy
  • 信頼関係:ecs-tasks.amazonaws.com

コンテナの指定をします。
イメージURIはecho ${TAGNAME}の値をセットします。
また、ポートマッピングは削除しておきます。

image.png

以下の設定に変更はしていません。
image.png

ログは出すようにします。
image.png

後はそのまま、作成します。

タスクの実行

タスク定義から作成したタスクを選択し、タスクの実行をクリックします。
image.png

動かすクラスターを選択します。コンピューティング設定は起動タイプにします。
image.png

他のはそのまま設定します。
image.png

クラスターの画面で、現在の状況がわかります。
image.png

実行が完了すると、タスクから消えます。
image.png

CloudWatch Logsに出ていますので、確認します。
image.png

printで指定した文字列が出ていることがわかります。
image.png

おわりに

今回はタスクを動かすFargateの例を記事にしました。
クラスターとタスクだけでできる例ですので、ちょっと触ってみたいという方はお試しください。

この記事がどなたかのお役に立てれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?