以下、ファイル構成
dockerfileを作成する。
サンプル:
————————————
FROM alpine:edge
ADD ./test.sh /
RUN chmod 777 /test.sh
ENTRYPOINT ["/test.sh"]
—————————————
shellを作成する。
実行すると、以下になる。
以下、ファイル構成
dockerfileを作成する。
サンプル:
————————————
FROM alpine:edge
ADD ./test.sh /
RUN chmod 777 /test.sh
ENTRYPOINT ["/test.sh"]
—————————————
shellを作成する。
実行すると、以下になる。
作業イメージ:
ローカル上でソースコードをGitHubにpushすると、CIrcleCIがそれをトリガーに
ECRにdockerfileをpushして、その後、ECSを更新する。
■IAM:
CircleCI用のアカウントを作成する。
以下の権限を追加する
■ECS:
①クラスター名:
circleci-orbs-clusterという名称で、クラスターの作成名にする(任意で問題ない)
サービス名:
circleci-orbs-serviceというサービス名にする。
タスク定義:
circleci-orbs-taskという定義名にする
■ECR
今回は、circleci-orbs-sampleという名称でECRにpushする
■GitHub:
レポジトリーの中身になる。
1)ディレクトリ構成について
.circleci—-config.yml <—————CircleCIの設定ファイル
dockerfile <—————————-nginxのdocker file
index.html <—————————-nginxのファイル
nginx.conf <—————————-nginxのコンフィグ類
2)config.ymlについて
①ジョブ、コマンド、Executor などの構成要素をまとめた共有可能なパッケージということで
要は、以前のCIrcleCIでコマンド実行に関する記述をしていたのをOrbというパッケージを利用することで
いい感じに実行してくれる物
②
region : AWSのリージョン名になる(CircleCIの環境変数に記載している)
account-url: ECRのアカウントURL名になる(CircleCIの環境変数に記載している)
例:以下の箇所がECRのアカウントURLを示す
repo: ECRのリポジトリ名を示す(CircleCIの環境変数に記載している)
tag: サンプル素材のconfig.ymlを真似しただけ。
dockerfile: dockerfileの所在をcircleci側で認識させるために記載する
path: dockerfileの所在をcircleci側で認識させるために記載する
上記を記載しないで、CIrcleCIで実行させると、Dockerの所在が分からないというエラーが出たので記載する。
③
family: ECSのタスク定義名になる(CircleCIの環境変数に記載している)
cluster-name: ECSのクラスタ名になる(CircleCIの環境変数に記載している)
service-name: ECSのサービス名になる(CircleCIの環境変数に記載している)
container-image-name-updates: サンプル素材のconfig.ymlを真似しただけ。
■CircleCI
Project Settings > Environment Variables
上記のconfig.ymlで記載した①②③は、以下の環境変数になる。
実際に、ローカルにあるソースコードを編集などを行いgithubにpushすると
それをトリガーにCircleCI側で ECR/ECSで更新が行われる。
(成功すれば以下のような表示になる。)
CircleCIでのデプロイが完了後について:
ECRも以下のリポジトリが更新されていることが確認できる。
以下、Springbootベースでのコンテナ定義を作成する。(詳細な設定については、割愛。)
ログ設定:
以下の設定にする。
ログドライバー: awsfirelens
①[delivery_stream] [Value] [my-stream] <—kinesis firehouseの”Delivery stream name”になる。
②[region] [Value] [ap-northest-1] <—リージョンを指定する。
③[Name] [Value] [firehouse] <—firehouseと記載
firelens側:
以下を選択すること。
setting(1)
setting(2)
setting(3)
Kinesis Data Firehoseを選択:
2)delivery_streamに任意の名前(今回は、my-stream)を入力
3)Destination:Amazon S3を選択
4)S3 bucket:出力先のS3を選択
-------------------------------------------------------------------
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::●●●●●●●●●●:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::s3-logs1/*"
},
{
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::s3-logs1/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
},
{
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::s3-logs1"
}
]
}
---------------------------------------------------------------------
3)以下のログが出力される。
->アクセスログも確認できた
アクセスログ:
イメージ:
今回は、springbootにELBを載せないで、ローカルDNSを利用してnginxと連携してみる。
[nginx:リバースプロキシ]—> [CloudMap : spring.local]
Fargateのスペック:
vCPU:0.25 0.01264/1時間あたり
mem:256MB 0.0013825/1時間あたり
1.45円/1時間(1台あたり)
ざっと見積もり:
3台を8時間ほど稼働した場合
合計 34.8円
ECSのサービス作成(springboot用):
作成時に、サービスの検出の統合の有効化をチェック
ECSのサービス作成に関する、その他のことについては割愛。
(その他設定については、以下になる)
Cloudmap経由にて登録(spring.local)
ECSインスタンスからもcurlが確認する
nginxでリバースプロキシーを作成する(以下、コンフィグ)
ブラウザ上でnginxを通して、springbootの連携が取れていることが確認が取れる。
(以下の画面は、Springbootの404表示になる。)
cloudwatch上のログでも確認:
Fargate(springboot)のパフォーマンスモニタ:
以下、ファイル構成 dockerfile を作成する。 サンプル: ———————————— FROM alpine:edge ADD ./test.sh / RUN chmod 777 /test.sh ENTRYPOINT ["/test.sh"] —...