

# AWS CLI を使用して最初の Express Mode サービスを作成する
<a name="express-service-getting-started"></a>

このチュートリアルでは、AWS AWS CLI を使用して Express Mode サービスアプリケーションを作成する方法を紹介します。Express Mode サービスのコア機能を示すシンプルなウェブアプリケーションをデプロイします。

## 前提条件
<a name="express-service-prerequisites"></a>

開始する前に、以下を確認してください。
+ 適切なアクセス許可が付与されている AWS アカウント
+ AWS AWS CLI がインストールされ、設定されている
+ Amazon ECR またはプライベートレジストリに保存されたコンテナイメージ

## ステップ 1: IAM ロールを作成する
<a name="express-service-create-execution-role"></a>

Express Mode サービスには 2 つの IAM ロールが必要です。タスク実行ロールを使用すると、Amazon ECS はユーザーに代わってコンテナイメージをプルし、ログを書き込むことができます。次のポリシーを使用して、タスク実行ロールとインフラストラクチャロールを作成します。

```
#Create the roles with ECS trust policies
aws iam create-role --role-name ecsTaskExecutionRole \
    --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "ecs-tasks.amazonaws.com"
                },
                "Action": "sts:AssumeRole",
            }
        ]
    }'

aws iam create-role --role-name ecsInfrastructureRoleForExpressServices \ 
    --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "AllowAccessInfrastructureForECSExpressServices",
                "Effect": "Allow",
                "Principal": {
                    "Service": "ecs.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }'
```

```
#Attach the AWS managed policies
aws iam attach-role-policy --role-name ecsTaskExecutionRole \
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
aws iam attach-role-policy --role-name ecsInfrastructureRoleForExpressServices \
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRoleforExpressGatewayServices
```

詳細については、「[Amazon ECS タスク実行IAM ロール](task_execution_IAM_role.md)」を参照してください。

## ステップ 2: 最初の Express Mode サービスアプリケーションを作成する
<a name="express-service-create-basic"></a>

最低限の必要なパラメータを使用して Express Mode サービスアプリケーションを作成します。

```
aws ecs create-express-gateway-service \
    --primary-container "image"="public.ecr.aws/nginx/nginx:latest" \
    --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \
    --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \
    --monitor-resources
```

このコマンドは、以下を備えた Express Mode サービスアプリケーションを作成します。
+ イメージ名から生成された一意のサービス名
+ 1 vCPU と 2 GB メモリ
+ HTTPS トラフィック用のポート 80
+ CPU 使用率に基づく自動スケーリング
+ デフォルトの VPC およびパブリックサブネットのインターネット向け Application Load Balancer
+ このサービスに一意の URL (`servicename.ecs.region.on.aws` 形式)

このコマンドは、プロビジョニング中のリソースを継続的にモニタリングし、ステータスを返します。サービスのデプロイが完了すると、アプリケーション URL はトラフィックを受信する準備が整います。モニタリングを中断すると、サービス ARN や URL など、作成されたサービスに関する情報が返されます。

```
{
    "service": {
        "cluster": "arn:aws:ecs:region:123456789012:cluster/default",
        "serviceName": "nginx-1234",
        "serviceArn": "arn:aws:ecs:region:123456789012:service/default/nginx-1234",
        "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices",
        "status": {
            "statusCode": "ACTIVE"
        },
        "createdAt": "UNIXTIMESTAMP"
    }
}
```

## ステップ 3: カスタム設定で Express Mode サービスアプリケーションを作成する
<a name="express-service-create-custom"></a>

追加のパラメータを指定することで、Express Mode サービスアプリケーションをカスタマイズできます。

```
aws ecs create-express-gateway-service \
    --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \
    --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \
    --primary-container '{"image":"123456789012.dkr.ecr.region.amazonaws.com/my-app:latest","containerPort":8080,"environment":[{"name":"ENV","value":"production"},{"name":"DEBUG","value":"false"}]}' \
    --service-name "my-web-app" \
    --cpu 2 \
    --memory 4 \
    --health-check-path "/health" \
    --scaling-target '{"minTaskCount":3,"maxTaskCount":100}' \
    --monitor-resources
```

これにより、以下を備えたアプリケーションが作成されます。
+ カスタム名「my-web-app」
+ 2 vCPU と 4 GB メモリ
+ アプリケーショントラフィック用のポート 8080
+ カスタムのヘルスチェックエンドポイント
+ 環境変数
+ 最小 3 タスク、最大 100 タスクの自動スケーリング

## ステップ 4: デプロイをモニタリングする
<a name="express-service-monitor-deployment"></a>

`--monitor-resources` フラグは、Express Mode サービスへの Create、Update、Delete 呼び出しで機能します。ただし、変更アクションとは別に、サービスのリソースをいつでもモニタリングできます。デプロイの時間は、プロビジョニングする必要があるリソースによって異なります。ステータスが `ACTIVE` に変わると、アプリケーションはトラフィックを受信する準備が整います。

```
aws ecs monitor-express-gateway-service --service-arn arn:aws:ecs:region:123456789012:service/app-23d97h88
```

Express Mode サービスアプリケーションの現在の設定とステータスを確認することもできます。

```
aws ecs describe-express-gateway-service --service-arn arn:aws:ecs:region:123456789012:service/app-23d97h88
```

## ステップ 5: アプリケーションにアクセスする
<a name="express-service-access-application"></a>

Express Mode サービスアプリケーションがアクティブになったら、提供された URL を使用してアクセスします。URL 形式は次のとおりです。

```
https://<service-name>.ecs.<region>.on.aws/
```

例えば、次のようになります。

```
https://app-23d97h88.ecs.us-west-2.on.aws/
```

以下を備えたアプリケーションが実行されます。
+ SSL/TLS の自動終了
+ 複数のアベイラビリティーゾーンでのロードバランシング
+ CPU 使用率に基づく自動スケーリング
+ CloudWatch のログ記録とモニタリング
+ 今後の更新のための 5XX ロールバックアラームとカナリアデプロイ 