Skip to content

Latest commit

 

History

History
87 lines (73 loc) · 3.12 KB

eks-cf-autocreate-issue.md

File metadata and controls

87 lines (73 loc) · 3.12 KB

1. kubectl jsonpath
kubernetes 리소스의 경우 jsonpath를 지원해줘서 원하는 값을 가져올 수 있다.

ex) 생성된 ingress의 dns 주소를 가져오는 경우

kubectl get ingress -n default eks1-ingress -o jsonpath='{.status.loadBalancer.ingress[].hostname}'


2. kubectl jsonpath 조건문
kubernetes 리소스를 가져오는 경우 조건식등을 사용하여 원하는 값을 파싱할 수 있습니다.

ex) 생성된 ingress의 path가 / 인 경우의 포트 넘버를 가져오는 경우

kubectl get ingress -n $1 $2 -o jsonpath='{.spec.rules[].http.paths[?(@.path=="/")].backend.service.port.number}'
?(@.items=="조건식") 형태로 사용하여 조건식을 쓸 수 있습니다.


3. aws cli를 통해 가져온 json 결과 값에서 원하는 정보를 파싱하는 경우
get, list 등 cli를 통해 json값으로 받은 결과 값들에 대해서 원하는 정보를 파싱할 수 있음

ex) describe-load-balancers 를 통해 받은 결과 값에서 dns 이름만 파싱

aws elbv2 describe-load-balancers --load-balancer-arns $alb_arn --query "LoadBalancers[*].DNSName[]" --output text
--query "jsonpath" 형태로 사용하여 원하는 값들을 추출가능


4. 쉘스크립트에서 파일을 생성해야하는 경우
conffile등을 생성해야하는 경우

ex) route53 record 파일을 생성하는 경우

cat << EOF > recordfile.conf
{
  "Comment": "Creating Alias resource record sets in Route 53",
  "Changes": [
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "${record}.${dns}",
        "Type": "A",
        "AliasTarget": {
          "HostedZoneId": "Z2FDTNDATAQYW2",
          "DNSName": "${cfarn}",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
EOF

aws route53 change-resource-record-sets --hosted-zone-id ${hostedzoneid} --change-batch file://recordfile.conf

와 같이 cat 명령어를 사용하여 파일 생성 후 적용이 가능하다.

5. aws cli --query에서 환경변수 ($env)가 먹지 않은 경우
aws --query 필터에서 환경변수를 가져오는 경우 잘안먹음

ex) 변수($dns)로 등록된 값과 동일한 주소를 가진 acm의 arn을 가져오는 경우

aws acm list-certificates --region us-east-1 --query 'CertificateSummaryList[?DomainName==`*.'"${dns}"'`].CertificateArn[]' --output text

[?Value==`'"$env"'`] 형태로 사용 가능
앞에 문자를 넣어야하는 경우도 가능


6. 정규표현식
값을 가져오는 경우 필요한 부분만 추출을 할 수 있습니다.

ex) aws list-hosted-zone 명령어를 사용하면 /hostedzone/Z07abcdeftghqQF6과 같이 출력이되며, 내가 필요한 값은 Z07abcdeftghqQF6이다. 이런 경우 뒤를 기준으로 첫 번째 / 가 나오는 경우 까지를 파싱했다.

host=$(aws route53 list-hosted-zones  --output text --query 'HostedZones[?Config.PrivateZone==`false` && Name==`'"${dns}."'`].Id')
hostedid=$(expr "$host" : '.*/\([^/]*\)$')

list data is - /hostedzone/Z07abcdeftghqQF6
hostedzoneid is - Z07abcdeftghqQF6