2021年1月28日木曜日

AWS X-Ray

サンプル(beanstalk)を立ち上げてみる。

料金:

t3.learge(0.0832USD)

DynamoDB(無料枠)

SNS










サンプルのイメージ:

[node.js:beanstalk]——[DynamoDB]

                                 |—[SNS]



環境作成後に、以下のURLにアクセスしてみる。

(アクセス後の様子については、割愛)




次に、X-rayに移動する

画面を見る限り、サンプル構成のnode.jsDynamoDBSNSの状態が把握できる。










AWS X-Ray > Tracesに移動する。

  ->先ほど、node.jsのサイトにアクセスした時の形跡になる。


赤枠で囲った、URLを選択してみる。








以下の画面では、node.js,DynamoDBのレスポンスタイムが確認でいる画面となっている。













ちなみに、CloudWatch > ServiceLens >トレースでも確認ができる。












CloudWatch > ServiceLens >サービスマップでは

レイテンシー、HTTP系のエラーなどを視覚的に見やすい。


node.jsのレイテンシー:










DynamoDBのレイテンシー:





2021年1月24日日曜日

AWS copilot (ECS)

準備:
copilotのコマンドをインストールする。(手順は割愛)


1)以下のdockerfileを用意する

  ->Dockerfileに名前をしないとデプロイしてくれないので注意






2)copilot initを入力して、実行。

以後、作成にあたって、質問してくる内容を入力

①アプリ名

②ELBの選択

サービス名











3)ECSコンソール上でも作成されていることが確認できる。







4)ELBも自動生成されていることが確認








作成した環境を表示:

copilot app ls





6)作成した環境に含まれているサービスを表示:

copilot app show





















7)作成した環境を全削除:

 copilot app delete



タスク定義作成について(メモ)

 

family: タスク定義名

taskRoleArn: タスクロール

executionRoleArn: タスク実行ロール

networMode: ネットワークモード



②containerDefinitions(コンテナ定義)

name:コンテナ名

image:イメージ

portMappings:ポートマッピング

  -コンテナポート

  -ホストポート

  -プロトコル

healthCheck:(ヘルスチェック)


requireCompatibillities:互換性が必要(fargateを選択)

CPU:タスクCPU(vCPU)

Memory:タスクメモリ(GB)




タスク定義作成(CLI編)

 

参照先:

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/create-task-definition.html

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/task_definition_parameters.html



1)ファイル名をfargate-task.jsonで作成する。

    ->"taskRoleArn” "executionRoleArn”を追加をしないと、imageに記載しているECRのレポジトリから

         pullできないので注意すること!















2)作成したタスク定義を登録する。

aws ecs register-task-definition --cli-input-json file://fargate-task.json



3)タスク定義が登録されていることが把握できる










4)aws ecs register-task-definition --cli-input-json file://fargate-task.jsonを再実行すると

以下のように、タスク定義のリビジョンが増加していることが把握できる。

















2021年1月23日土曜日

ECS(Fargate) x docker-compose

準備:
以下、公式ページよりサンプルを利用する。

git clone https://github.com/docker/ecs-plugin.git

cd ecs-plugin/example/



1)docker contextの作成を行う。

docker context create ecs myecscontext

  ->dockerコマンドとAWSの設定情報を連動させることらしい。


2)実行後、以下から選択してAWSのプロフィールを入力






3)以下を入力及び選択する。

①AWS Access Key ID

②Secret Access Key

③Region













4)以下をdocker contextの設定値を確認。



5)ECRにて、新規で””exampleというレポジトリを作成する


6)docker-composeファイルの修正を行う。

①image: 自分のECRレポジトリ先に差し替える。

x-aws-pull_credentials: <<<your arn for your secret you can get with docker ecs secret list>>

という箇所が不要になるので削除。


上記、公式からpullしてきたdocker-composeの修正になるので②について

編集不要になることもあるので記載しておく。














この後、docker-compose pushを実施するも

ECS上にpush出来なかったので、ECRの記載している通常の方法で実施してみた



7)上記で、作成したcontextを選択する。

docker context use myecscontext



8)docker-compose upで実施

 ->コンテナ類、ELBなど自動生成してくれるのは便利



9)作成後の様子

  >Fargateで生成されている。







10)タスク定義も作成されている













11)タスク定義を見る限り、Fargateの一番安い構成のコンテナを選択されている










12)ELBが生成されていることを確認できる。




13)CloudMapも生成されてる








14)完成したので、アクセスしてみる
















15)全削除する場合は、以下を実施。

docker compose down










感想:
docker-composeでECSのデプロイをしていると
なんだかPaas(Beanstalk)のような感覚になった


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について


以下、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も以下のリポジトリが更新されていることが確認できる。



























EFS(Dockerfile)の記載について注意

  Dockerfileにefsのマウントパス宛に、ファイルコピーを行うと ECSのサービス作成時に、コンテナのデプロイ失敗に(container run time error)になるので 別経由で、EFSにファイルをコピーした方が良い!! <Dockerfile> ...