← ハンズオン一覧に戻る

AWS Hands-on / CI・CD

S3に置いたファイルを、
自動的にもう1つの場所へ届ける

AWS CodePipeline は、ビルドステージを挟まずに「ソース→デプロイ」だけの最小構成でも作れます。ソース用のS3バケットにファイルを置くだけで、自動的に配信先のS3バケットへコピーされる、最小構成の2ステージパイプラインを体験します。

● Lv.2 基本的なリソースを作れる人 ⏱ 所要 30〜45 分 コンソールのみで完結
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持っていること
  • 必須マネジメントコンソールにサインインできること
  • 必須S3バケットの作成・ファイルアップロードの基本操作
  • あると良いS3のバージョニング機能について聞いたことがある

※ このハンズオンは すべてコンソールだけで完結します

02 — References

参照する公式ドキュメント

手順に迷ったときや、用語の意味を確かめたいときに開きましょう。

※ リンク切れの場合は、ページタイトルで検索してください。

03 — Background

背景・シナリオ

配信用のファイルを更新するたびに、毎回手作業でアップロードし直すのは手間がかかりますし、アップロード先を間違えるミスも起こりがちです。AWS CodePipeline を使うと、ソースの場所にファイルを置く(更新する)だけで、決められた配信先へ自動的にコピーする仕組みを作れます。

今回は、ビルドのような変換処理を挟まない、もっとも単純な「ソース→デプロイ」の2ステージだけのパイプラインを作り、S3に置いたファイルが自動的にもう1つのS3バケットへ届く様子を確認します。

CodePipelineには必ずビルドステージが必要なの?

いいえ、必須ではありません。ビルドのような変換処理が不要な場合は、ソースステージとデプロイステージだけの最小構成でパイプラインを作ることができます。今回はこの最小構成で進めます。

ソースに使うS3バケットには、何か特別な設定が必要なの?

はい。S3をソースとして使う場合、そのバケットでバージョニングを有効にする必要があります。CodePipelineはバージョンIDの変化を見て、ファイルが更新されたことを検知しています。

Goal

S3ソースアクションとS3デプロイアクションだけの2ステージパイプラインを作成し、ソースバケットにファイルをアップロードすると、配信先バケットに自動的に展開・配置されることを確認する。さらにファイルを更新して、再び自動的に反映されることを確認する。

04 — Architecture

つくる構成

ビルドステージを挟まず、ソースとデプロイだけの最小構成にします。

🪣 S3(ソース) バージョニング有効
⚙️ CodePipeline 更新を自動検知
🪣 S3(配信先) 展開して配置
05 — Requirements

要件

以下の要件を満たし、最小構成のパイプラインによる自動配信を体験してください。

No要件
1ソース用のS3バケットを1つ作成し、バージョニングを有効にする
2配信先用のS3バケットを1つ作成する。
3適当なファイル(例:index.html)を用意してZIP化し、ソースバケットに固定のオブジェクトキー(例:source.zip)でアップロードする。
4CodePipelineで、ソースステージ(Amazon S3)→デプロイステージ(Amazon S3、展開を有効)の2ステージのみのパイプラインを作成する(ビルドステージはスキップする)。
5パイプラインの自動実行後、配信先バケットに展開済みのファイルが置かれていることを確認する。その後、ファイルの内容を更新して同じオブジェクトキーで再アップロードし、再び自動的に実行されることを確認する。
06 — Steps

構築の進め方

「ソースを準備する」→「パイプラインを作る」→「自動実行と更新を確認する」という順番で進めます。

  1. フェーズ1 — ソースを準備する
  2. マネジメントコンソールにサインインし、リージョンを合わせる

    ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。

  3. ソース用S3バケットを作成し、バージョニングを有効にする

    S3バケットを1つ作成します(名前は一意に、例:pipeline-source-yourname)。バケットの「プロパティ」タブから「バケットのバージョニング」を編集し、有効化します。

  4. 配信用ファイルを用意してZIP化し、アップロードする

    ローカルで簡単なテキストファイル(例:index.htmlに短い文章を書いたもの)を1つ作成し、ZIPファイルにまとめます(フォルダを含めず、ファイルが直接ZIPの中に入る状態にします)。このZIPを、固定のオブジェクトキー(例:source.zip)でソースバケットにアップロードします。

  5. フェーズ2 — パイプラインを作る
  6. 配信先用のS3バケットを作成する

    もう1つS3バケットを作成します(名前は一意に、例:pipeline-destination-yourname)。

  7. CodePipelineで最小構成のパイプラインを作成する

    CodePipelineコンソールで「パイプラインを作成する」を選びます。ソースステージでは、ソースプロバイダーに「Amazon S3」を選び、手順2のバケットと手順3のオブジェクトキーを指定します。ビルドステージの設定画面では「ビルドステージをスキップする」を選びます。デプロイステージでは、デプロイプロバイダーに「Amazon S3」を選び、手順4の配信先バケットを指定し、「展開する(Extract)」をオンにします。

    作成と同時に1回実行される

    パイプラインを作成すると、最初の実行が自動的に始まります。作成直後に「実行中」の表示が出ても、それは正常な動作です。

  8. フェーズ3 — 自動実行と更新を確認する
  9. 配信先バケットの内容を確認する

    パイプラインの実行が成功したら、配信先バケットを開きます。ZIPファイルではなく、展開された状態のindex.htmlが置かれていることを確認します。

  10. ファイルを更新して、自動的に反映されることを確認する

    手順3のファイルの内容を少し書き換え、同じファイル名で再度ZIP化し、ソースバケットに同じオブジェクトキーで再アップロードします。CodePipelineの実行履歴に新しい実行が自動的に始まっていることを確認し、完了後に配信先バケットの内容が更新されていることを確認します。

    これがゴール

    手作業でコピーしていないのに、ソースバケットを更新しただけで配信先の内容が変わっている——この状態を確認できたら、このハンズオンの目的は達成です。

07 — Pitfalls

つまずきポイント

初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直すか」の手がかりとして使ってください。

Pitfall 01 — ソースアクションの作成でエラーになる

「S3をソースに設定しようとすると、うまく進めない」

ソースバケットでバージョニングが有効になっているかを見直しましょう。CodePipelineのS3ソースアクションは、バージョニングが有効なバケットを前提としています。

Pitfall 02 — 配信先にZIPファイルがそのまま置かれる

「配信先バケットに、展開されていないZIPファイルが置かれている」

デプロイアクションの設定で「展開する(Extract)」がオンになっているかを見直しましょう。オフの場合、ZIPファイルがそのままアップロードされます。

08 — Checklist

完了チェック

要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。次を順に確かめましょう。

  • パイプラインの実行履歴に、成功(緑色)のステータスが表示されている。
  • 配信先バケットに、ZIPの中身が展開された状態のファイルとして置かれている。
  • ソースバケットに新しいZIPをアップロードした直後に、パイプラインの新しい実行が自動的に始まっている。
  • 2回目の実行完了後、配信先バケットのファイルの内容が更新後のものに変わっている。
09 — Think

考えてみよう

手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。

  1. なぜS3をソースに使う場合、バージョニングが必要になるのでしょうか。
    ヒント
    CodePipelineが「ファイルが更新された」と判断するために、何を比較しているのか考えてみましょう。
  2. ビルドステージを挟まずに直接デプロイする今回の構成は、どんな場合に向いているでしょうか。
    ヒント
    静的なファイルをそのまま配信する場合と、プログラムのコンパイルや変換が必要な場合を比べて考えてみましょう。
  3. 配信先を、実際に世の中へ公開しているWebサイト用のバケットにする場合、追加で検討すべきことは何でしょうか。
    ヒント
    公開設定や、配信前に内容を確認する仕組み、間違った内容を配信してしまった場合の戻し方などを考えてみましょう(このハンズオンでは扱っていない発展的な内容です)。
10 — Clean up

後片づけ

作成したリソースを順番に削除します。

  1. パイプラインを削除する:CodePipelineコンソールから、作成したパイプラインを削除します。
  2. 自動作成されたIAMロールを削除する:パイプライン作成時に新規作成されたサービスロールが残っている場合は、IAMコンソールから削除します。
  3. S3バケットを空にして削除する:ソース用・配信先用バケットの中身(バージョニングを有効にしたバケットは、すべてのバージョンを削除する必要があります)を削除してから、バケット本体を削除します。

コストに関する注意: CodePipeline は、有効化しているパイプラインの数に応じて課金されます。検証が終わったら、不要なパイプラインは削除しましょう。S3の保存容量・リクエストにも別途料金がかかりますが、少量であれば無料利用枠の範囲内に収まることが多いです。バージョニングを有効にしたバケットは、古いバージョンも保存され続けるため、不要なバージョンが残っていないか確認してから削除しましょう。最新の料金は AWS の公式料金ページで確認してください。