AmplifyとCDKの違いを理解する:クラウド開発者が知るべきポイント
- 2025.07.26
- 未分類

AmplifyとCDKの違いを理解する:クラウド開発者が知るべきポイント
AWSのクラウドサービスでフロントエンドからバックエンドまで一括管理できる Amplifyと、自由度の高いInfrastructure as Code(IaC)を実現する CDKの違いについて解説します。両者は共にAWSのCloudFormationを基盤としながらも、 目的や使い勝手が大きく異なります。 この記事では、キーワード「amplifyとCDKの違い」を軸に、初心者にも分かりやすく両者の長所・短所を整理し、 実際の開発でどのように使い分けるべきかを考察します。
AmplifyとCDKの概要
CDKとは?
CDK(Cloud Development Kit)は、AWSが提供するオープンソースのソフトウェア開発フレームワークです。 TypeScriptやPython、Java、C#など慣れ親しんだプログラミング言語でクラウドリソースを定義し、 コードからCloudFormationテンプレートを生成・デプロイすることで、再現可能なインフラ構築を実現します。 AWSの説明によると、CDKは「クラウドアプリケーションのリソースを親しみやすいプログラミング言語で定義する オープンソースのソフトウェア開発フレームワーク」であり、 開発者がインフラストラクチャの細部まで制御したい場合に適しています。
Amplifyとは?
Amplifyは、モバイルやフロントエンドのWeb開発者向けに用意されたフルスタック開発プラットフォームです。 サーバーレスバックエンドの構築・デプロイ、ユーザー認証やデータストアの管理、静的Webサイトのホスティング、 さらにはクラウド接続済みUIコンポーネントまでを提供します。AWS公式サイトでは、Amplifyを「モバイルおよびフロントエンドの 開発者が、数分でセキュアでスケーラブルなフルスタックアプリケーションを構築・デプロイできる一連の製品とツール」 と説明しています。AmplifyはCLIや管理コンソールを通じて、数ステップでアプリ用のバックエンドを構築し、 フロントエンドと接続できるのが特徴です。最新のAmplify Gen2ではTypeScriptを用いたコードファーストの開発体験を提供し、 バックエンドのデータモデルや認証ルールをTypeScriptで記述するとAmplifyが必要なクラウドリソースを自動的に設定します。
両者の共通点と相違点
AmplifyとCDKはいずれも最終的にはCloudFormationテンプレートを生成してAWSにデプロイしますが、 エントリーポイントや抽象度が異なります。AmplifyはモバイルやWebフロントの開発者を主な対象としており、 ユーザー認証やデータAPIなどの構成要素を数行のコマンドで作成できるように設計されています。一方CDKはより低レベルの インフラストラクチャ定義ツールで、ネットワーク、IAMロール、コンテナ基盤など幅広いAWSサービスを自由に組み合わせることができます。 Amplify Gen2は内部的にCDKのコンストラクトを利用しており、Amplify DataやAmplify Authなどのバックエンドコンストラクトは AWS CDKのL3コンストラクトとして提供されています。つまりAmplifyは「CDKで構築された高水準ライブラリ」であり、 用途に応じて両者を組み合わせることも可能です。
項目 | CDK | Amplify |
---|---|---|
主な利用者 | インフラエンジニア、DevOps担当者 | フロントエンド開発者、モバイル開発者 |
定義方法 | TypeScript/Python/Java等で インフラをコード化 | CLIやコンソールでバックエンドを設定、 Gen2ではTypeScriptでモデルを定義 |
カスタマイズ性 | 高い。AWSのあらゆるサービスを自由に構成できる | 限られる。用意されたパターンの範囲内で利用し、 コードファーストでも裏側は自動構成 |
学習コスト | 高い。AWSサービスやCloudFormationの知識が必要 | 低い。数分でバックエンドを構築できるが、深い制御には追加学習が必要 |
代表的なユースケース | 複雑な企業向けシステム、大規模インフラ | スタートアップのプロトタイピング、モバイル/SPAアプリ |
開発スピードと学習コスト
Point:Amplifyは高速に成果を出せる
Amplifyの最大の魅力は、短時間でバックエンドやホスティング環境を構築できる点です。Amplify CLIを使うと、 GraphQLやREST API、認証機能などを対話形式でセットアップでき、その結果をアプリに簡単に連携できます。 上記の比較表にある通り、Amplifyの学習コストは低く、スタートアップやプロトタイプ開発に最適です。 実際、CDKで構築したバックエンドと同等のものをAmplifyで構築した場合、数日ではなく 「週末だけで実現できた」という開発者の体験談があります。 この迅速さは、Amplifyがよく使われるバックエンドパターンをテンプレート化し、自動的にCloudFormationを生成してくれるためです。
Reason:CDKは自由度が高い分、設定作業が多い
CDKは汎用的なインフラコード生成ツールであり、ネットワーク設計からIAM権限の設定まで細かく記述できます。 しかし、その自由度の高さゆえに構成要素が多くなり、初期設定に時間がかかる傾向があります。 個人ブログの記事では、CDKを使ってGraphQLバックエンドを構築するのに、 本業以外の時間を使って約2か月かかったという報告があります。 API定義やDynamoDBのGSI(グローバルセカンダリインデックス)の指定など、すべて手書きで行う必要があり、 その分学習量も増えます。
Example:Amplify CLIとCDKのコード比較
Amplify CLIでは対話的なコマンドでバックエンドを定義します。例えば、GraphQL APIを追加する場合は次のようになります。
# Amplify CLI の例
amplify init # プロジェクトの初期化
amplify add api # GraphQL API を追加
? Please select from one of the below mentioned services: GraphQL
? Provide API name: myapi
? Choose the default authorization type for the API: API key
? Do you have an annotated GraphQL schema? No
? Do you want a guided schema creation? Yes
# ここで対話的にブログアプリやTodoアプリのスキーマを作成できる
amplify push # 変更をデプロイ
対して、CDKでGraphQL API(AppSync)とDynamoDBテーブルを構築する場合、TypeScriptで次のように記述します。
import * as cdk from 'aws-cdk-lib';
import * as appsync from 'aws-cdk-lib/aws-appsync';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
export class GraphQlStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// DynamoDB テーブル
const table = new dynamodb.Table(this, 'ItemsTable', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
});
// AppSync API
const api = new appsync.GraphqlApi(this, 'Api', {
name: 'my-api',
schema: appsync.Schema.fromAsset('schema.graphql'),
authorizationConfig: {
defaultAuthorization: {
authorizationType: appsync.AuthorizationType.API_KEY,
},
},
});
// データソースとリゾルバーの設定など、さらにコードを記述する
}
}
Amplifyではコマンド一つで生成されるコードや設定を、CDKでは自分で詳細に定義する必要があります。 この柔軟性の高さがCDKの魅力ですが、学習コスト増にもつながります。
Point再提示:目的に応じた使い分けが重要
迅速に機能を試したい場合やフロントエンド寄りの開発者にはAmplifyが向いており、 インフラ設計を学びながら細かい設定を行いたい場合はCDKが適しています。両者の性質を理解し、 プロジェクトの目的に応じて選択することが成功の近道です。
拡張性とカスタマイズ
Point:CDKは高い拡張性、Amplifyは「ハッピーパス」に最適化
CDKはあらゆるAWSサービスを組み合わせられるため、企業向けの複雑なシステムや特殊な要件にも対応できます。 一方Amplifyは、一般的なユースケース(認証・データストア・ホスティングなど)に特化した高水準の抽象化を提供し、 その範囲内では驚くほど簡単に使えますが、想定外のカスタマイズには苦労するケースがあります。 日常的なフルスタック開発でAmplifyを使う開発者も、独自の認証フローや他サービス連携が必要になると、 生成されたテンプレートに手を入れたり、VTL(Velocity Template Language)を編集したりする必要がありました。
Reason:自動生成と手動記述の違い
Amplify Gen2はTypeScriptによるコードファーストの開発体験を提供しつつ、裏側ではAWS CDKの コンストラクトを利用してクラウドリソースを生成します。 このため、用意されたコンストラクトを組み合わせる範囲では簡単に開発できますが、 想定されていないリソースやパーミッションを追加する場合は、Amplifyの拡張機能やカスタムCDK構成を使う必要があります。 一方、CDKを直接用いれば、最初から自由に設計できる反面、すべてを自分で管理する責任が伴います。
Example:CDKでカスタムリソースを追加する
例えば、Amplifyが用意していないS3バケットに対するカスタム設定を行いたい場合、 Amplify Gen2ではadd any AWS service
機能やカスタムリソースの追加が必要ですが、 CDKなら直接リソースを定義できます。以下は、CDKでS3バケットと公開アクセスのブロック設定を追加する例です。
import * as s3 from 'aws-cdk-lib/aws-s3';
const bucket = new s3.Bucket(this, 'MyBucket', {
versioned: true,
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
lifecycleRules: [
{
expiration: cdk.Duration.days(365),
},
],
});
Amplify Gen2でもカスタムCDKコンストラクトを使ってリソースを拡張できますが、 通常のCDKプロジェクトほど自由ではなく、Amplifyの生成ロジックに沿う必要があります。
Point再提示:拡張が必要な場合はCDKが有利
開発初期の高速な立ち上げにはAmplifyが適していますが、独自機能の追加や他AWSサービスとの複雑な統合が必要な場合は、 CDKで構築したほうが自由度が高く安心です。Amplify Gen2でもカスタムCDKの導入が可能なため、 まずAmplifyでプロトタイプを作成し、将来的にCDKへ移行する選択肢を意識しておくと良いでしょう。
運用と管理の違い
Point:Amplifyはマネージドサービス、CDKは自由なデプロイ方法
AmplifyはホスティングやCI/CD機能を含めたマネージドサービスとして提供され、GitHubリポジトリを紐付けるだけで 自動ビルド&デプロイが行われます。Amplify Consoleは環境のプレビューリンクや簡単なロールバック機能を提供しているため、 インフラ管理の負担を減らせます。対してCDKは単体でCI/CD機能を持たず、CodePipelineやGitHub Actionsなどと組み合わせて パイプラインを構築する必要があります。
Reason:運用の自由度と責任
マネージドサービスとしてのAmplifyは環境ごとの認証キーやドメイン設定などをコンソールで簡単に変更でき、 ログやメトリクスはAmplify内に集約されます。しかし、裏側で自動生成されたCloudFormationスタックの状態を直接確認したり、 複数アカウントやリージョンを横断したデプロイを行ったりするのは難しいことがあります。 一方CDKは、スタックの分割やアカウントを跨いだクロススタック参照などを自由に設計でき、監視やアラーム設定も 自ら定義します。その代わり、障害対応やパイプラインの整備など運用負荷は高くなります。
Example:GitHub ActionsでCDKをデプロイする
CDKを自動デプロイするにはCI/CDパイプラインを用意します。以下はGitHub ActionsでCDKスタックをビルドして デプロイする例です。このワークフローでは、Node.js 環境でCDKアプリをビルドし、AWS CDK CLIを使って本番環境にデプロイしています。
name: Deploy CDK Stack
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm install -g aws-cdk
- run: npm install
- run: npm run build
- run: cdk deploy --require-approval never
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ap-northeast-1
Amplifyの場合、Amplify ConsoleにGitHubリポジトリを接続するだけで同様のパイプラインが自動作成されるため、 CI/CDの構築に時間を割かずに済みます。ただし、企業向けの厳格なセキュリティポリシーやカスタムデプロイロジックを適用したい場合は、 CDKによる自前のパイプライン構築が欠かせません。
Point再提示:運用管理の手間と柔軟性を天秤に
Amplifyはバックエンド構築からホスティングまでワンストップで提供するため運用が簡単ですが、 カスタム要件に対応しづらい場合があります。CDKは運用の自由度が高く、複数環境や監査要件のある企業にも対応できますが、 構築・監視・運用の全てを自分たちで管理する必要があります。自分たちのプロジェクトの規模やリソースを考慮し、 適切なツールを選びましょう。
用途別の選び方
最後に、目的別にAmplifyとCDKの選択基準を整理します。以下のような観点から選ぶと良いでしょう。
- プロトタイピングやスタートアップ: アイデアを迅速に形にしたい場合はAmplifyが適しており、バックエンドやCI/CDを数分で整備できます。 開発者の学習コストも低く、UIに集中できます。
- 中規模から大規模のシステム: 複雑な認可制御やマイクロサービス構成が必要な場合、CDKの方が自由度と安定性が高く、 インフラの全体像を把握しながら設計できます。
- 学習目的: AWSサービスやIaCの仕組みを深く理解したいなら、CDKで一から構築することをおすすめします。 一方、フロントエンドに専念しつつクラウドを触りたい場合はAmplifyが導入しやすいです。
- ハイブリッド: Amplify Gen2はCDKコンストラクトを取り込むことができるため、まずAmplifyで素早く構築し、 後からCDKを追加して拡張するアプローチも可能です。これにより、 初期投資を抑えながら将来的な拡張に備えられます。
まとめ
本記事では「amplifyとCDKの違い」をテーマに、両者の特徴・長所・短所を比較しました。CDKは 親しみやすいプログラミング言語でインフラを記述できる自由度の高いIaCツールであり、 企業向けの複雑な要件にも対応できます。Amplifyは、モバイルやフロントエンド開発者が 数分でフルスタックアプリを構築できる高水準のプラットフォームであり、 Gen2ではTypeScriptベースのコードファースト体験を実現しています。一方で、 Amplifyは「ハッピーパス」に最適化されているため、想定外のカスタマイズや大規模システムには不向きな面もあります。 CDKは学習コストが高いものの、アーキテクチャを理解する上で有用であり、自ら運用・監視を構築できるメリットがあります。
どちらか一方を選ぶのではなく、プロジェクトの規模やリリース速度、チームのスキルセットに応じて使い分けることが重要です。 Amplifyで素早く価値を検証し、将来的にCDKを導入して拡張するハイブリッドなアプローチも検討してみてください。
-
前の記事
SNS運用をフリーランスで成功させる方法 2025.07.26
-
次の記事
GitHub Actionsのワークフロー例 2025.07.27