2021年1月14日木曜日

dockerでshell作成編

 以下、ファイル構成



dockerfileを作成する。







サンプル:

————————————

FROM alpine:edge


ADD ./test.sh /

RUN chmod 777 /test.sh


ENTRYPOINT ["/test.sh"]

—————————————



shellを作成する。







実行すると、以下になる。



2021年1月11日月曜日

CircleCI x ECS

 作業イメージ:

ローカル上でソースコードをGitHubにpushすると、CIrcleCIがそれをトリガーに

ECRdockerfilepushして、その後、ECSを更新する。













■IAM:


CircleCI用のアカウントを作成する。





以下の権限を追加する






■ECS:


①クラスター名:

circleci-orbs-clusterという名称で、クラスターの作成名にする(任意で問題ない)









サービス名:

circleci-orbs-serviceというサービス名にする。









タスク定義:

circleci-orbs-taskという定義名にする










■ECR

今回は、circleci-orbs-sampleという名称でECRpushする










■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でのデプロイが完了後について:


ECSをみるとタスク定義名の数字(circleci-orbs-task:XX)が更新されていることを確認できる。










ECRも以下のリポジトリが更新されていることが確認できる。



























2021年1月10日日曜日

ECS x Firelens x KinesFirehouse(ログの出力)

以下、イメージ:
[Springboot]/[firelens(ログ用サイドカーコンテナ)--->[KinesFirehouse] -->[S3]

以下、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を選択





















ELB アクセスログの出力方法について


1)以下の属性の編集を押す


2)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)以下のログが出力される。

  ->アクセスログも確認できた


アクセスログ:











Cloudmap (for Fargate)


イメージ:

今回は、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)のパフォーマンスモニタ:






















dockerでshell作成編

  以下、ファイル構成 dockerfile を作成する。 サンプル: ———————————— FROM alpine:edge ADD ./test.sh / RUN chmod 777 /test.sh ENTRYPOINT ["/test.sh"] —...