- デベロッパーツール›
- AWS CodeDeploy›
- よくある質問
AWS CodeDeploy のよくある質問
全般
すべて開くAWS CodeDeploy は、Amazon EC2 インスタンス、およびオンプレミスで稼働するインスタンスを含む、さまざまなインスタンスへのコードのデプロイを自動化するサービスです。AWS CodeDeploy を使用すると、アプリケーションの複雑なアップデート処理、デプロイ中のダウンタイムの回避、新規機能の迅速なリリースが容易になります。AWS CodeDeploy を使用すると、エラーを起こしやすい手動操作やインフラストラクチャのサービススケールの必要性を排除しながら、デプロイの自動化を行うことが可能となり、1 つのインスタンスへのデプロイや、数千のインスタンスへのデプロイも容易に行うことができます。
AWS CodeDeploy は、Amazon EC2 インスタンス、およびオンプレミスで稼働するインスタンスを含む、さまざまなインスタンスにアプリケーションをデプロイする開発者および管理者向けに設計されています。また、AWS CodeDeploy には柔軟性があり、インスタンスでソフトウェアをアップデートしたり、スクリプトを実行したりするお客様なら、誰でもご使用いただけます。
AWS CodeDeploy はすべてのタイプのアプリケーションのデプロイにご使用いただけます。AWS CodeDeploy を使用するには、デプロイ中にインスタンスにコピーするファイルおよび実行するスクリプトを指定します。AWS CodeDeploy はプログラム言語およびアーキテクチャに依存しません。任意のカスタムデプロイロジックのスクリプトをご使用できます。
AWS CodeDeploy はさまざまなオペレーションシステムをサポートしています。AWS CodeDeploy では、Amazon Linux、Red Hat Enterprise Linux、Ubuntu Server、Microsoft Windows Server でテストされたエージェントをご利用いただけます。他のオペレーティングシステムを使用する場合は、こちらから AWS CodeDeploy エージェントをオープンソースソフトウェアとして入手できます。オペレーティングシステムのサポートの詳細については、 AWS CodeDeploy ドキュメントを参照してください。
はい。AWS CodeDeploy はさまざまな設定管理システム、継続統合およびデプロイシステム、ソースコントロールシステムと連動します。詳細については、製品統合ページを参照してください。
AWS CodeDeploy は、開発者が Amazon EC2 インスタンス、オンプレミスインスタンスを含む、あらゆるインスタンスに対してソフトウェアをデプロイしたり、アップデートしたりすることをサポートするための基礎的なサービスです。AWS Elastic Beanstalk および AWS OpsWorks はエンドツーエンドのアプリケーション管理サービスです。
はい。AWS CodeDeploy は、CodeDeploy エージェントをインストールして AWS パブリックエンドポイントに接続できるすべてのインスタンスをサポートします。
概念
すべて開くアプリケーションとは、1 つのインスタンスグループにデプロイするソフトウェアおよび設定の集合体です。基本的に、同じグループのインスタンスは同じソフトウェアを実行しています。たとえば、大規模な配信システムを使用している場合、たいていはウェブ層が 1 つのアプリケーションを構成し、データ層は別のアプリケーションを構成しています。
リビジョンとは、AppSpec ファイルとともに、ソースコード、ビルド後のアーティファクト、Web ページ、実行ファイル、デプロイスクリプトなどのデプロイ可能なコンテンツの特定のバージョンです。AWS CodeDeploy エージェントは GitHub または Amazon S3 バケットからリビジョンにアクセスできます。
デプロイグループは、CodeDeploy のデプロイにおける EC2 インスタンスまはた AWS Lambda 機能をグループ化するための AWS CodeDeploy エンティティです。EC2 デプロイでは、デプロイグループはアプリケーションに関連するインスタンスの集合体で、デプロイのターゲットとなります。タグまたは Auto Scaling グループ名、またはその両方を指定して、インスタンスをデプロイグループに追加します。AWS Lambda デプロイでは、デプロイグループはアラームやロールバックなど、将来のサーバーレス Lambda デプロイグループのための AWS CodeDeploy の構成のセットとして定義されます。
ステージングや実稼働など、1 つのアプリケーションに対して複数のデプロイグループを定義できます。タグの詳細については、「コンソールでの Amazon EC2 タグの使用」を参照してください。Auto Scaling グループへのデプロイの詳細については、「自動スケーリング統合」を参照してください。
デプロイ設定では、デプロイエラーの扱い方など、デプロイグループを通してどのようなビヘイビアーでデプロイが実行されるべきかを指定します。デプロイ設定を使用して、複数インスタンスのデプロイグループにダウンタイムゼロのデプロイを実行できます。例えば、アプリケーションに対して、デプロイグループ内のインスタンスの最低 50% が起動したままでトラフィックを提供する必要がある場合、デプロイ設定でそのように指定し、デプロイがダウンタイムを発生させないようにできます。デプロイ設定がデプロイにもデプロイグループにも関連付けられていない場合、AWS CodeDeploy はデフォルトで 1 度に 1 つのインスタンスにデプロイします。 デプロイ設定の詳細については、「インスタンスヘルス」を参照してください。
デプロイのために指定するパラメーターは 3 つあります。
- リビジョン – 何をデプロイするか指定します。
- デプロイグループ – どこにデプロイするか指定します。
- デプロイ設定 – デプロイ方法を指定する任意のパラメータです。
AppSpec ファイルとは、コピーするファイルおよび実行するスクリプトを指定する設定ファイルです。AppSpec ファイルでは YAML 形式が使用され、リビジョンのルートディレクトリに含めます。AppSpec ファイルは AWS CodeDeploy に使用され、2 つのセクションで構成されています。ファイルセクションは、リビジョンの中のコピーされるソースファイル、および各インスタンスの送信先フォルダを指定します。フックセクションはデプロイの各段階で実行するスクリプトのロケーション (リビジョンバンドルのルートから始まる相対パス) を指定します。デプロイの各段階は、デプロイのライフサイクルイベントと呼ばれます。AppSpec ファイルの例を次に示します。指定できるすべてのオプションを含む AppSpec ファイルの詳細については、「AppSpec ファイルリファレンス」を参照してください。
os: linux
files:
# You can specify one or more mappings in the files section.
- source: /
destination: /var/www/html/WordPress
hooks:
# The lifecycle hooks sections allows you to specify deployment scripts.
ApplicationStop:
# Step 1: Stop Apache and MySQL if running.
- location: helper_scripts/stop_server.sh
BeforeInstall:
# Step 2: Install Apache and MySQL.
# You can specify one or more scripts per deployment lifecycle event.
- location: deploy_hooks/puppet-apply-apache.sh
- location: deploy_hooks/puppet-apply-mysql.sh
AfterInstall:
# Step 3: Set permissions.
- location: deploy_hooks /change_permissions.sh
timeout: 30
runas: root
# Step 4: Start the server.
- location: helper_scripts/start_server.sh
timeout: 30
runas: root
デプロイは、デプロイのライフサイクルイベントと呼ばれる事前に定義されたいくつかの段階を経過します。デプロイのライフサイクルイベントにより、デプロイの一環としてコードを実行することが可能になります。以下の表は現在サポートされているさまざまなデプロイのライフサイクルイベントを実行順に、使用時の例と合わせて列挙しています。
デプロイのライフサイクルイベント:
- ApplicationStop
-
デプロイの最初のライフサイクルイベントであり、リビジョンのダウンロード前から開始します。このデプロイのライフサイクルイベントに使用される AppSpec ファイルおよびスクリプトは前回正常にデプロイされたリビジョンのものです。
アプリケーションを正常に停止する、またはデプロイの準備として最近インストールしたパッケージを削除する場合は ApplicationStop のデプロイのライフサイクルイベントを使用します。
-
-
DownloadBundle
-
このデプロイのライフサイクルイベントでは、エージェントがインスタンスの一時的なロケーションに、リビジョンファイルをコピーします。このデプロイのライフサイクルイベントはエージェント用にリザーブされており、ユーザーのスクリプトの実行には使用できません。
-
-
BeforeInstall
-
BeforeInstall ライフサイクルイベントは、ファイルの暗号化や現在のバージョンのバックアップ作成など、インストール前のタスクに使用します。
-
-
インストール
-
このデプロイのライフサイクルイベントでは、エージェントが一時的なロケーションからリビジョンファイルを最終的な送信先フォルダにコピーします。このデプロイのライフサイクルイベントはエージェント用にリザーブされており、ユーザーのスクリプトの実行には使用できません。
-
-
AfterInstall
-
AfterInstall デプロイライフサイクルイベントはアプリケーションの設定またはファイルの許可の変更に使用します。
-
-
ApplicationStart
-
基本的に、このデプロイのライフサイクルイベントは ApplicationStop で停止したサービスを再起動するために使用します。
-
-
ValidateService
-
ValidateService は最後のデプロイのライフサイクルイベントであり、デプロイが正常に完了したことを検証します。
-
開始方法
すべて開くAWS マネジメントコンソールにサインインして AWS CodeDeploy の使用を開始できます。サービスの簡単な概要をお探しの場合は、ステップバイステップのチュートリアルを含む「はじめに」を参照してください。
AWS CodeDeploy の使用
すべて開くAmazon EC2 インスタンスは IAM インスタンスプロファイルに関連付けられていて、サポートされているオペレーティングシステムを実行している必要があります。詳細については、「既存の Amazon EC2 インスタンスを使用する」を参照してください。
以下のダイアグラムはデプロイ中の基本的な手順を説明しています。アプリケーションとデプロイグループの作成 (これらの用語の説明については「概念」セクションを参照) は、通常、アプリケーションごとに 1 回限りの設定作業です。定期的なアクションによりリビジョンがアップロードおよびデプロイされます。これらの各タスクの詳細な手順を含む詳細な説明については、「デプロイメント」を参照してください。
AWS CodeDeploy には、 AWS マネジメントコンソール、 AWS コマンドラインインターフェイス (AWS CLI)、AWS SDK、および AWS CodeDeploy API を使用してアクセスできます。
コードを変更する必要はまったくありません。コピーするファイルと実行するスクリプトを指定する設定ファイル (AppSpec ファイルと呼ばれる) をリビジョンバンドルのルートディレクトリに追加するだけです。
GitHub を使用している場合、.zip、.tar、.tar.gz 形式でリポジトリから直接インスタンスにリビジョンをデプロイできます。その他のソースコントロールシステムを使用している場合は、リビジョンをバンドルして .zip、.tar、.tar.gz 形式で Amazon S3 バケットにアップロードし、デプロイの実行時に Amazon S3 のロケーションを指定します。アプリケーションにビルドステップが必要な場合は、GitHub リポジトリまたは Amazon S3 バケットにポストビルドアーティファクトが保存されていることを確認してください。AWS CodeDeploy で GitHub を使用する方法の詳細については、当社の製品インテグレーションページを参照してください。Amazon S3 を使用してリビジョンを保存する方法の詳細については、「リビジョンをプッシュする」を参照してください。
AppSpec ファイルの任意のデプロイのライフサイクルイベントフックから設定管理ツールを起動できます。たとえば、デプロイの一環として実行する Chef レシピがある場合は、AppSpec ファイルの適切なデプロイのライフサイクルイベントフックでレシピを指定できます。さらに、設定管理システムを利用して AWS CodeDeploy エージェントをインスタンスにインストールすることもできます。Chef、Puppet、Ansible、Saltstack などの設定管理システムで AWS CodeDeploy を使用する方法を示すサンプルについては、当社の製品統合ページを参照してください。
はい。AWS CLI または AWS SDK を使用してパブリック API を呼び出すことで、AWS CodeDeploy を継続統合およびデプロイシステムと統合できます。ビルド済みのインテグレーションとサンプルは、製品インテグレーションページにあります。
該当するインスタンスのデプロイグループに、最新のリビジョンをデプロイすることで、アプリケーションをデプロイします。Auto Scaling group の一部として開始したインスタンスを除き、AWS CodeDeploy は新しく追加された Amazon EC2 インスタンスに対して、最新のリビジョンを自動でデプロイしません。
Auto Scaling Group をデプロイグループと関連付けることで、新しく開始したインスタンスに常にアプリケーションの最新のリビジョンがデプロイされるようにできます。Auto Scaling Group に新しい Amazon EC2 インスタンスが追加されるたびに、まず状態が Pending になり、前回デプロイグループで成功したリビジョンのデプロイが新しい Amazon EC2 インスタンスに対して開始されます。デプロイが正常に完了すると、Amazon EC2 インスタンスの状態が InService に変更されます。デプロイに失敗した場合、その Amazon EC2 インスタンスは終了し、新しい Amazon EC2 インスタンスが Pending の状態で開始されます。その後新しい Amazon EC2 インスタンスに対してデプロイが開始されます。Auto Scaling グループインスタンスのライフサイクルイベントの詳細については、「Auto Scaling グループのライフサイクル」を参照してください。
AWS マネジメントコンソール、AWS コマンドラインインターフェイス (AWS CLI)、AWS SDK 、および AWS CodeDeploy API を使用してデプロイのステータスを追跡できます。デプロイの全体的なステータスを確認し、さらにドリルダウンして各インスタンスのステータスと、インスタンスの各デプロイライフサイクルイベントのステータスを確認できます。また、失敗に対応するログエントリも確認できるため、インスタンスにログインする必要がなく、デプロイの問題のデバッグが容易になります。
はい。実行中のデプロイを停止する場合、AWS CodeDeploy サービスは各インスタンスのエージェントにそれ以上のスクリプトを実行しないように指示します。アプリケーションを矛盾のない状態に戻すには同じリビジョンを再デプロイするか、別のリビジョンをデプロイします。
過去のリビジョンにアプリケーションをロールバックするには、そのリビジョンをデプロイするだけです。AWS CodeDeploy は現在のリビジョン用にコピーされたファイルを追跡しており、新しいデプロイの開始前にはそれらを削除します。そのため、再デプロイとロールバックに違いはありません。ただし、過去のリビジョンがロールバックに適切であることを確認する必要があります。
はい。バージョニングした Amazon S3 バケットを使用し、バージョン ID を指定して単一のリビジョンを特定できます。
サービスの制限について詳しくは、「制限」を参照してください。サービスの制限を増やすには、 AWS サポートセンターからリクエストを送信してください。
はい。自分のアカウントで呼び出した AWS CodeDeploy API の履歴を取得するには、AWS マネジメントコンソールで AWS CloudTrail を有効にします。
デプロイに影響するイベントの通知を作成できます。通知は Amazon SNS 通知の形式で送信されます。各通知には、ステータスメッセージに加えて、その通知が生成される原因となったイベントが存在するリソースへのリンクも含まれます。 通知に追加費用はかかりませんが、Amazon SNS など、通知に利用される他の AWS のサービスの料金が課金される場合があります。通知の使用を開始する方法については、通知ユーザーガイドを参照してください。さらに、 AWS Chatbot を使用しているお客様は、Slack チャンネルまたは Amazon Chime チャットルームに通知を送信するように設定できます。詳しくは、こちらをご覧ください。
セキュリティ
すべて開くはい。ただし、Amazon EC2 にインストールされている AWS CodeDeploy エージェントが AWS CodeDeploy および Amazon S3 サービスの公開エンドポイントにアクセスできる必要があります。詳細については、「AWS CodeDeploy エンドポイント」と「Amazon S3 エンドポイント」を参照してください。
はい。AWS CodeDeploy はリソースレベルのアクセス権限をサポートしています。各 AWS CodeDeploy リソースに対して、アクセスできるユーザーと実行可能なアクションを指定できます。たとえば、IAM ポリシーを設定してユーザーに特定のアプリケーションのデプロイを許可し、他のアプリケーションに関してはリビジョンを列挙するにとどめることもできます。これにより、ユーザーが不注意で誤ったアプリケーションに変更を加えることを防ぐことができます。AWS CodeDeploy で IAM を使用する方法の詳細については、「アクセス権限リファレンス」を参照してください。
リージョン
すべて開くAWS CodeDeploy は同じリージョンに配置される AWS リソースに対してデプロイを実行します。複数のリージョンにデプロイを実行するためには、ターゲットリージョンのアプリケーションを定義し、アプリケーションバンドルを各リージョンの Amazon S3 バケットにコピーし、すべてのリージョンに連続または並列ロールアウトを実行します。
請求
すべて開くAWS CodeDeploy を使用した Amazon EC2 インスタンスへのコードデプロイには追加料金は必要ありません。AWS CodeDeploy を使用したアップデートの料金は、1 つのオンプレミスインスタンスあたり 0.02 USD です。詳細については、料金ページをご覧ください。