2022年7月24日日曜日

Firelens 複数にログ転送

参照先:
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ecs-container-log-destinations-fargate/


firehoseとCloudWatchに同時にアプリケーションログを転送させたい場合は
fluent-bitのdockerイメージ作成を行う必要がある。



手順:

1)logDestinations.conf という設定ファイルの作成



























2)以下のDockerfileの記載を行う


=====Dockerfile==================

FROM amazon/aws-for-fluent-bit:latest

ADD logDestinations.conf /logDestinations.conf




3)上記に関連した、タスク定義の設定を行う。




2022年7月23日土曜日

ELB アクセスログの分析(on Athena)

参照先:

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/application-load-balancer-logs.html#create-alb-table

 Athenaを使って、ELBのアクセスログの分析を行ってみる


手順:

1)データベースを作成

create database alb_db



2)以下、テーブルを作成する。


































3)アクセスのランキングを行いたいので

以下のクエリを実施























2022年7月13日水曜日

nginx x ALB(リダイレクト転送)

nginxをポート番号:80番を維持した状態でELB内で443番から80番にリダイレクトを行うことで
疎通が可能になるので、手順を以下に記載する。 


手順:

1)以下、Aレコードの追加を行う。









2)以下、Aレコードの追加内容になる。




















3)ターゲットグループのポート番号については、デフォルトの80を利用する










4)リダイレクトを選択して、以下の設定にする。



































5)HTTPSポートを上記で作成しターゲットグループに紐付けをする



































6)以下、作成済みの様子






ACMの作成ができない場合の対策

参照:
https://dev.classmethod.jp/articles/dnsrecord-acm-alb-with-terraform/


terraformでACMの domain_name = "panda0726.XX" の変更を行ない Terraform applyを実行すると。。。


実行すると、以下の表示になる。







結論として、以下のlifecycleを追記することで解決する












改めて、Terraform apply 実施後にRoute53のAレコードに対象のドメインを追加することで

アクセス可能となった。


以下の表示、証明書の情報になる。



2022年5月12日木曜日

CloudWatch logs転送(for Windows EC2)

参照:
https://dev.classmethod.jp/articles/workspaces-cwa-windows-event-logs/

エージェントのダウンロードする:

https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi



手順:


1)変数を新規で追加

「システム」->「システムの詳細設定」->「環境変数」-> システム環境変数の「新規」


2)環境変数として、以下の3つの変数を設定する

  • AWS_REGION           : ap-northeast-1
  • AWS_SECRET_ACCESS_KEY  : シークレットアクセスキー
  • AWS_ACCESS_KEY_ID     : アクセスキ
































3)ファイルを作成する。

内容として、イベントログ(System)とIEのプロセスのメトリクス記載してみる。

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

{

        "logs": {

                "logs_collected": {

                        "windows_events": {

                                "collect_list": [

                                        {

                                                "event_format": "xml",

                                                "event_levels": [

                                                        "VERBOSE",

                                                        "INFORMATION",

                                                        "WARNING",

                                                        "ERROR",

                                                        "CRITICAL"

                                                ],

                                                "event_name": "System",

                                                "log_group_name": "System",

                                                "log_stream_name": "{hostname}"

                                        }

                                ]

                        }

                }

        },

    "metrics": {

        "metrics_collected": {

            "procstat": [

                {

                    "exe": "iexplore",

                    "measurement": [

                        "pid_count"

                    ],

                    "metrics_collection_interval": 60

                },

                {

                    "exe": "notepad",

                    "measurement": [

                        "pid_count"

                    ],

                    "metrics_collection_interval": 60

                }

            ]

        }

    }

}

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


4)以下、配下に作成したtest.jsonを置く
以下、PowerShell上で実行すること。

5)ファイルを読み込む:

.\amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -c file:config.json



6)エージェントをスタートさせる。

.\amazon-cloudwatch-agent-ctl.ps1 -a start



7)CloudWatch logsに配信されていることを確認


















8)CloudWatchのメトリクスに表示されているか確認してみる。















9)以下、上記のtest.jsonで指定したIEのプロセスが表示されていることが確認できる。






















2022年4月10日日曜日

Lambda内部で生成したファイルをS3に圧縮して保管してみる。

課題:
Lambda内部で生成したテキストファイルをS3側で圧縮して保管できるか試してみる。



■IAM


1)ポリシーを作成する。

















########### サンプル ##############

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": [

                "s3:PutObject",

                "s3:PutObjectAcl"

            ],

            "Resource": "arn:aws:s3:::バケット名/*”

        }

    ]

}


################################



2)IAMロールの作成を行う。

上記で作成したIAMポリシーを選択













■S3


1)以下、バケットポリシーの編集を行う。























########## サンプルコード ################

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Principal": {

                "AWS": "arn:aws:iam::アカウントID:role/”iam role名”

            },

            "Action": [

                "s3:PutObject",

                "s3:PutObjectAcl",

                "s3:GetObject",

                "s3:GetObjectAcl",

                "s3:AbortMultipartUpload"

            ],

            "Resource": "arn:aws:s3:::バケット名/*”

        }

    ]

}

#####################################




■Lambda


1)ソースコード入力




















###########サンプルコード########

import boto3

from datetime import datetime

import gzip

import shutil

 

print('Loading function')                                                                                      # ②Functionのロードをログに出力

 

s3 = boto3.resource('s3')                                                                                    # ③S3オブジェクトを取得

 

# ④Lambdaのメイン関数

def lambda_handler(event, context):

    bucket = ‘バケット名’                                                                                     # ⑤バケット名を指定

    prefix = 'test_' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S')         # ⑥保存するファイルのprefixを指定

    file_name = prefix + '.txt'                                                                                 # ⑦保存するテキストファイル名

    key = prefix + '.txt.gz'                                                                                      # ⑧保存するgzファイル名

    file_contents = 'Lambda test'                                                                          # ⑨ファイルに保存するテキストの内容

    

# ⑩/tmpにtxtファイルを出力

    with open('/tmp/' + file_name, 'w') as f:

        f.write(file_contents)

    

# ⑪/tmpにgzファイルを作成

    with open('/tmp/' + file_name, 'rb') as f_in:

        with gzip.open('/tmp/' + key , 'wb') as f_out:

            shutil.copyfileobj(f_in, f_out)

    

    obj = s3.Object(bucket,key)                                                                           # ⑫バケット名とパスを指定

    obj.upload_file( '/tmp/' + key )                                                                       # ⑬gzファイルをS3に出力

    return

###############################



2)Lambda側で上記で作成したIAM Roleを選択する。














































3)Lambda側で実行後、S3のバケットで確認する


結果:

Lambda内部で生成したテキストファイルをS3側で圧縮して保管していることが把握できる。







2022年3月9日水曜日

ECS(Fargate)をベースにした、CICDの構成をterraformにしてみる。

以下、簡単なアークテクトについての特徴になる。


特徴:
1.GitHub上に、コードをpushすると自動的にCodePipeline経由でECS(Faragate)のデプロイを行う。
2.デプロイ方法については、BlueGreenデプロイにする。
3.ログについては、sidecar container経由でkinesis firehouseをブリッジしてS3のバケットに
保管する仕組みにする。
4.コンテナについては、auto scalingが可能にしている。



【AI×GitOps】Docker Composeから始めるRaspberry Pi 5 Kubernetesクラスタへの自動デプロイ設計

現在構築を進めている動画管理システム開発において、いきなりKubernetes(K8s)に展開するのではなく、 Docker Composeを中間地点に挟んで段階的にK8s+Argo CD(GitOps)へ移行するアーキテクチャ設計 をまとめました。 Bionic(AIアシスタン...