アプリケーションが内部ネットワークやファイアウォールによる隔離などの制限されたネットワーク環境のために API 操作を呼び出すことができない場合は、プロキシサーバーを使用してアプリケーションが外部ネットワークにアクセスできるようにすることができます。 Alibaba Cloud SDK は完全なプロキシ構成を提供し、HTTP および HTTPS プロトコルに柔軟に適応できます。 プロキシサーバーのプロキシアドレス、ポート、および認証パラメーターを構成した後、プロキシが API リクエストを転送できるようにすることができます。 このトピックでは、Tengine プロキシを構成し、Tengine SDK を使用して API 操作を呼び出す方法について説明します。
サンプルシナリオ
アプリケーションが内部ネットワークにデプロイされており、アプリケーションがインターネットにアクセスできるようにプロキシサーバーをデプロイする必要があるとします。 次の例では、仮想プライベートクラウド(VPC)にデプロイされている Elastic Compute Service(ECS)インスタンスが使用されます。
ECS インスタンス A:アプリケーションは VPC にデプロイされており、内部ネットワークのリソースにアクセスできますが、インターネットにはアクセスできません。 プライベート IP アドレスは 10.0.0.115 です。
ECS インスタンス B:インターネットへのアクセスを提供するプロキシサーバーとして機能します。 ECS インスタンス B は、ECS インスタンス A と同じ VPC にあります。 プライベート IP アドレスは 10.0.0.112 です。
説明インスタンス A とインスタンス B が異なる VPC にある場合は、VPC ピアリング接続またはエンタープライズ版トランジットルーターを作成して、VPC 間通信を確立できます。
プロキシサーバーをデプロイする
この例では、Tengine サーバーがプロキシサーバーとして使用され、ECS インスタンス B にデプロイされます。
Tengine をダウンロードしてインストールする
パッケージをダウンロードして解凍します。
wget https://tengine.taobao.org/download/tengine-3.1.0.tar.gz tar zxvf tengine-3.1.0.tar.gz依存関係ライブラリを更新します。
Alibaba Cloud Linux/CentOS
sudo yum update -yUbuntu/Debian
sudo apt-get update sudo apt-get upgrade -y依存関係をインストールします。
Alibaba Cloud Linux/CentOS
sudo yum install pcre pcre-devel openssl openssl-devel zlib-devel -y sudo yum groupinstall "Development Tools" -yUbuntu/Debian
sudo apt-get install libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev build-essential -yファイルをコンパイルして Tengine をインストールします。
cd tengine-3.1.0 ./configure --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=./modules/ngx_http_proxy_connect_module make && make installTengine プロセスを開始します。
次のコマンドを実行して、Tengine 実行可能ファイルの場所を照会します。例:
/root/tengine-3.1.0/objs/nginx:find / -name nginx 2>/dev/null | grep tengineTengine 実行可能ファイルを実行して、Tengine を起動します。
sudo /root/tengine-3.1.0/objs/nginxTengine が起動しているかどうかを確認します。
# Tengine プロセスが存在するかどうかを確認します。 ps aux | grep nginx
HTTP または HTTPS プロキシを構成する
次のコマンドを実行して、Tengine 構成ファイルを変更します。
vim /usr/local/nginx/conf/nginx.conf構成ファイルの
httpモジュールに次のコンテンツを追加します。警告次のサンプルコードは参照用です。 実際のシナリオに基づいて構成を調整してください。
# HTTPS プロキシ server { listen 8089; access_log /var/log/host.access.log; access_log "pipe:rollback /var/log/host.access_log interval=1d baknum=7 maxsize=2G"; # 転送プロキシで使用される DNS リゾルバー # CONNECT リクエストの転送プロキシ proxy_connect; proxy_connect_allow 443 563; proxy_connect_connect_timeout 10s; proxy_connect_read_timeout 10s; proxy_connect_send_timeout 10s; # CONNECT 以外のリクエストの転送プロキシ location / { proxy_pass $scheme://$http_host$request_uri; } } # HTTP プロキシ server { listen 8088; location / { proxy_pass $scheme://$http_host$request_uri; } }コンテンツを追加した後、ファイルを保存します。
Tengine を再読み込みします。
# Tengine を停止します。 /usr/local/nginx/sbin/nginx -s stop # 構成を有効にします。 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # Tengine を再起動します。 /usr/local/nginx/sbin/nginx -s reload
SDK を使用してプロキシサーバー経由で API を呼び出す
ECS インスタンス A にビジネスコードをデプロイします。次のサンプルコードは参照用です。
# pip install alibabacloud_ecs20140526
import os
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions
config = Config(
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
endpoint='ecs-cn-hangzhou.aliyuncs.com',
protocol='https', # プロキシと同じプロトコルを使用します。 HTTP プロキシを使用する場合は、値を http に設定します。 HTTPS プロキシを使用する場合は、値を https に設定します。
)
ecs_client = EcsClient(config)
runtime_options = RuntimeOptions(
# http_proxy='http://10.0.0.112:8088', # HTTP プロキシの IP アドレスとポート。
https_proxy='http://10.0.0.112:8089' # HTTPS プロキシの IP アドレスとポート。
)
request = DescribeRegionsRequest(
accept_language='en-US',
)
response = ecs_client.describe_regions_with_options(request, runtime_options)
print(response.body)
期待される応答:
