v1 메타데이터 서버 엔드포인트로 마이그레이션

마이그레이션 개요

v1.0으로 마이그레이션하려면 다음 단계를 완료하세요.

  1. 지원 중단된 메타데이터 서버 엔드포인트를 사용하는 VM 인스턴스를 식별합니다.

    Google Kubernetes Engine 클러스터가 있으면 지원 중단된 엔드포인트를 사용하는 GKE 노드를 식별해야 합니다.

  2. 식별된 VM 인스턴스 또는 노드에서 지원 중단된 메타데이터 서버 엔드포인트를 사용하는 프로세스, 애플리케이션 또는 이미지를 찾습니다.

    프로세스 및 애플리케이션의 경우 다음 정보를 검토하세요.

    • 프로세스가 개발되지 않은 애플리케이션에 속한 경우 v1 메타데이터 서버 엔드포인트를 사용하도록 애플리케이션을 업데이트합니다. 업데이트가 필요한 알려진 애플리케이션 목록에 대해 알아보려면 업데이트가 필요한 애플리케이션을 참조하세요.
    • 프로세스가 개발된 애플리케이션에 속해 있으며 코드를 통해 기존 엔드포인트를 호출하는 경우 다음 단계를 완료하세요.
      1. v1과 지원 중단된 메타데이터 서버 엔드포인트 간의 차이점을 검토합니다.
      2. v1 메타데이터 서버 엔드포인트를 사용하도록 쿼리를 업데이트합니다.
    • 프로세스가 개발된 애플리케이션에 속해 있지만 코드에서 기존 엔드포인트에 대한 요청을 실행하지 않을 경우, 해당 요청은 SDK 또는 다른 종속 항목을 통해 실행할 수 있습니다. 이 문제를 해결하려면 애플리케이션에서 사용하는 모든 SDK 및 종속 항목을 업데이트해야 합니다. 업데이트가 필요한 Google 라이브러리의 버전을 보려면 지원되는 라이브러리 버전을 참조하세요.
  3. (선택사항) v0.1 및 v1beta1 메타데이터 서버 엔드포인트를 사용 중지합니다.

    VM 인스턴스 식별

    v0.1 및 v1beta1 엔드포인트를 사용하는 VM 인스턴스를 식별하기 위해 2개의 새 엔드포인트에 대한 요청을 실행할 수 있습니다.

    이러한 새 엔드포인트를 쿼리한 결과에는 특정 VM 인스턴스가 지원 중단된 엔드포인트에 액세스한 횟수가 표시됩니다. 참고: VM 인스턴스가 중단될 때마다 카운터가 초기화됩니다.

    VM 인스턴스가 v0.1 및 v1beta1 엔드포인트에 액세스했는지 여부를 확인하려면 다음 명령어를 실행하세요.

    curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/legacy-endpoint-access/0.1
    curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/legacy-endpoint-access/v1beta1
    

    다음 python 샘플은 이러한 새 엔드포인트를 프로그래매틱 방식으로 보는 방법을 나타낸 것입니다.

    def wait_for_legacy_usage(callback):
        url = '{}/instance/legacy-endpoint-access'.format(METADATA_URL)
        last_etag = '0'
        counts = None
        while True:
            r = requests.get(
                url,
                params={
                    'last_etag': last_etag,
                    'recursive': True,
                    'wait_for_change': True
                },
                headers=METADATA_HEADERS)
            if r.status_code == 503:  # Metadata server unavailable
                print('Metadata server unavailable. Sleeping for 1 second.')
                time.sleep(1)
                continue
            if r.status_code == 404:  # Feature not yet supported
                print('Legacy endpoint access not supported. Sleeping for 1 hour.')
                time.sleep(3600)
                continue
            r.raise_for_status()
    
            last_etag = r.headers['etag']
            access_info = json.loads(r.text)
            if not counts:
                counts = access_info
            if access_info != counts:
                diff = {
                    ver: access_info[ver] - counts[ver] for ver in counts
                }
                counts = access_info
                callback(diff)

    GKE 노드 식별

    Google Kubernetes Engine 클러스터에서 v0.1 및 v1beta1 엔드포인트를 사용하는 노드를 식별하는 방법은 기존 메타데이터 서버 엔드포인트를 사용하여 워크로드 식별을 참조하세요.

    프로세스 식별

    지원 중단된 메타데이터 서버 엔드포인트에 대해 요청을 실행하는 VM 인스턴스가 식별되면, VM 인스턴스에서 이러한 요청을 실행하는 프로세스를 찾을 수 있습니다.

    프로세스 식별에는 ngrep 또는 auditd 같은 로깅 또는 모니터링 도구를 사용하세요.

    ngrep

    ngrep(네트워크 grep)를 사용하여 패킷을 수집하고 이러한 패킷의 콘텐츠를 필터링할 수 있습니다. VM 인스턴스에서 지원 중단된 엔드포인트에 대한 요청을 실행하는 프로세스의 패킷 정보를 수집하려면 다음 명령어를 실행하세요.

    sudo ngrep -l -q "v1beta1|0\.1/meta-data" tcp \
    and dst host 169.254.169.254 or metadata.google.internal \
    and dst port 80
    

    지원 중단된 엔드포인트에 대해 요청을 실행하면 다음과 유사한 결과가 출력됩니다.

    T 10.128.0.4:41312 -> 169.254.169.254:80 [AP]
    GET /computeMetadata/v1beta1/instance/id HTTP/1.1..Host: metadata.goog..User-Agent: curl/7.52.1..Accept: */*....
    

    출력에는 다음 정보가 포함됩니다.

    • 루트 URL: /computeMetadata/v1beta1/instance/id
    • 요청을 실행하는 데 사용된 사용자 에이전트. 이 예시에서는 curl/7.52.1입니다.
    • 요청이 시작된 VM 인스턴스의 IP 주소(소스 IP) 및 포트. 이 예시에서 IP 주소는 10.128.0.4이고 포트는 41312입니다.
    • 프로세스가 아직 활성 상태이면 포트 정보를 검토하여 프로세스 ID를 찾을 수 있습니다.

    포트 정보 검토

    다음 절차에서는 처리되지 않은 지연 HTTP GET 요청으로 프로세스를 식별할 수 있습니다. 이 절차에서는 현재 메타데이터 엔드포인트 및 지원 중단된 메타데이터 엔드포인트 모두와 통신하는 프로세스를 찾습니다.

    메타데이터 서버와 개방형으로 연결된 소켓을 나열하려면 VM 인스턴스에서 다음 명령어를 실행하세요.

    sudo lsof -n -P +c 0 -i @169.254.169.254

    다음과 유사한 결과가 출력됩니다.

    COMMAND         PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
    google_network_ 798 root    7u  IPv4 1674967626      0t0  TCP 10.128.0.4:44876->169.254.169.254:80 (ESTABLISHED)
    google_accounts 805 root    5u  IPv4 1674980506      0t0  TCP 10.128.0.4:44878->169.254.169.254:80 (ESTABLISHED)
    google_clock_sk 809 root    5u  IPv4 1674982496      0t0  TCP 10.128.0.4:44880->169.254.169.254:80 (ESTABLISHED)
    google_clock_sk 809 root    6u  IPv4 1674914460      0t0  TCP 10.128.0.4:44874->169.254.169.254:80 (CLOSE_WAIT)
    

    NAME 열에는 소스 IP, 대상 IP, 포트가 표시됩니다. 이것만으로 프로세스를 식별하기에 충분하지 않으면 ps 명령어를 사용하여 추가 정보를 확인합니다.

    ps 798 805 809

    다음과 유사한 결과가 출력됩니다.

    PID TTY      STAT   TIME COMMAND
    798 ?        Ss     9:07 /usr/bin/python /usr/bin/google_network_daemon
    805 ?        Ss    14:19 /usr/bin/python /usr/bin/google_accounts_daemon
    809 ?        Ss     4:33 /usr/bin/python /usr/bin/google_clock_skew_daemon
    

    auditd(Linux만 해당)

    Auditd는 규칙 집합을 기반으로 디스크에 감사 로그를 쓸 수 있는 데몬입니다. connect 시스템 호출에 대한 규칙을 설정하면 지원 중단된 메타데이터 서버 엔드포인트에 대한 각 연결을 만드는 프로세스를 식별할 수 있습니다.

    1. connect 시스템 호출을 감사하는 규칙을 설정하려면 VM 인스턴스에서 다음 명령어를 실행하세요.

      sudo auditctl -a exit,always -F arch=b64 -S connect -k CONNECT
    2. 지원 중단된 엔드포인트와의 연결을 쿼리하려면 VM 인스턴스에서 다음 명령어를 실행하세요.

      sudo ausearch -m SOCKADDR -k CONNECT --interpret | grep -C 3 'computeMetadata/v1beta1\|0\.1/meta-data'

      다음과 유사한 결과가 출력됩니다.

      type=PROCTITLE msg=audit(09/26/2019 22:20:21.498:847) : proctitle=curl metadata.goog/computeMetadata/v1beta1/instance/id
      type=SOCKADDR msg=audit(09/26/2019 22:20:21.498:847) : saddr={ fam=inet laddr=169.254.169.254 lport=80 }
      type=SYSCALL msg=audit(09/26/2019 22:20:21.498:847) : arch=x86_64 syscall=connect success=no exit=EINPROGRESS(Operation now in progress) a0=0x3 a1=0x7fffd965bd50 a2=0x10 a3=0x14856d3402026e items=0 ppid=27641 pid=28977 auid=alice uid=alice gid=alice euid=alice suid=alice fsuid=alice egid=alice sgid=alice fsgid=alice tty=pts9 ses=2828 comm=curl exe=/usr/bin/curl key=CONNECT
      

      출력에는 다음 정보가 포함됩니다.

      • 프로세스 제목: proctitle
      • 요청 URL: curl metadata.goog/computeMetadata/v1beta1/instance/id
      • 실행 파일의 위치: exe=/usr/bin/curl
      • 사용자: uid=alice

      프로세스가 식별되면 규칙을 삭제할 수 있습니다. 규칙을 삭제하려면 다음 명령어를 실행하세요.

      sudo auditctl -d exit,always -F arch=b64 -S connect -k CONNECT

    v1beta1 및 v1.0 메타데이터 서버 엔드포인트 간의 차이점

    v1 메타데이터 서버는 이전의 v1beta1 서버와 약간 다르게 작동합니다. 새 메타데이터 서버를 사용하려면 모든 요청이 Metadata-Flavor: Google 헤더를 제공해야 합니다. 이 헤더는 요청이 메타데이터 값을 검색할 목적으로 작성되었음을 나타냅니다.

    이 새 헤더를 포함하도록 요청을 업데이트하세요. 예를 들어 disks/ 속성에 대한 요청은 다음과 유사하게 표시됩니다.

    user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
    

    v0.1 및 v1.0 메타데이터 서버 엔드포인트 간의 차이점

    일반적으로 v0.1 메타데이터 서버 엔드포인트와 v1은 다음과 같은 면에서 서로 다릅니다.

    • 메타데이터 서버 엔드포인트를 쿼리하는 데 사용되는 루트가 http://metadata.google.internal/0.1/meta-data/에서 http://metadata.google.internal/computeMetadata/v1/으로 변경되었습니다.
    • v1 메타데이터 서버 요청에는 Metadata-Flavor: Google 헤더가 포함되어야 합니다. 예를 들어 disks/ 속성에 대한 요청은 다음과 유사하게 표시됩니다.

      curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
    • 프로젝트 및 인스턴스 수준에서 커스텀 메타데이터를 쿼리할 수 있습니다.

      v0.1 메타데이터 서버에서 attributes/ 속성에 대한 인스턴스 및 프로젝트 메타데이터 값은 같은 디렉터리에 있습니다. 속성에 인스턴스 및 프로젝트 메타데이터 값이 있으면 특정 키에 대한 인스턴스 메타데이터 값이 반환됩니다.

      v1 쿼리의 경우 URL은 인스턴스 또는 프로젝트 메타데이터가 요청되었는지 여부를 지정해야 합니다. 예를 들어 sshKeys 속성을 쿼리하려면 다음 명령어 중 하나 또는 둘 모두를 실행하세요.

      프로젝트에 sshKeys가 설정된 경우 다음 명령어를 실행하세요.

      curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/sshKeys" -H "Metadata-Flavor: Google"

      이 인스턴스에 sshKeys가 설정된 경우 다음 명령어를 실행하세요.

      curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/sshKeys" -H "Metadata-Flavor: Google"
    • v0.1에서 일부 메타데이터 항목은 JSON 객체를 반환합니다. v1 메타데이터 서버에서 이러한 메타데이터 항목은 디렉터리를 기준으로 정리됩니다. 이 방식으로 항목을 정리하면 이전에 중첩된 필드의 특정 색인 항목 및 값을 쿼리할 수 있습니다. v1에서 디렉터리 목록을 쿼리하거나 JSON 객체에 액세스하는 방법에 대한 자세한 내용은 디렉터리 목록으로서의 속성을 참조하세요.

    v0.1과 v1 메타데이터 서버 엔드포인트의 매핑에 대한 자세한 내용은 다음 표를 검토하세요.

    인스턴스 속성

    다음 메타데이터 항목은 instance/ 디렉터리로 이동합니다.

    v0.1 루트 - http://metadata.google.internal/0.1/meta-data/
    v1 루트 - http://metadata.google.internal/computeMetadata/v1
    메타데이터 항목 버전 URI(루트 기준) 출력 예시
    설명 v0.1 description My instance description
    v1 instance/description
    호스트 이름 v0.1 hostname my-instance.c.my-project.internal
    v1 instance/hostname
    이미지 v0.1 image projects/eip-images/global/images/debian-9-drawfork-v20180109
    v1 instance/image
    머신 유형 v0.1 machine-type projects/12345/machineTypes/e2-standard-2
    v1 instance/machine-type
    인스턴스 태그 v0.1 tags ["cheese", "lettuce"]
    v1 instance/tags
    영역 v0.1 zone projects/12345/zones/us-central1-c
    v1 instance/zone

    프로젝트 속성

    다음 메타데이터 항목은 project/ 디렉터리로 이동합니다.

    v0.1 루트 - http://metadata.google.internal/0.1/meta-data/
    v1 루트 - http://metadata.google.internal/computeMetadata/v1
    메타데이터 항목 버전 URI(루트 기준) 출력 예시
    프로젝트 ID v0.1 project-id my-project
    v1 project/project-id
    숫자 프로젝트 ID v0.1 numeric-project-id 12345
    v1 project/numeric-project-id

    이동한 속성

    다음 메타데이터 항목은 새 엔드포인트로 이동합니다.

    v0.1 루트 - http://metadata.google.internal/0.1/meta-data/
    v1 루트 - http://metadata.google.internal/computeMetadata/v1
    메타데이터 항목 버전 URI(루트 기준) 출력 예시
    도메인 v0.1 domain c.my-project.internal
    v1 instance/hostname my-instance.c.my-project.internal

    이름이 변경된 속성

    다음 메타데이터 항목은 이름이 변경됩니다.

    v0.1 루트 - http://metadata.google.internal/0.1/meta-data/
    v1 루트 - http://metadata.google.internal/computeMetadata/v1
    메타데이터 항목 버전 URI(루트 기준) 출력 예시
    인스턴스 ID v0.1 instance-id 123456789
    v1 instance/id 123456789

    디렉터리 목록으로서의 속성

    다음 메타데이터 항목은 v0.1에서 JSON 객체를 반환하고 v1의 디렉터리로 정리됩니다.

    이러한 메타데이터 항목의 경우 다음 메서드 중 하나를 사용하여 엔드포인트에 액세스할 수 있습니다.

    Note: VPC networks have a default maximum transmission unit (MTU) of 1460 bytes. However, the network MTU can be set to 1500 bytes. See Maximum transmission unit for background on network MTUs.
    v0.1 루트 - http://metadata.google.internal/0.1/meta-data/
    v1 루트 - http://metadata.google.internal/computeMetadata/v1
    메타데이터 항목 버전 URI(루트 기준) 출력 예시
    디스크 v0.1 disks
    
    {"disks":[{
    "deviceName":"persistent-disk-0",
    "index":0,
    "mode":"READ_WRITE",
    "type":"PERSISTENT"}]}
    v1 instance/attached-disks/?recursive=true
    
    [{"deviceName": "persistent-disk-0",
    "index":0,
    "mode":"READ_WRITE",
    "type":"PERSISTENT"}]
    네트워크 인터페이스 v0.1 network
    
    {"networkInterface":
    [{"accessConfiguration":
    [{"externalIp":"35.194.6.47",
    "type":"ONE_TO_ONE_NAT"}],
    "ip":"10.128.0.4",
    "mac":"42:01:0a:80:00:04","mtu":1460,
    "network":"projects/12345/networks/default"}]}
    v1 instance/network-interfaces/?recursive=true
    
    [{"accessConfigs":
    [{"externalIp":"35.194.6.47",
    "type":"ONE_TO_ONE_NAT"}],
    "dnsServers":["169.254.169.254"],
    "forwardedIps":[],
    "gateway":"10.128.0.1",
    "ip":"10.128.0.4",
    "ipAliases [],
    "mac":"42:01:0a:80:00:04","mtu":1460,
    "network":"projects/12345/networks/default",
    "subnetmask":"255.255.240.0","targetInstanceIps":[]}]
    서비스 계정 정보(모든 서비스 계정) v0.1 service-accounts
    
    {"serviceAccounts":
    [{"scopes":["https://www.googleapis.com/auth/devstorage.read_only"],
    "serviceAccount":"12345-compute@developer.gserviceaccount.com"}]}
    v1 instance/service-accounts/?recursive=true
    
    {"123451-compute@developer.gserviceaccount.com":
    {"aliases":["default"],
    "email":"123451-compute@developer.gserviceaccount.com",
    "scopes":["https://www.googleapis.com/auth/devstorage.read_only"]},
    "default":{"aliases":["default"],
    "email":"123451-compute@developer.gserviceaccount.com",
    "scopes":["https://www.googleapis.com/auth/devstorage.read_only"]}}
    서비스 계정 정보(단일 서비스 계정) v0.1 service-accounts/<email|default>
    
    {"scopes":["https://www.googleapis.com/auth/devstorage.read_only"],
    "serviceAccount":"123451-compute@developer.gserviceaccount.com"}
    
    v1 instance/service-accounts/<email|default>/?recursive=true
    
    {"aliases":["default"],
    "email":"123451-compute@developer.gserviceaccount.com",
    "scopes":["https://www.googleapis.com/auth/devstorage.read_only"]}
    

    OAuth 2.0 액세스 토큰 쿼리

    다음 메타데이터 항목은 OAuth2 액세스 토큰을 반환합니다.

    v0.1 루트 - http://metadata.google.internal/0.1/meta-data/
    v1 루트 - http://metadata.google.internal/computeMetadata/v1
    메타데이터 항목 버전 URI(루트 기준) 출력 예시
    OAuth2 토큰 v0.1(메서드 1)

    auth-token?service_account=<email|default>&scope=scopeA,scopeB

    또는

    auth_token?service_account=<email|default>&scope=scopeA,scopeB

    
    {"expires":1568854217,
    "oauth2_access_token":"ya29.c.KmyIB0i4tH1xLzKGrqeeK6TGWEW3b18Lcq...."}
    
    v0.1(메서드 2) service-accounts/<email|default>/acquire
    
    {"accessToken":"ya29.c.KmyIB0i4tH1xLNzKGrqeeK6TGWEW3b18Lcq.....",
    "expiresAt":1568854217,"expiresIn":2022}
    v1 instance/service-accounts/<email|default>/token
    
    {"access_token":"ya29.c.KmyIB0i4tH1xLNzKGrqeeK6TGWEW3b18Lcq....",
    "expires_in":2022,"token_type":"Bearer"}

    업데이트가 필요한 애플리케이션

    v1 메타데이터 서버 엔드포인트를 사용하려면 다음 애플리케이션을 지원되는 최소 버전 또는 상위 버전으로 업데이트하세요.

    애플리케이션 지원되는 최소 버전
    Facter(Puppet에서 개발)
    Cloud Monitoring 에이전트 5.5.2-375
    RightScale의 서버 에이전트 (RightLink) RightLink 10

    업데이트할 이미지

    게스트 속성을 사용 설정한 경우 다음 이미지는 v1beta1 메타데이터 서버를 호출하여 SSH 호스트 키를 저장합니다. 나열된 이미지의 최신 버전으로 업그레이드하는 것이 좋습니다.

    운영체제 이미지 버전
    CentOS
    • centos-6-v20190619
    • centos-7-v20190619
    Debian debian-9-stretch-v20190618
    Red Hat Enterprise Linux(RHEL)
    • rhel-6-v20190618
    • rhel-7-v20190618
    • rel-8-v20190521
    • rel-8-v20190522
    • rhel-8-v20190618
    • rhel-7-4-sap-v20190618
    • rel-7-6-sap-v20190618
    SUSE Linux Enterprise Server(SLES)
    • sles-15-sp1-v20190625
    • sles-15-sp1-sap-v20190625

    지원되는 라이브러리 버전

    일부 Google 라이브러리는 v1 메타데이터 서버 엔드포인트로의 마이그레이션에도 영향을 받지 않습니다. 그러나 다음 표에 나온 라이브러리를 사용하려면 지원되는 최소 버전 또는 상위 버전으로 업그레이드해야 합니다.

    언어 Google 라이브러리 지원되는 최소 버전
    자바 com.google.api-client 1.18.0-rc
    Node.js dialogflow 0.6.0
    Node.js firebase-admin 8.2.0
    Node.js google-cloud/debug-agent 3.0.0
    Node.js google-cloud/profiler 0.2.0
    Node.js google-cloud/trace-agent 2.11.0
    Node.js gcp-metadata 0.5.0
    Node.js gcs-resumable-upload 0.13.0
    Node.js googleapis 27.0.0
    Node.js google-auth-library 1.3.0
    Node.js google-cloud/bigquery 2.0.0
    Node.js google-cloud/bigquery-data-transfer 0.4.0
    Node.js google-cloud/bigtable 0.15.0
    Node.js google-cloud/cloud-container 0.3.0
    Node.js google-cloud/compute 0.11.0
    Node.js google-cloud/datastore 2.0.0
    Node.js google-cloud/dlp 0.8.0
    Node.js google-cloud/dns 0.8.0
    Node.js google-cloud/error-reporting 0.5.0
    Node.js google-cloud/firestore 0.16.1
    Node.js google-cloud/language 2.0.0
    Node.js google-cloud/logging-bunyan 0.9.0
    Node.js google-cloud/logging 2.0.0
    Node.js google-cloud/logging-winston 0.10.0
    Node.js google-cloud/monitoring 0.6.0
    Node.js google-cloud/os-login 0.3.0
    Node.js google-cloud/pubsub 0.20.0
    Node.js google-cloud/redis 0.2.0
    Node.js google-cloud/resource 0.9.0
    Node.js google-cloud/spanner 2.0.0
    Node.js google-cloud/speech 2.0.0
    Node.js google-cloud/storage 2.0.0
    Node.js google-cloud/tasks 0.2.0
    Node.js google-cloud/text-to-speech 0.3.0
    Node.js google-cloud/translate 2.0.0
    Node.js google-cloud/vision 0.21.0
    Node.js google-cloud/profiler 0.2.0
    Node.js google-cloud/trace-agent 2.11.0
    Node.js google-gax 0.17.0
    Node.js gce-images 1.0.0
    Node.js gcp-metadata 0.5.0
    Node.js gcs-resumable-upload 0.13.0
    Node.js googleapis 27.0.0
    Node.js google-auth-library 1.3.0
    Node.js google-cloud/bigquery 2.0.0
    Node.js google-cloud/bigquery-data-transfer 0.4.0
    Node.js google-cloud/bigtable 0.15.0
    Node.js google-cloud/cloud-container 0.3.0
    Node.js google-cloud/common 0.18.0
    Node.js google-cloud/common-grpc 0.7.0
    Node.js google-cloud/compute 0.11.0
    Node.js google-cloud/datastore 2.0.0
    Node.js google-cloud/dlp 0.8.0
    Node.js google-cloud/dns 0.8.0
    Node.js google-cloud/error-reporting 0.5.0
    Node.js google-cloud/firestore 0.16.1
    Node.js google-cloud/language 2.0.0
    Node.js google-cloud/logging 2.0.0
    Node.js google-cloud/logging-bunyan 0.9.0
    Node.js google-cloud/logging-winston 0.10.0
    Node.js google-cloud/monitoring 0.6.0
    Node.js google-cloud/os-login 0.3.0
    Node.js googleapis/nodejs-pubsub 0.20.0
    Node.js google-cloud/redis 0.2.0
    Node.js google-cloud/resource 0.9.0
    Node.js google-cloud/spanner 2.0.0
    Node.js google-cloud/speech 2.0.0
    Node.js google-cloud/storage 2.0.0
    Node.js google-cloud/tasks 0.2.0
    Node.js google-cloud/text-to-speech 0.3.0
    Node.js google-cloud/translate 2.0.0
    Node.js google-cloud/video-intelligence 1.3.0
    Node.js google-cloud/vision 0.21.0
    PHP google-cloud/video-intelligence 1.3.3
    Python oauth2client 2.0.0
    Python google-api-python-client 1.6.0
    Python googleapis/google-cloud-python 0.10.0
    Python google-cloud-happybase 0.20.0
    Ruby gcloud 0.11.1
    Ruby google-api-client 0.8.6