LoginSignup
21
16

More than 5 years have passed since last update.

AWS CodeDeployで公式サンプルを動かす(入門者向け・WebUIベース・インプレースデプロイ)

Last updated at Posted at 2018-04-13

概要

AWS CodeDeploy(以下CodeDepoy)の入門者向けに「CodeDeployが提供しているサンプルアプリケーション」を使って、WebUIベースでCodeDeployの動作を確認します。

公式チュートリアルの内容をさらに簡易化したものですので、実運用の際はIAMロールの設定内容等、適宜ご確認ください。

スクリーンショット 2018-04-13 18.38.59.png

チュートリアル

CodeDeploy→EC2用ロールの作成

CodeDeployが、デプロイ対象のEC2インスタンスにアクセスできるようにします。
「IAM」→「ロール」→「ロールの作成」から、「AWSサービス」「CodeDeploy」「CodeDeploy」と選択。

スクリーンショット 2018-04-12 16.44.08.png

「AWSCodeDeployRole」が選択されているのを確認します。

スクリーンショット 2018-04-12 16.46.52.png

「ロール名」を入力してロールを作成。ここではCodeDeployRoleとしました。

スクリーンショット 2018-04-12 16.49.01.png

作成されたCodeDeployRoleを選択し、「インラインポリシーの追加」から、CodeDeployがEC2へアクセスできるように、インラインポリシーを作成します。1

スクリーンショット 2018-04-12 16.54.18.png

スクリーンショット 2018-04-12 16.57.59.png

json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:Describe*",
            "Resource": "*"
        }
    ]
}

名前を適当につけて保存します。ここではCodeDeployPolicyとしました。

スクリーンショット 2018-04-12 17.03.45.png

最終的には以下のようになります。ARNは最終的にCodeDeployに設定するので、控えておくと良いかもしれません。

スクリーンショット 2018-04-12 17.08.49.png

EC2→S3用ロールの作成

EC2インスタンス上のCodeDeploy Agentは基本的にはS3を経由してソースコードを取得するので2、EC2インスタンスからS3へアクセスできるようなロールを設定してやる必要があります。

「IAM」→「ロール」→「ロールの作成」から、「AWSサービス」「EC2」と選択。

スクリーンショット 2018-04-13 16.54.27.png

S3へのReadOnlyAccessを設定します。

スクリーンショット 2018-04-13 16.54.50.png

名前をつけて保存してください。ここでは「EC2Role」という名前にしました。

スクリーンショット 2018-04-13 16.55.29.png

EC2インスタンスの作成

続いて、デプロイ対象となるEC2インスタンスを作成します。
注意すべきは以下3点です。

  1. 作成した「EC2→S3用ロール」をIAMロールとして設定すること
  2. インスタンスに「タグ」を設定すること
  3. インスタンスに「CodeDeploy Agent」をインストール、起動させておくこと

今回は以下のように作成しました。

  • t2.nano
    • Amazon Linux AMI 2017.09.1 (HVM) | 64bit
    • セキュリティグループでHTTP(80番), SSH(22番)を開放
      • サンプルアプリケーションがHTTPポート(80番)を利用するため
    • IAMロールにEC2Roleを設定 スクリーンショット 2018-04-13 17.33.18.png
    • タグにdeploy=sampleを設定 スクリーンショット 2018-04-13 17.33.52.png

タグはデプロイ対象のインスタンスを特定するために後ほど必要になりますが、キー:値は何でもかまいません。

インスタンスが作成できたら、SSHログインして「CodeDeploy Agent」をインストールしましょう。

$ aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
download: s3://aws-codedeploy-ap-northeast-1/latest/install to ./install
$ chmod +x ./install
$ sudo ./install auto
I, [2018-04-13T08:45:57.432536 #2692]  INFO -- : Starting Ruby version check.
(略)
完了しました!
I, [2018-04-13T08:45:59.421154 #2692]  INFO -- : Update check complete.
I, [2018-04-13T08:45:59.421229 #2692]  INFO -- : Stopping updater.

$ sudo service codedeploy-agent status
The AWS CodeDeploy agent is running as PID 2738

※aws s3コマンドでcredentialエラーが出る場合、IAMRoleが設定されていない可能性が高いです。ご確認ください。

CodeDeploy アプリケーション作成

ここまでできれば準備完了です。CodeDeployのアプリケーション(ソースコードのデプロイ単位)を作成します。

最初はウィザードが立ち上がりますが、「CodeDeploy」→「アプリケーションの作成」→「カスタムデプロイ」としてください。

スクリーンショット 2018-04-12 17.11.05.png

続いてアプリケーションを作成します。ここでは

  • アプリケーション名: CodeDeploySampleApplication
  • デプロイグループ名: CodeDeploySampleDeployGroup
  • デプロイタイプ: インプレースデプロイ
  • タググループ: EC2に設定したタグ(deploy=sample)
  • サービスロール: CodeDeployRole (CodeDeploy->EC2へのアクセス権限を設定したロール)

としました。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35303138342f33633733303261362d316630642d303561342d346663302d3739393630376139396438372e706e67.png
スクリーンショット 2018-04-13 17.50.31.png
スクリーンショット 2018-04-13 17.54.33.png

デプロイ実行

あとは実際にソースコードをデプロイします。
作成したアプリケーション、デプロイグループを選択し、「アクション」→「新しいリビジョンのデプロイ」と選択。

スクリーンショット 2018-04-12 17.44.55.png

公式のサンプルアプリケーションをデプロイします。

  • リポジトリタイプ: Amazon S3
  • リビジョンの場所: s3://aws-codedeploy-ap-northeast-1/samples/latest/SampleApp_Linux.zip

スクリーンショット 2018-04-12 17.47.26.png
スクリーンショット 2018-04-13 18.07.59.png

「デプロイ」を押下してステータスが成功になれば、デプロイ完了です。

スクリーンショット 2018-04-13 18.00.53.png

http://{IPアドレス}/ でアクセスし、以下のような画面が表示されることを確認してください。お疲れ様でした。

スクリーンショット 2018-04-13 18.05.06.png

うまくいかない場合

以下をご確認ください。

  • IAMロールの権限は適切に設定されているか?
  • デプロイ終了後、EC2インスタンス上で/var/www/html/index.htmlは配置されているか?
    • 配置されているのにエラーになっている場合は80番ポートが開放されてないとか、appspec.yml経由でのセットアップスクリプトがyum installで失敗しているといった可能性があります
  • EC2インスタンス上でcodedeploy-agentはきちんと立ち上がっているか?
    • sudo service codedeploy-agent statusでPIDはきちんと帰ってくるか?
  • /var/log/aws/codedeploy-agent/codedeploy-agent.logのログにエラーが出ていないか?

とくにcodedeploy-agent.logの中味は重要で、例えばEC2にIAMRoleを設定し忘れていた場合、以下のように出力されていました。うまくいかない場合はまずご確認ください。

InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile

以上、ご参考になれば幸いです。


  1. ここではわかりやすさ重視でCodeDeployがどのEC2へもアクセスできるようにしてありますが、実運用される場合は適宜制限をかけてあげるのが良いと思います。 

  2. デプロイ時のリポジトリタイプとして「GitHub」を指定した場合は不要だと思われますが、確認していません。 参考: CircleCI+AWS-CodedeployでStaging環境などに自動デプロイさせる - Qiita 

21
16
1

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
21
16