AWS App Runnerの特徴と料金、CloudFormationのResource

awscontainer

AWS App Runnerは最低限の設定でロードバランシングやオートスケール、ログやメトリクス、ドメインや証明書などを備えた、 リクエストベースのステートレスなコンテナアプリケーションを動かすことができるマネージドサービス。 Elastic BeanstalkのようにEC2やALB、AutoScaling Groupなどのリソースを作成するのではなく内部に持つ。

料金は、東京リージョンの場合

  • レイテンシを抑えるために常にプロビジョニングされるコンテナインスタンスのメモリ量: 0.009 USD/GB
  • リクエストを処理するアクティブなコンテナインスタンスのCPUとメモリ量: 0.081 USD/vCPU, 0.009 USD/GB

およびビルド時間で算出される。 Lambda(+ API Gateway)と異なりリクエストが来なくても最小インスタンスのメモリ分のコストは発生するのと、 Fargateが0.05056 USD/vCPU, 0.00553 USD/GBであることを考えると少し割高に見えるが、 Lambdaの制約を受けずに、リクエストが来ない時間帯はコストが抑えられるのは良さそうだ。

FargateでECSを使う - sambaiz-net

コンテナアプリケーション管理のCLIツールAWS CopilotもApp Runnerに対応していて、 Environmentを作成するとVPCが作られるが、現状App RunnerはVPCに対応していない。 private subnetのRDSにアクセスしたり、ドキュメントでも言及されているようにElastiCacheにキャッシュを持てるようになるので対応されると嬉しい。

CloudFormationのResourceは現状AWS::AppRunner::Serviceのみで、 これと必要なRoleだけ作れば最低限動き、https://h2w86ea3gf.ap-northeast-1.awsapprunner.com/ のようなURLでアクセスできる。 まだリリースされたばかりでAutoScalingのResourceがなかったりするので、今後のアップデートに期待している。

Resources:
  AccessRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2008-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - build.apprunner.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSAppRunnerServicePolicyForECRAccess

  TestService:
    Type: AWS::AppRunner::Service
    Properties:
      ServiceName: test-service
      SourceConfiguration:
        AuthenticationConfiguration:
          AccessRoleArn: !GetAtt AccessRole.Arn
        ImageRepository:
          ImageIdentifier: "****.dkr.ecr.ap-northeast-1.amazonaws.com/*****:latest"
          ImageRepositoryType: ECR
          ImageConfiguration:
            Port: 80
      InstanceConfiguration:
        Cpu: 1024
        Memory: 2048