0
1

Elastic Beanstalkで、ECRにPUSHしたコンテナを動かす

Last updated at Posted at 2023-09-16

はじめに

色々なサービスを使って、コンテナにしたplumberを動かしていましたが、今回はElastic Beanstalkを使いました。

概要

  • ECRにコンテナをPUSHし、URIを記載した設定ファイルDockerrun.aws.jsonを、Elastic Beanstalkに渡して実行します
    • Dockerファイルやソースファイルをzipでまとめて、それを渡す方法もあります
      • 今回作るplumberのコンテナは、ビルドに時間がかかってzipの方法ではタイムアウトになるため、ECRにPUSHする方法を使いました。

やってみた

IAMロール、インスタンスプロファイル作成

まず、Elastic Beanstalkで実行するEC2用のインスタンスプロファイルを作成します。

またECRにアクセスするポリシーも付与する必要があります。

ただし、環境のインスタンスプロファイルにアクセス権限を付与することによって、Amazon ECR リポジトリのイメージにアクセスする権限をインスタンスに付与する必要があります。AmazonEC2ContainerRegistryReadOnly 管理ポリシーをインスタンスプロファイルにアタッチして、アカウントのすべての Amazon ECR リポジトリに対する読み取り専用アクセス権限を付与するか、

いつもはCloudformationで作成しますが、インスタンスプロファイル名が指定できないので、コンソールから作りました。

  • 信頼関係
    • EC2
  • ポリシー
    • AWSElasticBeanstalkWebTier
    • AWSElasticBeanstalkWorkerTier
    • AWSElasticBeanstalkMulticontainerDocker
    • AmazonEC2ContainerRegistryReadOnly
  • 名前
    • aws-elasticbeanstalk-ec2-role

コンテナをBuildしてPUSH

t3.smallくらいのCloud9を用意して、以下のページの手順の一部を行いコンテナを作成し、ECRにPUSHします。

  • ディレクトリ・ファイル作成
  • イメージのBuild
  • コンテナイメージを、ECR にアップロードする

設定ファイル作成

以下のページの Docker プラットフォームの設定 (Docker Compose なし) を参考に、Dockerrun.aws.jsonを作成します

Dockerrun.aws.json
{
    "AWSEBDockerrunVersion": "1",
    "Image": {
      "Name": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest"
    },
    "Ports": [
      {
        "ContainerPort": 80
      }
    ]
}

Image - Name に指定する文字列は、先のサイトの手順で作成したのであれば、以下のコマンドでURIを取得できます。

echo `aws cloudformation describe-stacks --stack-name ${STACKNAME} --query "Stacks[].Outputs[?OutputKey=='RepositoryUri'].[OutputValue]"  --output text`:latest

Elastic Beanstalk実行

ではElastic Beanstalkを作っていきます。
image.png
image.png
image.png

プラットフォームはDokcerを選びます。
image.png

コードでDockerrun.aws.jsonを指定します。
image.png

確認するだけなので、単一インスタンスで十分です。
image.png

ロールを指定します。
image.png

こだわりが無ければ レビューまでスキップ します。
image.png

送信 で作成開始します。
image.png

ヘルスがOKになれば成功です。
image.png

接続

ドメインのURLに/helloを追加して確認します。
image.png

その他、/hello/jiro/21の場合。
image.png

/fn?x=2の場合。
image.png

/plotの場合。
image.png

動いているようですね。

おわりに

今回はElastic Beanstalkにコンテナを使ってみました。
ソース群をzipに固めた方が楽ではありますが、アプリが複雑になればbuildに要する時間が増え、タイムアウトを超える恐れを考えると、最初からECRを用いた方法を使った方が良いかもしれません。
この記事がどなたかのお役に立てれば幸いです。

0
1
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
1