オンプレサーバで稼働しているシステムをAWSへ移行したいという話があり、AWS環境でCI/CDがどう出来るか確認してみました。
構成としては、開発用端末のIDE(IntelliJ IDEA)でコミット、CodeCommitのリポジトリにプッシュしたら、Mavenビルドを開始してECRへコンテナをプッシュ、ECSへデプロイという流れです。
下記AWS環境を用意します。
・ECSの設定(クラスタ、サービス、タスク定義)
・ECRにリポジトリを作成、springbootのアプリなのでopenjdkのイメージをプッシュ
・CodeCommitにリポジトリ作成
・CodePipelineを設定
ググれば、いろいろAWSに関する情報はあるのですが、なかなかうまく出来ません。
で、いろいろやってみた結果、ビルド用にbuildspec.yml、デプロイ用にDockerfileをリポジトリの直下に置くとデプロイが成功しました。
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws --version
- $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
- REPOSITORY_URI={AWS上のECRリポジトリ}
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=${COMMIT_HASH:=latest}
build:
commands:
- echo Build started on `date`
- mvn clean
- mvn install
- echo Building the Docker image...
- docker build -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- mvn package
- echo Pushing the Docker images...
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
- echo Writing image definitions file...
- printf '[{"name":"sample-app","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
artifacts:
files:
- imagedefinitions.json
FROM openjdk:latest VOLUME /tmp ADD target/springtest-0.0.1-SNAPSHOT.jar app.jar EXPOSE 5000 ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
すいません、情報の参照元が解らなくなってしまいました。。
mvn install 結構時間掛かりますね。。

AWSは数年前にアカウントを登録してちょこっとだけ遊んでみただけだったので、ちゃんとAWS環境を理解した上で整理してからじゃないと実利用には遠い感じです。。