ちょっと話題の記事

AWS CodeDeploy + Travis CI でデプロイを自動化する

2014.11.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Travis CI が AWS CodeDeploy をサポート

AWS CodeDeploy (以下、CodeDeploy) で遊びまくっている者です。

CodeDeploy の肝は、何と言っても自動化でしょう!自動化といえば、CI サービスである Travis CI は既に CodeDeploy をサポートしています。Travis CI を既に使っている人は、少々設定を加えるだけで簡単に CodeDeploy のデプロイ処理を追加できます。

ということで今回は Travis CI 経由で CodeDeploy のデプロイ処理を実行してみたいと思います!

デプロイを自動化してみる

事前準備

まず、Travis から CodeDeploy を実行するため、IAM User を作成しましょう。デプロイが実行できるよう、次のようなパーミッションにします。

{
  "Version": "2012-10-17",
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : [
        "codedeploy:CreateDeployment"
      ],
      "Resource" : [
        "arn:aws:codedeploy:us-east-1:XXXXXXXXXXXX:deploymentgroup:YourDeploymentGroup"
      ]
    },
    {
      "Effect" : "Allow",
      "Action" : [
        "codedeploy:GetDeploymentConfig"
      ],
      "Resource" : [
        "arn:aws:codedeploy:us-east-1:XXXXXXXXXXXX:deploymentconfig:YourDeploymentConfig"
      ]
    },
    {
      "Effect" : "Allow",
      "Action" : [
        "codedeploy:GetApplicationRevision"
      ],
      "Resource" : [
        "arn:aws:codedeploy:us-east-1:XXXXXXXXXXXX:application:YourApplication"
      ]
    }
  ]
}

次に .travis.yml に CodeDeploy の設定を追加します。Travis CLI をインストールしているのであれば、1.7.4 以上にアップデート後、次のコマンドを実行します。すると対話形式でデプロイ用の設定を聞いてくれるので、設定値を回答していくだけで簡単に .travis.yml に書き足すことができます。

$ travis setup codedeploy

GitHub を対象とする場合

bucketkey はS3バケットに対するデプロイの際に必要な設定です。これらを省くことで GitHub に対するデプロイが実行されます。

deploy:
  provider: codedeploy
  access_key_id: 'YOUR AWS ACCESS KEY'
  secret_access_key:
    secure: 'YOUR ENCRYPT AWS SECRET KEY'
  application: my-app
  deployment_group: my-deployment-group

S3 を対象とする場合

S3 を対象にする場合は、bucketkey の設定を加えます。

deploy:
  provider: codedeploy
  access_key_id: "YOUR AWS ACCESS KEY"
  secret_access_key:
    secure: "YOUR ENCRYPT AWS SECRET KEY"
  bucket: "YOUR S3 BUCKET"
  key: latest/my-app.zip
  application: my-app
  deployment_group: my-deployment-group

デプロイ処理を実行する条件を追加する

例えば release ブランチに Push されたときだけデプロイを実行するといった、特定の条件下のみデプロイを実行したい場合は on: を使います。詳しくはこちら

次の例は release ブランチに Push されたときだけデプロイを実行する設定です。

deploy:
  provider: codedeploy
  access_key_id: 'YOUR AWS ACCESS KEY'
  secret_access_key:
    secure: 'YOUR ENCRYPT AWS SECRET KEY'
  application: my-app
  deployment_group: my-deployment-group
  on:
    branch: release

デプロイ前とデプロイ後に処理を追加する

before_deploy:after_deploy: を記述することで、デプロイ前とデプロイ後に任意の処理を追加できます。

before_deploy: "echo 'デプロイはじめるぜ?'"
deploy:
  ... デプロイ設定
after_deploy:
  - ./after_deploy_1.sh
  - ./after_deploy_2.sh

実行してみる

実際に Travis CI でジョブを回してみました。

codedeploy-travis01

CodeDeploy を見てみると…

codedeploy-travis02

無事にデプロイできました!

まとめ

CodeDeploy の設定と .travis.yml の書き足しだけで、簡単にデプロイを自動化することができます。あなたのアプリケーションもぜひデプロイを自動化しましょう!

今後も CodeDeploy さんにご期待ください!

参考