AWS CLIを利用して、CodeDeploy上にアプリケーションを作成します。
前提条件
CodeDeployへの権限
Code Deployに対してフル権限があること。
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.11.2
コマンド
aws --version
結果(例)
aws-cli/1.11.2 Python/2.7.11 Darwin/15.6.0 botocore/1.4.60
バージョンが古い場合は最新版に更新しましょう。
コマンド
sudo -H pip install -U awscli
- 準備
=======
変数の確認
プロファイルが想定のものになっていることを確認します。
コマンド
aws configure list
結果(例)
Name Value Type Location
---- ----- ---- --------
profile iamFull-prjZ-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region us-east-1 env AWS_DEFAULT_REGION
AssumeRoleを利用している場合はprofileが ''と表示されます。それ以外のときにprofileが '' と表示される場合は、以下を実行してください。
変数の設定
export AWS_DEFAULT_PROFILE=<IAMユーザ名>
- 事前作業
===========
1.1. アプリケーション名の決定
変数の設定
CODED_APP_NAME="handson-app-$(date +%Y%m%d)" \
&& echo ${CODED_APP_NAME}
同名のアプリケーションが存在しないことを確認します。
コマンド
aws deploy get-application \
--application-name ${CODED_APP_NAME}
結果(例)
An error occurred (ApplicationDoesNotExistException) when calling the GetApplication operation: Applications not found for XXXXXXXXXXXX
1.2. サービルロールの指定
変数の設定
IAM_ROLE_NAME='CodeDeployAssumeRole'
コマンド
IAM_ROLE_ARN=$( \
aws iam get-role \
--role-name ${IAM_ROLE_NAME} \
--query 'Role.Arn' \
--output text \
) \
&& echo ${IAM_ROLE_ARN}
結果(例)
arn:aws:iam::XXXXXXXXXXXX:role/CodeDeployAssumeRole
- アプリケーションの作成
=========================
2.1. アプリケーションの作成
変数の確認
cat << ETX
CODED_APP_NAME: ${CODED_APP_NAME}
ETX
コマンド
aws deploy create-application \
--application-name ${CODED_APP_NAME}
結果(例)
{
"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
2.2. アプリケーションの一覧
コマンド
aws deploy list-applications
結果(例)
{
"applications": [
"handson-app-20161010"
]
}
2.3. アプリケーションの確認
コマンド
aws deploy get-application \
--application-name ${CODED_APP_NAME}
結果(例)
{
"application": {
"applicationName": "handson-app-20161010",
"linkedToGitHub": false,
"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"createTime": 1234567890.123
}
}
- デプロイメントグループの作成
===============================
3.1. デプロイメントグループ名の決定
変数の設定
CODED_DEPLOY_GROUP_NAME="${CODED_APP_NAME}-deployment-group" \
&& echo ${CODED_DEPLOY_GROUP_NAME}
同名のデプロイメントグループが存在しないことを確認します。
コマンド
aws deploy get-deployment-group \
--application-name ${CODED_APP_NAME} \
--deployment-group-name ${CODED_DEPLOY_GROUP_NAME}
結果(例)
An error occurred (DeploymentGroupDoesNotExistException) when calling the GetDeploymentGroup operation: No Deployment Group found for name: MyDemoDeploymentGroup
3.2. デプロイメント設定の確認
コマンド
aws deploy list-deployment-configs
結果(例)
{
"deploymentConfigsList": [
"CodeDeployDefault.OneAtATime",
"CodeDeployDefault.AllAtOnce",
"CodeDeployDefault.HalfAtATime"
]
}
変数の設定
CODED_DEPLOY_CONFIG_NAME='CodeDeployDefault.OneAtATime'
コマンド
aws deploy get-deployment-config \
--deployment-config-name ${CODED_DEPLOY_CONFIG_NAME}
結果(例)
{
"deploymentConfigInfo": {
"deploymentConfigId": "00000000-0000-0000-0000-000000000001",
"minimumHealthyHosts": {
"type": "MOST_CONCURRENCY",
"value": 1
},
"deploymentConfigName": "CodeDeployDefault.OneAtATime"
}
}
3.3. EC2タグフィルターの指定
変数の設定
EC2_TAG_KEY='Name'
EC2_TAG_VALUE='MyCodePipelineDemo'
変数の設定
EC2_TAG_FILTER="Key=${EC2_TAG_KEY},Value=${EC2_TAG_VALUE},Type=KEY_AND_VALUE" \
&& echo ${EC2_TAG_FILTER}
3.3. デプロイメントグループの作成
変数の確認
cat << ETX
CODED_APP_NAME: ${CODED_APP_NAME}
CODED_DEPLOY_GROUP_NAME: ${CODED_DEPLOY_GROUP_NAME}
CODED_DEPLOY_CONFIG_NAME: ${CODED_DEPLOY_CONFIG_NAME}
IAM_ROLE_ARN: ${IAM_ROLE_ARN}
EC2_TAG_FILTER: ${EC2_TAG_FILTER}
ETX
コマンド
aws deploy create-deployment-group \
--application-name ${CODED_APP_NAME} \
--deployment-group-name ${CODED_DEPLOY_GROUP_NAME} \
--deployment-config-name ${CODED_DEPLOY_CONFIG_NAME} \
--service-role-arn ${IAM_ROLE_ARN} \
--ec2-tag-filters ${EC2_TAG_FILTER}
結果(例)
{
"deploymentGroupId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
3.4. デプロイメントグループの一覧
コマンド
aws deploy list-deployment-groups \
--application-name ${CODED_APP_NAME}
結果(例)
{
"applicationName": "handson-app-20161010",
"deploymentGroups": [
"MyDemoDeploymentGroup"
]
}
3.5. デプロイメントグループの確認
コマンド
aws deploy get-deployment-group \
--application-name ${CODED_APP_NAME} \
--deployment-group-name ${CODED_DEPLOY_GROUP_NAME}
結果(例)
{
"deploymentGroupInfo": {
"applicationName": "handson-app-20161010",
"deploymentGroupId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"deploymentConfigName": "CodeDeployDefault.OneAtATime",
"autoScalingGroups": [],
"ec2TagFilters": [
{
"Type": "KEY_AND_VALUE",
"Value": "MyCodePipelineDemo",
"Key": "Name"
}
],
"autoRollbackConfiguration": {
"enabled": false
},
"triggerConfigurations": [],
"serviceRoleArn": "arn:aws:iam::XXXXXXXXXXXX:role/CodeDeployAssumeRole",
"deploymentGroupName": "MyDemoDeploymentGroup",
"onPremisesInstanceTagFilters": []
}
}
- 事後作業
===========