新サービス AWS App Runner を使ってみた

# 初めに

AWSの新サービス**App Runner**がローンチされました。どんな手順でWebアプリをデプロイできるのか確認してみました。ECSよりも格段にデプロイが簡単でした。

### App Runner

- コンテナネイティブのフルマネージドサービス
- オーケストレーターの設定、ビルドパイプラインの準備、ロードバランサーの調整、 TLS 証明書のローテートなどは必要ない
- サーバーレス
- ECR または GitHub をプロバイダーとして利用可能

https://aws.amazon.com/jp/blogs/news/introducing-aws-app-runner/

# デプロイ手順

## 事前準備
今回はECRを使います。事前にECRにイメージをプッシュしておきます。

## 1 イメージを選択

「参照」をクリックし使用するイメージを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/48ce161b-9ec1-2279-d68c-2d2414e252d2.png)


## 2 ロールの選択

App Runner が ECR からイメージをプッシュできるように権限を付与します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/5da42e99-47d4-9ec1-b327-3936cf1e93c8.png)

こちらのポリシーがアタッチされたロールが作成されました。

```
{
    "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"
    }
  ]
}
```

ロール名
AppRunnerECRAccessRole

ポリシー名
AWSAppRunnerServicePolicyForECRAccess

## 3 サービス設定

### 3.1 サービス設定

サービス名、CPU・メモリ、ポートを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/1652cfcf-391a-1445-4ff8-81d1d63aeb1e.png)

最初、イメージでエクスポートするポートをここで設定するポートと異なるポート番号を指定したために、失敗しました。**失敗例**にこのことを記載しました。

### 3.2 スケーリング設定

#### デフォルト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/6712579e-97c7-3c0a-6796-4b2952c061f0.png)


#### カスタム

「新規追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/26d80a12-094d-172d-7aec-cb1f5c3808a3.png)


設定名、スケーリングのしきい値などを設定し、保存をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/be4f5e98-f06a-89e2-4b37-93dd81d26344.png)


### 3.3 ヘルスチェックの設定

ロードバランサーによるヘルスチェックの設定をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/ac25332e-bb30-276c-8771-2dc045836403.png)

### 3.4 セキュリティ設定

他のサービスへアクセスしたい場合はここでロールを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/aede0dd1-0a37-061b-be3f-09e78d43738f.png)

## 4 確認画面

「作成とデプロイ」をクリックします。
**注意**
「新しいロールの作成」で App Runner のサービスを作成を行ったところ、ロールに関するエラーが発生しました。しかし少し時間をおいて（1～2分）、再度「作成とデプロイ」をクリックしたところ、問題なくデプロイが開始されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/4311f4c3-c342-0821-7a13-e14e9362d35e.png)

## 5 デプロイ

サービスを作成している状態です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/92aa483a-f6c5-2692-7a1e-345c5e2e2b1a.png)

成功すればステータスがRunningに切り替わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c4fdf26b-03fa-26ed-15d3-11ca1889904a.png)

# 失敗例

コンテナのポートと App Runner のポートが異なっていた場合、デプロイに失敗しました。

```
EXPOSE 80
```

上はDockerfile、下の画像はApp Runnerで設定するポートです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c43582b4-9694-e17c-8cbd-3a8ebd541215.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/2b094cc6-5cfa-bf5d-907f-ccfa5bd0b05b.png)

# 再デプロイ

デプロイ設定を**手動**にしている状態でイメージを編集した場合、自動ではその編集内容は反映されません。以下の「デプロイ」をクリックすると反映されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/ef3bfbf8-f17e-a660-3f8c-6e8509ed55c8.png)

# デプロイ設定の変更

デプロイ方法を変更したい場合、設定タブで「編集」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/b7903b82-c9c7-3969-cacd-029642027aeb.png)

「自動」を選択し、「変更を保存」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/9739186a-3726-6857-a610-743e1d01c391.png)

この状態でイメージをプッシュし直すと自動でデプロイされます。

# 参考記事

https://aws.amazon.com/jp/blogs/news/introducing-aws-app-runner/