社内に CodeDeploy を導入できないか調査したので簡単にまとめます.
要件
- デプロイ先: EC2 インスタンス
- git ホスティングサービス は BitBucket
- pip でプライベートリポジトリのライブラリをインストールしなければならない
AWS 側作業
ソースコード用 S3 Bucket 作成
現在 CodeDeploy が直デプロイを対応しているホスティングサービスは github だけなので
それ以外はソースコードを zip 圧縮した上で S3 にアップする必要があります.
なのでとりあえず名前はなんでもいいので Bucket を作成します.
当然アクセス権限は非公開です(デフォルト非公開なので大丈夫かもしれませんが)
デプロイ先 EC2 インスタンス作成
テスト用に EC2 インスタンスを t2.micro で作成しました.
EC2 -> S3 アクセス用の IAM ロール作成
デプロイ時に EC2 が S3 からソースを取得するのでアクセスできる IAM ロールを作成しました.
ポリシーはテスト時に限って言えば以下の通りで.
運用で導入する際はちゃんと設定しましょう.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:Get*",
"s3:List*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
ポリシーを作成したら,
"新しいロールの作成 "
-> ロールタイプに Amazon EC2
-> ポリシーのアタッチで上で作成したポリシーをアタッチ
-> ロール名を適当につけてロール作成完了です
EC2 インスタンスに作成したロールをアタッチしておきます.
CodeDeploy サービスロールの作成
CodeDeploy 用のロールも必要なので作成しておきます.
先ほどと同様に,
"新しいロールの作成 "
-> ロールタイプに Amazon CodeDeploy
-> ポリシーのアタッチに AWSCodeDeployRole
-> ロール名を適当につけてロール作成完了です
さらに作成したロールを選択して
"信頼関係"タブ
-> 信頼関係の編集
->
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"ec2.amazonaws.com",
"codedeploy.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
"Service" に "ec2.amazonaws.com" を追加します(必要そうな気がするんですが不要かも)
-> "信頼ポリシーの更新" で完了
CodeDeploy にアプリケーション作成
CodeDeploy でデプロイ対象のアプリケーション設定を作成します.
- "デプロイタイプ"はインプレースと Blue/Green デプロイが選択できますがお試しなので今回はインプレースを選択しました.
- "インスタンスの追加" に作成しておいた EC2 インスタンスを登録
- "詳細設定" は今回そのままで
- "サービスロール" に "CodeDeploy サービスロールの作成" で作成したロール ARN を設定
- "アプリケーションの作成" で完了
AWS 側の設定は以上になります.
アプリ側設定は次回