2
0

More than 1 year has passed since last update.

AWS AmplifyでコンテナREST APIをデプロイしiOSアプリと通信する

Last updated at Posted at 2022-10-10

はじめに

AWS Amplifyを用いることでバックエンドの構成をほぼ意識することなくAPI, 認証、データベースなどをAWS環境に構築し、フロントエンドアプリケーションから呼び出すことができます。
REST APIを作成すると、Amazon API GatewayとAWS Lambdaを用いたイベント駆動型の環境を構築できます。ですが、ユースケースによってはイベント駆動ではなく、常駐型のサーバが適切な場合もあるかと思います。
AWS Amplifyではプロジェクト設定を変更することで、このようなケースにコンテナを用いて対応することができます。

今回は、AWS Amplifyを用いてコンテナREST APIをデプロイし、iOSアプリと通信したいと思います。

環境

Amplify CLI: v10.0.0
Xcode: v14.0.1

手順

  1. Xcodeプロジェクトを作成します。
  2. Xcodeプロジェクトディレクトリ直下でAmplify CLIを用いて amplify init でAmplify プロジェクトを初期化します。
  3. Amplify CLIを用いて amplify configure project を実行し、container-based deploymentsを有効にします。

上記の手順を実施することで、コンテナREST APIをデプロイする準備が整います。

iOSアプリからコンテナREST APIに通信する

コンテナREST APIをデプロイした場合もiOSアプリとAPIのインターフェイスは、Amazon API Gatewayです。
これは、AWS Amplify標準のREST API (Amazon API Gateway, AWS Lambda)と同じ構成です。
ですので、iOSアプリからのリクエストはAmplifyライブラリのAPIカテゴリを用いることができます。

// デプロイしたREST APIのパスを指定する
let request = RESTRequest(path: "/")

Amplify.API.post(request: request) { result in
    switch result {
    case .success(let data):
        let str = String(decoding: data, as: UTF8.self)
        print("Success \(str)")
    case .failure(let apiError):
        print("Failed", apiError)
    }
}

コンテナREST APIの実態

AWS AmplifyでコンテナAPIを有効にすることで実際には以下のAWSリソースがデプロイ・利用されています。

  • Amazon VPC
  • Amazon API Gateway
  • AWS Fargate (Amazon ECSがコントロールプレーン)
  • Amazon ECR
  • AWS Cloud Map
  • AWS CodePipeline
  • AWS CodeBuild

Tips

  • amplify configure project を実行し、container-based deploymentsを有効にすると amplify/.config/project-config.jsonfrontend keyの値がjavascriptに変更されてしまいます。そのため、Amplify + iOSプロジェクトに必要な awsconfiguration.jsonamplifyconfiguration.json が消えてしまいます。amplify configure project を再度実行し、必要なファイルを再生成する必要がありました。
  • amplify env remove <env-name> で環境を削除してもAmazon ECR上のリポジトリは削除されませんでした。手動で削除するなどの対応が必要です。

Graviton2を指定できないのカナ!?

AmplifyのコンテナAPIはAWS Fargateをデータプレーンとします。既定のCPUアーキテクチャはx86_64です。ARMプロセッサ環境で問題なくコンテナが動作するようであれば、性能と価格が優れているAWS Gravitonプロセッサを選択したいです。ただ、Amplify CLIで作成したCloudFormationテンプレートを編集して再デプロイ等試してみましたが、AWS FargateにGraviton2を指定することができませんでした。有識者の方やり方あったら教えてください。

参考資料

2
0
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
2
0