AWS App Runnerの特徴と料金、CloudFormationのResource
awsAWS 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の制約を受けずに、リクエストが来ない時間帯はコストが抑えられるのは良さそうだ。
コンテナアプリケーション管理のCLIツールAWS CopilotもApp Runnerに対応していて、 Environmentを作成するとVPCが作られるが、現状App RunnerはVPCに対応していない。 private subnetのRDSにアクセスしたり、ドキュメントでも言及されているようにElastiCacheにキャッシュを持てるようになるので対応されると嬉しい。
(追記 2022-02-09) VPC対応された。
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