1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CodePipelineのチュートリアルやってみた!~S3編~

Posted at

はじめに

DOPの試験を受けた際にCodePipelineにたくさんお目にかかったので、どうせなら触ってみようとチュートリアルをやることにしました。

やってみる

今回は「チュートリアル: シンプルなパイプラインを作成する (S3 バケット)」をやってみました。

事前準備

実際にパイプラインを作成するにあたり、こちらの記事を参考に作業用のIAMユーザを作成します。
記事ではAWSCodePipeline_FullAccessを最低限与えると書かれていますが、このチュートリアルを行うにあたり以下のポリシーも割り当てた方がいいと思います。

  • IAMFullAccess
  • AWSCodeDeployFullAccess
  • AmazonS3FullAccess
  • AmazonEC2FullAccess

また、カスタムマネージドポリシーで、Systems Managerに対する以下のポリシーも必要です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ssm:CreateAssociation",
            "Resource": "*"
        }
    ]
}

1. S3にバケットを作成する

このチュートリアルでは、S3からEC2インスタンスに対しデプロイを行う内容となっています。
私はWindowsサーバに対しデプロイを行う方法を選択しました。

まずはデプロイするソースファイルをS3に配置します。
S3でバージョニングを有効にしたバケットを作成し(アクセス許可はデフォルトのままにします)、こちらのWindows用のリンクからzipファイルを手元にダウンロードしてバケットにアップロードします。

zipファイルの中には、

  • appspec.yml
  • デプロイ前に実行されるbatファイル
  • index.html
  • LISENCE

の4つが含まれています。

appspec.ymlはCodeDeployでデプロイを行う際の定義ファイルで、サーバのどこにどのファイルを配置するか、デプロイの際にどのようなアクションを行うかなどが定義できます。

batファイルではIISのインストールを行うコマンドが書かれています。

2. EC2インスタンスにアタッチするIAMロールを作成する

EC2インスタンスにIAMロールをアタッチする必要があるので、先にロールを作成します。
IAMロールに含めるポリシーは以下の2つです。

  • AmazonSSMManagedInstanceCore
  • AmazonEC2RoleforAWSCodeDeploy

3. EC2インスタンスを作成する

次にデプロイ先となるEC2インスタンスを作成します。

今回はパブリックなインスタンスを2台作成するので、事前にVPC、サブネット、IGW、ルートテーブルを作成しておきましょう。

インスタンスは下記の設定で作成しました。

  • AMI: Microsoft Windows Server 2019 Base
  • インスタンスタイプ: t2.micro
  • パブリック IP の自動割り当て: 有効

ほかのマシンイメージでも恐らくできますが、SSMエージェントがプリインストールされているイメージを選んでください。

セキュリティグループは、22(SSH)80(HTTP)3389(RDP)のポートで、それぞれMyIPを許可するように設定しました。

また、高度な設定でIAM インスタンスプロフィールに先程作成したIAMロールを設定します。

4. CodeDeployでデプロイグループを作成する

インスタンスが起動出来たら、CodeDeployでデプロイグループを作成します。

デプロイグループを作成する前に、CodeDeployのサービスロールとアプリケーションを作成する必要があるので先にそちらを行います。

サービスロール

サービスロールは、インスタンスに割り当てたIAMロールと同じように作成します。ユースケースでCodeDeployを選択すると自動的にAWSCodeDeployRoleポリシーが含まれるようになるので、何もせず確認画面から作成を行います。

アプリケーション

アプリケーションはCodeDeployコンソールに移動し、アプリケーションタブからアプリケーションの作成を行います。
コンピューティングプラットフォームを選択するところではEC2/オンプレミスを選択します。

デプロイグループ

先程作成したアプリケーションの画面からデプロイグループの作成を行います。

  • Service role:先程作成したサービスロールを選択
  • Deployment typeIn-place
  • 環境設定EC2インスタンスを選択し、キーの部分にはName、値の部分には先程作成したインスタンス名を入力。
    インスタンスを作成する際につけた名前は、自動的に「Name: インスタンス名」というタグとしてインスタンスに付与されるので、これを指定します。
  • AWSSystems Manager によるエージェント設定今すぐアップデートをスケジュールする
  • デプロイ設定CodeDeployDefault.OneAtaTime
  • ロードバランシングの有効化:なし(チェックを外す)

この設定でデプロイグループを作成します。

5. CodePipelineでパイプラインを作成する

いよいよパイプラインの作成です。
CodePipelineコンソールからパイプラインの作成を選択します。

パイプラインの設定を選択する

適当な名前を入力し、サービスロールの作成を選択します。
高度な設定は特に変更しません。

ソースステージを追加する

ソースプロバイダーにS3を選択します。
バケットには1.で作成したバケット名を、S3 オブジェクトキーにはアップロードしたzipファイル名を(変更していなければSampleApp_Windows.zip)を入力します。
検出オプションは特に変更せず、次に進みます。

ビルドステージを追加する

こちらはビルドステージをスキップボタンを押してスキップします。

デプロイステージを追加する

デプロイプロバイダーにCodeDeployを、アプリケーションとデプロイグループは4.で作成したものを選択します。

ここまで設定したらパイプラインを作成し、パイプラインの実行が完了するのを待ちます(数分かかります)。

完了

パイプラインが完了したら、インスタンスのパブリックDNS名をブラウザに入力しましょう!
画面に緑色のページが表示されれば成功です。

できないときは

私はこのようなエラーメッセージが表示されました。

CodeDeploy agent was not able to receive the lifecycle event. Check the CodeDeploy agent logs on your host and make sure the agent is running and can connect to the CodeDeploy server.

上手くいかない場合は以下の項目をチェックしてみてください。

  • IGWが存在しているか
  • ルートテーブルは正しいか
  • PublicIPが割り当てられているか
  • SSMエージェントがインストールされているか
  • セキュリティグループの設定は正しいか

おわりに

CICDパイプラインを意外とあっさり組めたので、ほかのチュートリアルもチャレンジしてみます。

参考

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?