LoginSignup
43
52

More than 1 year has passed since last update.

話題のAWS App Runnerをハンズオン!

Last updated at Posted at 2021-05-22

App Runnerとは?

App Runnerはコンテナネイティブのフルマネージドサービスです。オーケストレーターの設定、ビルドパイプラインの準備、ロードバランサーの調整、 TLS 証明書のローテートなどは必要ありません。そしてもちろん、管理すべきサーバもありません。

ソースコード、コンテナを用意すれば、ロードバランサー、オートスケーリングなどなどをAWSがフルマネージドにやってくれて、簡単にAWSに展開できる話題のサービス!

料金

Asia Pacific (Tokyo) Region

$0.009 / GB時間
$0.081 / vCPU

Add-ons
料金
自動デプロイ $1 / 1アプリケーション(月)
ビルド $0.005 / ビルド料金(分)

注意事項

本投稿は2021-05-22時点の情報になり、サービスのアップデート次第で内容が変わる可能性があります。

ハンズオン 🚀

ワークショップを参考にコンテナをデプロイしてみます!

アプリケーションの用意

ディレクトリ作成
$ mkdir apprunner-example
ディレクトリ配下に下記3つのファイルを作成
index.js
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
package.json
{
  "name": "apprunner_example",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {},
  "author": "",
  "license": "ISC"
}
Dockerfile
FROM node:14

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
COPY package*.json ./

RUN npm install

# Bundle app source
COPY . .

EXPOSE 3000
CMD [ "node", "index.js" ]
~/apprunner-example$ ls
Dockerfile   index.js     package.json

ECRのセットアップ

DockerベースのサービスをApp Runnerにデプロイするには、DockerイメージをECRにプッシュする必要があります。

リポジトリ作成
  • プライベート
  • リポジトリ名 => simple-express-repository
リポジトリにイメージプッシュ

プッシュコマンドを参考に先ほど用意したアプリケーションのイメージをECRにプッシュします。

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 1234567890.dkr.ecr.ap-northeast-1.amazonaws.com

$ docker build -t simple-express-repository .

$ docker tag simple-express-repository:latest 1234567890.dkr.ecr.ap-northeast-1.amazonaws.com/simple-express-repository:latest

$ docker push 1234567890.dkr.ecr.ap-northeast-1.amazonaws.com/simple-express-repository:latest

IAMロールの作成

App RunnerがECRプライベートリポジトリにアクセスする際に必要なロールを作成します。
AppRunnerECRAccessRoleという名前で作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:DescribeImages",
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability"
            ],
            "Resource": "*"
        }
    ]
}

信頼関係

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "build.apprunner.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

デプロイ :rocket:

おまちかねのApp Runnerの出番です!
App Runnerコンソールに移動しサービスの作成をします。

  • リポジトリタイプ => コンテナレジストリ

  • プロバイダー => Amazon ECR

  • コンテナイメージのURI => 先ほどECRにプッシュしたイメージ

  • ワークショップのハンズオンだとデプロイトリガーを手動にしていますが、今回は自動で行ってみます。

  • サービスロールを先ほど作成したロールを選択

  • サービス名 => simple-express-docker

  • ポート => アプリケーションで設定した3000ポートを指定

次のページで設定を確認しデプロイし、ステータスがRunningになれば完了です!(数分かかりました。)

デフォルトドメインにアクセスしてみると、

おーー!めちゃくちゃ簡単!!!!

自動デプロイ動作確認

デプロイトリガーを自動とすることでApp Runnerがレジストリを監視してくれ、イメージプッシュごとに新しいバージョンをデプロイしてくれるようです!

index.jsの文字列を変更しECRにプッシュしてみます。

index.js
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  // res.send('Hello World!');
  res.send('Hello App Runner!');
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

プッシュ後すぐにデプロイが始まりました!

デプロイ完了後にデフォルトドメインにアクセスしてみると、

まとめ

数分でコンテナベースアプリケーションをデプロイ出来ました!
App Runnerには、AWSの運用とセキュリティのベストプラクティスが組み込まれており、開発者がアプリケーション開発に集中できる素晴らしいサービスだと思いました。

実践で使えそうな場面では積極的に使ってみようと思います!

参考

AWS App Runner Workshop

43
52
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
43
52