はじめに
Amazon EKSでAWS Load Balancer ControllerにS3ログ出力を設定する方法をまとめます。
Mac環境を想定しています。
実行環境の準備
-
AWS CLIの設定
AWS CloudFormationを動かすためのAWS CLIの設定を参考にしてください。 -
EKSクラスタの構築
Macでeksctlを利用してAmazon EKSのクラスターを構築するを参考にしてください。 -
EKSのコンテキストの設定
MacにてAmazon EKSの設定をするを参考にしてください。 -
Helmの設定
Amazon EKSでHelmを利用するを参考にしてください。 -
ArgoCDの設定
Amazon EKSでArgoCDを利用するを参考にしてください。 -
AWS Load Balancer Controllerの設定
Amazon EKSでAWS Load Balancer Controllerを利用するを参考にしてください。 -
AWS Load Balancer ControllerのAWS Certificate Managerの設定
Amazon EKSでAWS Load Balancer ControllerにAWS Certificate Managerを利用するを参考にしてください。
S3バケットの作成
-
S3バケットを作成する
※今回はakane-dev-elb-access-log
というバケット名にするBUCKET_NAME=akane-dev-elb-access-log aws s3api create-bucket \ --bucket ${BUCKET_NAME} \ --create-bucket-configuration LocationConstraint=ap-northeast-1
-
バケットポリシーを設定する
※Application Load Balancer のアクセスログを有効にするを参考にしてください。
※今回は東京リージョンのため、ELBのサービスアカウント(ELBのAWSアカウントID)である582318560864
を設定する
※今回はプレフィクスをpublic-elb
にする。export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account) BUCKET_NAME=akane-dev-elb-access-log PREFIX=public-elb BUCKET_POLICY=$(echo -n '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::582318560864:root" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::'; echo -n "${BUCKET_NAME}"; echo -n '/'; echo -n "${PREFIX}"; echo -n '/AWSLogs/'; echo -n "${ACCOUNT_ID}"; echo -n '/*" } ] }') aws s3api put-bucket-policy \ --bucket ${BUCKET_NAME} \ --policy "${BUCKET_POLICY}"
環境設定
-
akane-ingress.yaml
を作成する
※Custom attributesを参考にしてください。
※ACMのARN
を設定する
※今回はakane-dev-elb-access-log
というバケット名にする
※今回はプレフィクスをpublic-elb
にする。akane-ingress.yamlapiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/certificate-arn: ${ACMのARN} alb.ingress.kubernetes.io/load-balancer-attributes: access_logs.s3.enabled=true,access_logs.s3.bucket=akane-dev-elb-access-log,access_logs.s3.prefix=public-elb namespace: akane spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: guestbook-ui port: number: 3000
-
クラスターに適用する
kubectl apply -f akane-ingress.yaml
クリーンアップ
-
クラスターから削除する
kubectl delete -f akane-ingress.yaml
-
S3バケットを削除する
※今回はakane-dev-elb-access-log
というバケット名にする。aws s3 rb s3://akane-dev-elb-access-log --force