10月。沖縄は観光シーズン真っ只中だった。
あなた: 「やばい、サイト落ちてる!」
あなたのスマホにも通知が殺到していた。ShimaLinkを利用している飲食店のオンライン予約ページが、軒並みレスポンスを返さなくなっていた。
あなた: 「アクセスログ見ると…今、同時アクセスが通常の10倍になってる。沖縄食品フェアの影響だ。」
あなた: 「うちのサーバー、1台しかないもんな。CPUが100%に張り付いてる。」
必死にプロセスを再起動して、なんとか復旧させた。しかし、アクセスが集中するたびにサーバーが限界を迎える状況は変わらない。
Yuki: 「自前サーバーの限界が来たね。1台のサーバーでは、急激なアクセス増に対応できない。」
あなた: 「サーバーを増やせばいいんですか?」
Yuki: 「物理サーバーを買い足すのは、時間もコストもかかる。しかも、ピークが過ぎたら余剰になる。そこでクラウドの出番だよ。」
あなた: 「クラウドって、AWSとかGCPとか?聞いたことはあるけど、なんか難しそうで…」
Yuki: 「難しくないよ。必要な分だけコンピュータを借りて、使った分だけ払う。それがクラウドの基本。アクセスが増えたら自動で台数を増やし、減ったら減らす。これを”スケーリング”っていうんだ。」
Mika: 「次のフェスティバルシーズンまでに間に合いますか?」
Yuki: 「大丈夫。Dockerコンテナ化は済んでるし、CI/CDパイプラインもある。クラウドへの移行は、思っているよりスムーズにいくはずだよ。」
ShimaLinkの”空”への旅が始まる。
クラウドコンピューティングの基本
「自前サーバーは”家を買う”こと。クラウドは”必要な時だけホテルに泊まる”こと。」 ——Yuki
クラウドとは何か
クラウドコンピューティングとは、インターネット経由でコンピュータリソースを必要な分だけ借りて使うサービスです。
| 比較項目 | 自前サーバー(オンプレミス) | クラウド |
|---|---|---|
| 初期費用 | 高い(サーバー購入) | ほぼゼロ |
| スケーリング | 物理的な増設が必要 | 数分で増減可能 |
| 運用負荷 | すべて自分で管理 | プロバイダーが大部分を担当 |
| 支払い | 固定費 | 従量課金(使った分だけ) |
| 障害対応 | 自分で対応 | プロバイダーが対応 |
クラウドの3つのサービスモデル
┌─────────────────────────────────────┐
│ SaaS(Gmail, Slack等) │ ← すべてお任せ
├─────────────────────────────────────┤
│ PaaS(Heroku, Cloud Run等) │ ← アプリだけ管理
├─────────────────────────────────────┤
│ IaaS(EC2, Compute Engine等) │ ← インフラから管理
└─────────────────────────────────────┘
| モデル | 意味 | 自分で管理するもの | 例 |
|---|---|---|---|
| IaaS | Infrastructure as a Service | OS、ミドルウェア、アプリ | AWS EC2、GCP Compute Engine |
| PaaS | Platform as a Service | アプリのみ | Heroku、Google Cloud Run |
| SaaS | Software as a Service | なし(利用するだけ) | Gmail、Slack |
ShimaLinkではまずPaaSを活用するのが効率的です。
スケーリングの種類
垂直スケーリング(スケールアップ)
サーバーのスペックを上げる(CPUやメモリを増やす)
小さなサーバー → 大きなサーバー
[2CPU/4GB] → [8CPU/32GB]
- 限界がある(物理的な上限)
- ダウンタイムが発生する場合がある
水平スケーリング(スケールアウト)
サーバーの台数を増やす
1台 → 3台 → 5台 → 3台 → 1台
↑ ↑
負荷増加時 負荷減少時
- 理論上は無限にスケール可能
- コンテナ化されていれば実現しやすい
Yuki: 「クラウドの真骨頂は水平スケーリング。ShimaLinkをDockerコンテナ化した理由はここにもあるんだ。同じコンテナを増やすだけでスケールできる。」
従量課金の考え方
クラウドでは使った分だけ支払います。
| リソース | 課金単位 | 例 |
|---|---|---|
| コンピュート | 秒/時間単位 | EC2: $0.01/時間〜 |
| ストレージ | GB/月単位 | S3: $0.025/GB/月 |
| データ転送 | GB単位 | $0.09/GB(送信) |
| API呼び出し | リクエスト数 | Lambda: $0.20/100万回 |
ShimaLinkの場合の月額目安:
- 小規模(〜50クライアント): $50〜100/月
- 中規模(〜200クライアント): $200〜500/月
ポイント
- クラウドは「必要な分だけ借りて、使った分だけ払う」モデル
- IaaS、PaaS、SaaSの3つのサービスモデルがある
- 水平スケーリングでアクセス増減に柔軟に対応できる
- 従量課金で無駄なコストを抑えられる
- コンテナ化されたアプリはクラウド移行が容易
主要クラウドプロバイダーの比較
「どのクラウドが一番かは、何を作るかによる。正解は1つじゃない。」 ——Yuki
3大クラウドプロバイダー
| プロバイダー | 特徴 | シェア |
|---|---|---|
| AWS (Amazon) | サービス数が最多、実績豊富 | 最大 |
| GCP (Google) | データ分析・ML に強い、シンプルな料金体系 | 3位 |
| Azure (Microsoft) | エンタープライズ向け、Windows連携 | 2位 |
主要サービスの比較
| 用途 | AWS | GCP | Azure |
|---|---|---|---|
| 仮想サーバー | EC2 | Compute Engine | Virtual Machines |
| コンテナ実行 | ECS / Fargate | Cloud Run | Container Apps |
| サーバーレス関数 | Lambda | Cloud Functions | Functions |
| オブジェクトストレージ | S3 | Cloud Storage | Blob Storage |
| データベース(SQL) | RDS | Cloud SQL | SQL Database |
| データベース(NoSQL) | DynamoDB | Firestore | Cosmos DB |
| CDN | CloudFront | Cloud CDN | Azure CDN |
| DNS | Route 53 | Cloud DNS | Azure DNS |
ShimaLink に適したサービス構成
AWS での構成例
ユーザー
↓
[CloudFront] ← CDN(静的ファイル配信)
↓
[ALB] ← ロードバランサー
↓
[ECS Fargate] ← Dockerコンテナ実行(サーバーレス)
↓
[RDS PostgreSQL] ← マネージドDB
↓
[S3] ← 画像・ファイル保存
GCP での構成例
ユーザー
↓
[Cloud CDN] ← CDN
↓
[Cloud Load Balancing]
↓
[Cloud Run] ← Dockerコンテナ実行(サーバーレス)
↓
[Cloud SQL PostgreSQL] ← マネージドDB
↓
[Cloud Storage] ← 画像・ファイル保存
マネージドサービスのメリット
自前で管理する場合:
- OSのアップデート
- セキュリティパッチの適用
- バックアップの設定と実行
- 障害時の復旧作業
- スケーリングの設定
マネージドサービスの場合:
- 上記すべてをクラウドプロバイダーが対応
- 開発者はアプリケーションの開発に集中できる
例えば、AWS RDS(マネージドDB)では:
- 自動バックアップ
- 自動パッチ適用
- 自動フェイルオーバー(障害時の自動切り替え)
- ワンクリックでスケーリング
クラウド選定の基準
| 基準 | 詳細 |
|---|---|
| チームの経験 | 既に使い慣れたプラットフォームがあるか |
| サービスの充実度 | 必要なサービスが揃っているか |
| 料金 | 予算に合うか(無料枠の有無も重要) |
| リージョン | 日本リージョンがあるか(レイテンシに影響) |
| ドキュメント | 日本語ドキュメントの充実度 |
Yuki: 「ShimaLinkは沖縄のサービスだから、日本リージョンがあることは必須。AWSの東京リージョン、GCPの東京リージョンなら、沖縄からのレイテンシも許容範囲だよ。」
ポイント
- AWS、GCP、Azureが3大クラウドプロバイダー
- それぞれ同等のサービスを提供しているが、得意分野が異なる
- マネージドサービスを使えばインフラ運用から解放される
- 選定はチームの経験、料金、リージョンなどを総合的に判断する
- まずは無料枠を活用して試してみるのがベスト
クラウドへのデプロイ
「Dockerイメージさえあれば、クラウドへのデプロイはそこまで難しくない。」 ——Yuki
デプロイの全体フロー
ローカル開発
↓
Dockerイメージをビルド
↓
コンテナレジストリにプッシュ
↓
クラウドサービスからイメージをプル
↓
コンテナとして実行
コンテナレジストリ
コンテナレジストリは、Dockerイメージを保存・配布するためのサービスです。
| レジストリ | プロバイダー | 特徴 |
|---|---|---|
| Docker Hub | Docker社 | 最もポピュラー |
| ECR | AWS | AWSとの連携が容易 |
| GCR / Artifact Registry | GCP | GCPとの連携が容易 |
| GHCR | GitHub | GitHub Actionsとの連携が容易 |
Cloud Run へのデプロイ例
Google Cloud Run は、Dockerコンテナをサーバーレスで実行できるサービスです。
1. コンテナレジストリにイメージをプッシュ
# GCPのArtifact Registryにプッシュ
docker tag shimalink-web:latest \
asia-northeast1-docker.pkg.dev/shimalink-project/shimalink/web:latest
docker push \
asia-northeast1-docker.pkg.dev/shimalink-project/shimalink/web:latest
2. Cloud Run にデプロイ
gcloud run deploy shimalink-web \
--image asia-northeast1-docker.pkg.dev/shimalink-project/shimalink/web:latest \
--platform managed \
--region asia-northeast1 \
--port 3000 \
--allow-unauthenticated \
--set-env-vars "NODE_ENV=production"
3. CI/CD と連携
# .github/workflows/deploy-cloud-run.yml
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: GCP認証
uses: google-github-actions/auth@v2
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
- name: Docker イメージをビルド&プッシュ
run: |
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
docker build -t asia-northeast1-docker.pkg.dev/shimalink-project/shimalink/web:${{ github.sha }} .
docker push asia-northeast1-docker.pkg.dev/shimalink-project/shimalink/web:${{ github.sha }}
- name: Cloud Run にデプロイ
uses: google-github-actions/deploy-cloudrun@v2
with:
service: shimalink-web
image: asia-northeast1-docker.pkg.dev/shimalink-project/shimalink/web:${{ github.sha }}
region: asia-northeast1
AWS ECS Fargate へのデプロイ例
AWS Fargate は、サーバーの管理なしでコンテナを実行できるサービスです。
# ECRにイメージをプッシュ
aws ecr get-login-password --region ap-northeast-1 | \
docker login --username AWS --password-stdin 123456789.dkr.ecr.ap-northeast-1.amazonaws.com
docker tag shimalink-web:latest \
123456789.dkr.ecr.ap-northeast-1.amazonaws.com/shimalink-web:latest
docker push \
123456789.dkr.ecr.ap-northeast-1.amazonaws.com/shimalink-web:latest
# ECSサービスを更新(新イメージでデプロイ)
aws ecs update-service \
--cluster shimalink-cluster \
--service shimalink-web \
--force-new-deployment
データベースの移行
ローカルのDBからクラウドのマネージドDBへ移行します。
ローカル PostgreSQL → Cloud SQL / RDS PostgreSQL
# データのエクスポート(ローカル)
pg_dump -h localhost -U shimalink_user shimalink > backup.sql
# データのインポート(クラウド)
psql -h <cloud-db-host> -U shimalink_user shimalink < backup.sql
Yuki: 「Dockerコンテナ化とCI/CDが済んでいるから、クラウドへの移行はイメージの保存先と実行先を変えるだけ。準備が整っているとスムーズだね。」
ポイント
- Dockerイメージをコンテナレジストリにプッシュし、クラウドで実行する
- Cloud RunやFargateならサーバー管理不要でコンテナを動かせる
- CI/CDパイプラインにクラウドデプロイのステップを追加する
- マネージドDBへの移行はpg_dumpとpsqlで行える
- コンテナ化・CI/CD化が済んでいればクラウド移行は比較的容易
サーバーレスの世界
「サーバーレスって、サーバーがないわけじゃない。サーバーのことを考えなくて済むってことだよ。」 ——Yuki
サーバーレスとは
サーバーレスとは、サーバーの管理を一切気にせず、コード(関数)だけに集中できるクラウドの実行モデルです。
| 比較項目 | 従来のサーバー | サーバーレス |
|---|---|---|
| サーバー管理 | 必要 | 不要 |
| スケーリング | 手動/設定が必要 | 完全自動 |
| 課金 | 常時稼働分を支払い | 実行時間分だけ |
| アイドル時 | コスト発生 | コスト0 |
| 起動時間 | 常に起動済み | コールドスタートあり |
サーバーレス関数の仕組み
イベント発生(HTTPリクエスト、タイマー等)
↓
クラウドが自動的に関数を起動
↓
関数が処理を実行
↓
結果を返す
↓
関数が自動的に終了(課金も終了)
AWS Lambda の例
ShimaLinkの予約確認メール送信をLambda関数として実装します。
// functions/sendConfirmation.js
exports.handler = async (event) => {
const booking = JSON.parse(event.body);
// 予約確認メールを送信
await sendEmail({
to: booking.email,
subject: `予約確認: ${booking.shopName}`,
body: `${booking.date} ${booking.time} のご予約を承りました。`,
});
return {
statusCode: 200,
body: JSON.stringify({ message: "確認メールを送信しました" }),
};
};
ShimaLink でのサーバーレス活用
すべてをサーバーレスにする必要はありません。適材適所で使い分けます。
| 処理 | 実行方法 | 理由 |
|---|---|---|
| Webアプリ本体 | Cloud Run / ECS | 常にリクエストを受ける |
| 予約確認メール | Lambda / Cloud Functions | イベント駆動で十分 |
| 画像リサイズ | Lambda / Cloud Functions | アップロード時だけ実行 |
| 日次レポート生成 | Lambda / Cloud Functions | 定期実行(1日1回) |
| データバックアップ | Lambda / Cloud Functions | 定期実行 |
イベント駆動アーキテクチャ
[予約API] → 予約をDBに保存
↓ イベント発行
[メール送信Lambda] → メール送信
↓
[集計更新Lambda] → ダッシュボード更新
メインのAPIは予約の保存だけに集中し、メール送信や集計更新はサーバーレス関数に任せます。これにより:
- APIの応答時間が短くなる
- 各機能が独立して動作する
- 障害の影響範囲が限定される
コールドスタート問題
サーバーレス関数がしばらく呼ばれないと、次の呼び出し時に起動時間(コールドスタート)が発生します。
| 言語 | コールドスタート時間 |
|---|---|
| Python | ~200ms |
| Node.js | ~200ms |
| Go | ~100ms |
| Java | ~1000ms以上 |
対策:
- 軽量な言語(Node.js、Python)を選ぶ
- 関数のパッケージサイズを小さくする
- Provisioned Concurrency(事前ウォームアップ)を利用する
Yuki: 「サーバーレスは銀の弾丸じゃない。常時接続が必要なWebSocketや、長時間実行が必要な処理には向かない。ShimaLinkでは、イベント駆動の処理にだけ使うのが賢い選択だよ。」
ポイント
- サーバーレスは「サーバー管理不要」で「実行時間分だけ課金」されるモデル
- イベント駆動型の処理(メール送信、画像処理、定期実行)に最適
- すべてをサーバーレスにする必要はなく、適材適所で使い分ける
- コールドスタートがあるため、レイテンシに敏感な処理には注意
- メインアプリとサーバーレス関数を組み合わせるのが現実的な設計
ShimaLinkがクラウドで稼働を始めた。最初の負荷テストの結果が出る。
負荷テスト結果:
- 同時接続: 1,000ユーザー
- 平均応答時間: 120ms
- エラー率: 0.01%
- オートスケーリング: 2台 → 5台 → 2台(自動調整)あなた: 「1,000人同時アクセスでも120msで返してる!前は100人でパンクしてたのに。」
あなた: 「しかも、負荷が下がったら自動で2台に戻ってる。無駄なコストがかからない。」
Mika: 「年末の観光シーズン、今年は安心ですね。」
Yuki: 「スケーリングだけじゃない。クラウドのマネージドサービスを使えば、DBのバックアップも自動だし、障害時の復旧も早い。インフラの運用負荷がグッと下がるよ。」
あなた: 「ただ、クラウドの設定をコンソールで手動で作ったから、同じ環境をもう一度作れって言われたら自信ないな…」
Yuki: 「いい気づきだね。実は、インフラもコードで管理できるんだ。Infrastructure as Code——Terraformっていうツールを使えば、クラウドの構成をコードとして記述できる。」
あなた: 「コードとして管理…つまり、Gitでバージョン管理もできる?」
Yuki: 「そう。CI/CDパイプラインでインフラの変更も自動化できるようになるよ。」
次のチャプター: Chapter 19: インフラをコードで — クラウドの設定を手動からコード管理へ。Terraformで再現可能なインフラを構築する。
🧠 理解度チェック
Q1.クラウドコンピューティングの従量課金モデルの説明として正しいのは?
💡 サーバー1台を常時稼働させていた時代と比べて、ピーク時だけスケールするクラウドの方がコスト効率が良い。
Q2.IaaS、PaaS、SaaSの中で、開発者がOSやミドルウェアの管理を気にしなくてよいのは?
💡 ShimaLinkではCloud RunやFargate(PaaS)を使って、インフラ管理から解放されたよね。
Q3.水平スケーリング(スケールアウト)の説明として正しいのは?
💡 沖縄食品フェアのアクセス急増時、サーバー1台では対応できなかった。台数を増やすのがスケールアウトだ。
Q4.コンテナレジストリの役割は?
💡 ローカルでビルドしたShimaLinkのイメージを、クラウドで動かすために中間の保管場所が必要だった。
Q5.サーバーレス関数の課金方式として正しいのは?
💡 予約確認メールの送信は頻繁には起きないから、サーバーレスなら無駄なコストがかからない。
Q6.サーバーレスのコールドスタート問題とは?
💡 予約確認メール送信のような非リアルタイムの処理なら、コールドスタートがあっても問題ない。
Q7.マネージドデータベース(RDS、Cloud SQL等)を使うメリットは?
💡 自前サーバーではバックアップを手動で取っていたけど、マネージドDBなら自動で安心だ。
Q8.リージョン(地域)の選択で最も重要な基準は?
💡 沖縄のユーザーがメインのShimaLinkだから、日本リージョンを選んだ理由がここにある。
❓ よくある質問
AWS、GCP、Azureのどれを選べばいい?
正解はありませんが、以下を参考にしてください。 **初心者におすすめ:** - **GCP**: Cloud Runがシンプルで始めやすい - 無料枠が充実($300クレジット) **求人・実績重視:** - **AWS**: 最も利用企業が多い - 情報が豊富で学習リソースが充実 **Microsoft製品を使っている場合:** - **Azure**: Office 365やActive Directoryとの連携が容易 **ShimaLinkの場合:** GCPのCloud Runから始めるのがおすすめ。Dockerイメージがあれば数コマンドでデプロイできます。
クラウドの料金が心配。予想外の高額請求が来ない?
対策を取れば安心です。 **予算アラートを設定する:** - AWS: Billing → Budgets で上限設定 - GCP: Billing → Budgets & alerts **無料枠を活用する:** - AWS: 12ヶ月の無料枠あり - GCP: $300クレジット + 無料枠 **注意すべきポイント:** - リソースを使い終わったら必ず削除する - テスト用のインスタンスを放置しない - データ転送料(特に送信)に注意 **月額$50以下に抑えるには:** - 小さなインスタンスから始める - サーバーレスを活用する(使わなければ$0)
gcloudコマンドのインストール方法がわからない
Google Cloud CLIのインストール手順です。 **macOSの場合:** ```bash # Homebrewでインストール brew install --cask google-cloud-sdk # 初期設定 gcloud init # 確認 gcloud --version ``` **初期設定では:** 1. Googleアカウントでログイン 2. プロジェクトを選択(または作成) 3. デフォルトリージョンを設定 ```bash # ログイン gcloud auth login # プロジェクト設定 gcloud config set project shimalink-project # リージョン設定 gcloud config set run/region asia-northeast1 ```
Cloud Runにデプロイしたが「Service Unavailable」エラーが出る
コンテナが正常に起動していない可能性があります。 **確認手順:** 1. **ログを確認** ```bash gcloud run services logs read shimalink-web \ --region asia-northeast1 ``` 2. **よくある原因:** - ポートが合っていない(Cloud Runは`PORT`環境変数を使う) - 環境変数が未設定 - ヘルスチェックに失敗している 3. **ポートの修正** ```javascript // Cloud Runでは PORT 環境変数を使う const port = process.env.PORT || 3000; app.listen(port); ``` 4. **ローカルで同じイメージをテスト** ```bash docker run -p 3000:3000 -e PORT=3000 shimalink-web ```
IaaS、PaaS、SaaSの違いがピンとこない
ピザに例えると分かりやすいです。 | モデル | ピザの例 | IT の例 | |--------|---------|--------| | **IaaS** | 材料だけ買って自分で焼く | サーバーを借りて自分で全部設定 | | **PaaS** | 宅配ピザ(トッピングだけ選ぶ) | アプリをデプロイするだけ | | **SaaS** | レストランで食べる | 完成品を使うだけ | **ShimaLinkでの例:** - IaaS: EC2でサーバーを借りてDockerを自分でセットアップ - PaaS: Cloud Runにイメージを渡すだけで動く - SaaS: Google Analyticsでアクセス解析(開発不要)
ローカルのデータベースをクラウドに移行する方法は?
PostgreSQLの場合の移行手順です。 **1. ローカルDBのバックアップ** ```bash pg_dump -h localhost -U shimalink_user shimalink > backup.sql ``` **2. クラウドDBの作成** - AWS RDS または GCP Cloud SQLでインスタンスを作成 - 同じPostgreSQLバージョンを選択 **3. データのインポート** ```bash psql -h <クラウドDBのホスト> -U shimalink_user shimalink < backup.sql ``` **4. アプリの接続先を変更** ``` DATABASE_URL=postgres://user:pass@<クラウドDBホスト>:5432/shimalink ``` **注意:** 移行中はメンテナンスモードにしてデータの不整合を防ぎましょう。
サーバーレス関数はどんなときに使うべき?
以下のケースに向いています。 **向いている処理:** - イベント駆動型(メール送信、通知) - 定期実行(日次レポート、バックアップ) - 画像・動画の変換処理 - APIのバックエンド(軽量な処理) **向いていない処理:** - WebSocket(常時接続) - 長時間実行(15分以上) - 大量のメモリを使う処理 - 高頻度でコールドスタートが問題になる処理 **判断基準:** 「この処理は1日に何回呼ばれるか?」を考えてみましょう。数回〜数百回ならサーバーレスが最適です。
CDNとは何?なぜ必要?
**CDN(Content Delivery Network)** は、世界中にキャッシュサーバーを配置して、ユーザーに近い場所からコンテンツを配信する仕組みです。 **CDNなし:** ``` 沖縄のユーザー → 東京のサーバー(遅い) ``` **CDNあり:** ``` 沖縄のユーザー → 沖縄に近いCDNエッジ(速い) ``` **ShimaLinkでの効果:** - 画像やCSS/JSの配信が高速化 - サーバーへの負荷が軽減 - DDoS攻撃からの保護 **主なCDNサービス:** - AWS CloudFront - GCP Cloud CDN - Cloudflare(無料プランあり)
クラウドのセキュリティは大丈夫?
クラウドプロバイダーは世界最高水準のセキュリティを提供しています。ただし、**共有責任モデル**を理解することが重要です。 | 責任範囲 | プロバイダーの責任 | 利用者の責任 | |---------|-----------------|------------| | 物理セキュリティ | データセンターの管理 | - | | ネットワーク | 基盤の暗号化 | ファイアウォール設定 | | OS | パッチ適用(PaaS) | パッチ適用(IaaS) | | アプリ | - | コードのセキュリティ | | データ | 暗号化基盤の提供 | アクセス制御の設定 | **最低限やるべきこと:** - IAMで最小権限の原則を適用 - シークレットを環境変数で管理 - VPCでネットワークを分離 - 通信はHTTPSを使用
AWS CLIのインストールと初期設定方法は?
AWS CLIのセットアップ手順です。 **macOSの場合:** ```bash # Homebrewでインストール brew install awscli # 確認 aws --version ``` **初期設定:** ```bash aws configure # AWS Access Key ID: (IAMで作成したキー) # AWS Secret Access Key: (シークレットキー) # Default region: ap-northeast-1 # Default output format: json ``` **IAMユーザーの作成:** 1. AWSコンソール → IAM → ユーザー 2. 「ユーザーを追加」 3. プログラムによるアクセスを有効化 4. 必要な権限ポリシーをアタッチ 5. アクセスキーを安全に保管 **注意:** ルートアカウントのキーは絶対に使わないでください。