ココから先はAWS CloudShellでの作業です。
copilot --version
export APP_NAME=demo
export SVC_NAME=example
export ENV_NAME=test
copilot app init $APP_NAME
copilot svc init --name $SVC_NAME --app $APP_NAME \
--image nginx --port 80 --svc-type "Load Balanced Web Service"
copilot env init --name $ENV_NAME --app $APP_NAME \
--profile default --default-config
copilot env deploy --name $ENV_NAME
copilot svc deploy --name $SVC_NAME --env $ENV_NAME
URLはご自身のものと差し替えてください。
curl -I http://demo-xxx.ap-northeast-1.elb.amazonaws.com
cat <<EOF > policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart",
"ecs:DescribeTaskDefinition",
"ecs:RegisterTaskDefinition",
"ecs:UpdateService",
"ecs:DescribeServices"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": ["iam:PassRole"],
"Resource": "*",
"Condition": {
"StringLike": {
"iam:PassedToService": "ecs-tasks.amazonaws.com"
}
}
}
]
}
EOF
export POLICY_NAME=deploy-${APP_NAME}-${SVC_NAME}
aws iam create-policy --policy-name $POLICY_NAME \
--policy-document file://policy.json
export ROLE_NAME=github-actions
export AWS_ID=$(aws sts get-caller-identity --query Account --output text)
aws iam attach-role-policy --role-name $ROLE_NAME \
--policy-arn "arn:aws:iam::${AWS_ID}:policy/${POLICY_NAME}"
aws ecs list-clusters --output text \
--query "clusterArns[?contains(@, '${APP_NAME}-${ENV_NAME}')]" \
| cut -d/ -f2
--cluster
フラグの値は、手前で取得したECSクラスター名に差し替えてください。
aws ecs list-services --cluster "<ECSクラスター名>" --output text \
--query "serviceArns[?contains(@, '${APP_NAME}-${ENV_NAME}')]" \
| cut -d/ -f3
aws ecs list-task-definitions --status ACTIVE --sort DESC --output text \
--query "taskDefinitionArns[?contains(@, '${APP_NAME}-${ENV_NAME}')]" \
| cut -d/ -f2 | cut -d: -f1
aws ecr describe-repositories --output text \
--query "repositories[?contains(repositoryUri, '$APP_NAME')].repositoryUri"
echo $SVC_NAME
ココから先はローカル環境での作業です。
gh variable set ECS_CLUSTER_NAME --body "<ECSクラスター名>"
gh variable set ECS_SERVICE_NAME --body "<ECSサービス名>"
gh variable set TASK_DEFINITION_NAME --body "<タスク定義名>"
gh variable set ECR_REPOSITORY_URI --body "<ECRリポジトリURI>"
gh variable set CONTAINER_NAME --body "<コンテナ名>"
gh workflow run deploy.yml
URLはご自身のものと差し替えてください。
curl http://demo-xxxx.ap-northeast-1.elb.amazonaws.com
ココから先はAWS CloudShellでの作業です。
export ENV_NAME=prod
ココから先はローカル環境での作業です。
export ENV_NAME=prod
gh variable set ECS_CLUSTER_NAME --body "<ECSクラスター名>" --env $ENV_NAME
gh variable set ECS_SERVICE_NAME --body "<ECSサービス名>" --env $ENV_NAME
gh variable set TASK_DEFINITION_NAME --body "<タスク定義名>" --env $ENV_NAME
gh workflow run deploy.yml -f environment-name=test
gh workflow run deploy.yml -f environment-name=prod
ココから先はAWS CloudShellでの作業です。
copilot app delete --yes
aws iam delete-open-id-connect-provider --open-id-connect-provider-arn \
arn:aws:iam::${AWS_ID}:oidc-provider/token.actions.githubusercontent.com