AWS Lightsail Contaainess를 GitLab CI로 설계
실물
실제 시도된 코드의 창고는여기.이다.
IAM 권한
AWS Constore의 GUI 설정을 사용하면 컨테이너 관계에 GUI 설정이 없는 것 같은데요?
Resource도 제한할 수 있다면 더욱 좋습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"lightsail:CreateContainerServiceRegistryLogin",
"lightsail:RegisterContainerImage",
"lightsail:GetContainerImages",
"lightsail:CreateContainerServiceDeployment"
],
"Resource": "*"
}
]
}
.gitlab-ci.yml
본체 deploy.쉬랑 분리돼서 짧아요.
services:
- docker:dind
app-deploy:
image: ytoune/aws-lightsail-cli
stage: deploy
script:
- echo start
- sh ./deploy.sh
only:
- main
ytoune/aws-lightsail-cli
사용한 이미지는 여기.입니다.
이번 용도로 새로 지었어요.
후술
aws lightsail push-container-image
은 모든aws-cli,lightsailctl,docker를 요구하기 때문에docker를 기본적으로 aws-cli와lightsailctl에 넣었습니다.
가공용 노드.js도 넣었어요.
deploy.sh
사용하지 않은 것 같아서
$AWS_ACCESS_KEY_ID
와$AWS_SECRET_ACCESS_KEY
생성된 것 같아서~/.aws/credentials
.docker build
이후aws lightsail push-container-image
에서push 이미지aws lightsail create-container-service-deployment
설계 중입니다.set -Ceu
mkdir ~/.aws || echo pass
echo '[default]' >| ~/.aws/credentials
echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/credentials
echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/credentials
echo '[default]' >| ~/.aws/config
echo 'region=ap-northeast-1' >> ~/.aws/config
echo 'output=json' >> ~/.aws/config
docker build -t myapp .
aws lightsail push-container-image --region ap-northeast-1 --service-name ${APP_SERVICE_NAME} --label api --image myapp
aws lightsail get-container-images --service-name ${APP_SERVICE_NAME} | node scripts/make-container.js
aws lightsail create-container-service-deployment --service-name ${APP_SERVICE_NAME} --cli-input-json file://$(pwd)/container.json
scripts/make-container.js
aws lightsail create-container-service-deployment
에서 사용된container.json
.const fs = require('fs/promises')
const path = require('path')
Promise.resolve()
.then(async () => {
const data = await fs.readFile('/dev/stdin', 'utf-8')
const r = JSON.parse(data)
const image = r.containerImages[0].image
await fs.writeFile(
path.join(__dirname, '../container.json'),
JSON.stringify({
containers: {
api: {
image,
command: ['sh', 'start.sh'],
environment: {},
ports: {
80: 'HTTP',
},
},
},
publicEndpoint: {
containerName: 'api',
containerPort: 80,
healthCheck: {
healthyThreshold: 2,
unhealthyThreshold: 2,
timeoutSeconds: 3,
intervalSeconds: 5,
path: '/api/health',
successCodes: '200-499',
},
},
}),
)
})
.catch(x => {
console.error(x)
process.exit(1)
})
개선 방안
나는 도커 메이커가 어쨌든 시간이 걸릴 것 같아서 방법을 강구해서 해결했다.
매번 어딘가에서push로 좋은 인상을 만들어요.
다음에 그 풀을 떨어뜨리면 더 빠를 수도 있어.
docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY_IMAGE
docker pull $CI_REGISTRY_IMAGE:latest || true
docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:latest .
docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
docker push $CI_REGISTRY_IMAGE:latest
참고 자료
Amazon Lightsail 컨테이너 서비스에서 개인 컨테이너 이미지 사용
Amazon Lightsail API Reference
AWS Lightsail Contaainess를 GiitHub Actions로 설계합니다.
Building Docker images with GitLab CI/CD # Using Docker caching
Reference
이 문제에 관하여(AWS Lightsail Contaainess를 GitLab CI로 설계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/rithmety/articles/20201224-lightsail-containers텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)