デフォルトでは、Function Compute で作成された関数はパブリックネットワークにアクセスできますが、Virtual Private Cloud (VPC) 内のリソースにはアクセスできません。関数が VPC リソースにアクセスできるようにしたり、関数の呼び出しを特定の VPC に制限したりするには、ネットワーク設定と権限を手動で設定する必要があります。このトピックでは、Function Compute コンソールで関数のネットワーク設定を行う方法を説明します。
注意事項
Alibaba Cloud Container Registry (ACR) Enterprise Edition インスタンスイメージから作成された GPU アクセラレーション関数に VPC アクセスを設定する場合、VPC と vSwitch の選択は以下の原則に従う必要があります。
ACR Enterprise Edition インスタンスの [アクセス制御] ページに [デフォルト解決] タグが付いた [アクセス IP] が表示される場合、関数の VPC と vSwitch は、デフォルト解決 IP アドレスに対応する VPC と vSwitch に設定する必要があります。
ACR Enterprise Edition インスタンスの [アクセス制御] ページに [デフォルト解決] タグが付いていない [アクセス IP] が表示される場合、関数の VPC と vSwitch は、インスタンスにバインドされている任意のペアに設定できます。
ネットワークアクセス機能
VPC アクセスを有効にすると、FC のコールドスタートレイテンシーが増加する可能性があります。この設定は必要な場合にのみ使用することを推奨します。代替案として、RAM 認証を使用してリソースにアクセスすることを検討してください。詳細については、「関数ロールを使用した他のクラウドサービスへのアクセス」をご参照ください。
関数が呼び出されたとき、またはネットワークアドレスにアクセスしたときにトラフィックが生成されます。このトラフィックは、次のカテゴリに分類されます。
パブリックネットワークトラフィック:Alibaba Cloud の公式サイト、Taobao、またはクラウドサービスのパブリックエンドポイントなど、インターネットアドレスへのアクセスから生成されるトラフィック。
VPC トラフィック:RDS エンドポイント、NAS エンドポイント、または ECS インスタンスのプライベート IP アドレスなど、VPC 内のリソースへのアクセスから生成されるトラフィック。
関数のネットワークアクセス機能は、設定によって異なります。必要に応じて設定してください。
関数のエグレストラフィック:これは、関数がパブリックネットワークまたは VPC 内のリソースにエグレストラフィックを送信できるかどうかを指します。対応する設定は、[VPC アクセスを許可] と [関数によるパブリックネットワークへのアクセスを許可] です。
表 1. 関数のエグレストラフィック
設定
説明
関数がパブリックネットワークにのみアクセスすることを許可
関数はパブリックネットワークと Function Compute の内部ネットワークにアクセスします。VPC を介したアクセスは無効になります。
必要なネットワーク設定:
[VPC アクセスを許可] を [いいえ] に設定します。
[関数によるパブリックネットワークへのアクセスを許可] を [はい] に設定します。
関数が VPC にのみアクセスすることを許可
関数は、VPC を介してのみパブリックネットワークと内部リソースにアクセスします。これは、PrivateZone、NAT Gateway、または VPC にバインドされた関数を含むシナリオに適しています。
必要なネットワーク設定:
[VPC アクセスを許可] を [はい] に設定し、関数がアクセスできる VPC 情報を設定します。
[関数によるパブリックネットワークへのアクセスを許可] を [いいえ] に設定します。
関数がパブリックネットワークと VPC の両方にアクセスすることを許可
非 GPU 関数の場合:
関数のネットワークを介してパブリックネットワークにアクセスします。
VPC を介して内部ネットワークにアクセスします。PrivateZone はプライベートドメイン名の解決でサポートされています。
GPU 関数の場合:
関数のネットワークを介してパブリックネットワークと 100.0.0.0/8 CIDR ブロックの内部ネットワークにアクセスします。
VPC を介して 100.0.0.0/8 CIDR ブロック外の内部ネットワークにアクセスします。PrivateZone はプライベートドメイン名の解決ではサポートされていません。この機能を有効にするには、チケットを送信する必要があります。
必要なネットワーク設定:
[VPC アクセスを許可] を [はい] に設定し、関数がアクセスできる VPC 情報を設定します。
[関数によるパブリックネットワークへのアクセスを許可] を [はい] に設定します。
関数がパブリックネットワークと VPC の両方にアクセスするのを禁止
関数は Function Compute の内部ネットワークにアクセスできます。パブリックネットワークと VPC へのアクセスは無効になります。必要なネットワーク設定:
[VPC アクセスを許可] を [いいえ] に設定します。
[関数によるパブリックネットワークへのアクセスを許可] を [いいえ] に設定します。
関数のイングレストラフィック:これは、関数がパブリックネットワークまたは VPC からイングレストラフィックを受信できるかどうかを指します。対応する設定は [指定された VPC からのみ関数を呼び出すことを許可] です。
表 2. 関数のイングレストラフィック
設定
説明
関数がパブリックネットワークと VPC の両方から呼び出されることを許可
デフォルトでは、新しい関数はパブリックネットワークと VPC 内から呼び出すことができます。デフォルトのネットワーク設定は次のとおりです:
[指定された VPC からのみ関数を呼び出すことを許可] を [いいえ] に設定します。
関数が指定された VPC からのみ呼び出されることを許可
この設定により、指定された VPC からの関数の呼び出しのみが許可され、パブリックネットワークからのリクエストは拒否されます。必要なネットワーク設定:
[指定された VPC からのみ関数を呼び出すことを許可] を [はい] に設定し、関数を呼び出すことができる VPC を設定します。
サポートされているアベイラビリティーゾーン
各リージョンでサポートされているアベイラビリティーゾーンの最新リストを取得するには、OpenAPI Explorer で Get Availability Zones API を呼び出します。
リソースが Function Compute でサポートされていないアベイラビリティーゾーンにある場合、Function Compute がサポートするアベイラビリティーゾーン内の VPC 環境に vSwitch を作成し、この vSwitch ID を Function Compute 関数の VPC 設定に設定できます。同じ VPC 内の vSwitch はプライベートネットワークを介して相互に通信できるため、Function Compute は vSwitch を使用して同じ VPC 内の他のアベイラビリティーゾーンのリソースにアクセスできます。詳細については、「'vSwitch is in unsupported zone' エラーが発生した場合の対処方法」をご参照ください。
前提条件
(オプション) ネットワークリソースの作成
必要なリソースを作成していない場合、設定プロセス中に [自動設定] を選択できます。それ以外の場合は、以下のトピックの手順に従って事前にリソースを作成する必要があります:
ネットワークとロールの設定
Function Compute コンソールにログインします。左側メニューで、 を選択します。
上部メニューでリージョンを選択します。関数リスト ページで、対象の関数をクリックします。
関数詳細ページで、設定 タブをクリックし、詳細設定 セクションの 変更 をクリックします。
詳細設定 パネルで ネットワーク セクションを見つけ、必要に応じて設定し、デプロイ をクリックします。
[VPC アクセスを許可]:関数が VPC 内のリソースにアクセスできるかどうかを制御します。選択肢は次のとおりです。
[有効化]:関数が VPC 内のリソースにアクセスできるようにします。[有効化] を選択した後、[設定方法] を選択する必要があります。選択肢は次のとおりです。
(推奨) [自動設定]:Function Compute は VPC、vSwitch、セキュリティグループなどのリソースを自動的に作成します。システムは新しいリソースを作成する代わりに、現在のリージョンにある既存のリソースを再利用します。
[カスタム設定]:既存のネットワークリソースを手動で選択する必要があります。事前に必要なリソースを作成しておく必要があります。
VPC:リストからアクセスしたい VPC を選択します。
重要選択した VPC には最大 10 個の vSwitch を作成できます。
vSwitch:リストから少なくとも 1 つの vSwitch を選択します。
このフィールドは、Function Compute がアクセスできるサブネットを指定します。2 つ以上の vSwitch を指定することを推奨します。これにより、アベイラビリティーゾーンで障害が発生した場合や、サブネットの IP アドレスが枯渇した場合に、関数を他のサブネットで実行できるようになります。
セキュリティグループ:リストからセキュリティグループを選択します。
このセキュリティグループは、Elastic Network Interface (ENI) を関数に関連付け、VPC 内のリソースへのアクセスを制御します。デフォルトでは、セキュリティグループのアウトバウンドルールはすべてのトラフィックを許可します。また、アウトバウンドルールを設定して、関数の詳細なアクセスコントロールポリシーを定義することもできます。
説明セキュリティグループのアウトバウンドルールは、ICMP プロトコルを許可する必要があります。Function Compute は ICMP を使用して VPC のネットワーク接続性を確認します。
[無効化]:関数が VPC 内のリソースにアクセスできないようにします。
[固定パブリック IP]:NAT Gateway と Elastic IP Address を使用して、インターネットアクセス用の固定パブリック IP アドレスを取得するかどうかを指定します。詳細については、「固定パブリック IP アドレスの設定」をご参照ください。
[デフォルト ENI のインターネットアクセスを許可]:関数がパブリックネットワークにアクセスできるかどうかを指定します。選択肢は次のとおりです。
[有効化]:関数がパブリックネットワークにアクセスできるようにします。
[無効化]:関数がパブリックネットワークにアクセスできないようにします。
[指定された VPC からのみ関数を呼び出すことを許可]:関数が指定された VPC からのみ呼び出されることを許可するかどうかを指定します。選択肢は次のとおりです。
[有効化]:関数が指定された VPC からのみ呼び出されることを許可します。以下の点にご注意ください:
関数は最大 20 個の VPC にバインドできます。
トリガーによる関数の呼び出しは影響を受けません。
VPC バインディングは、関数のすべてのバージョンとエイリアスに適用されます。
この設定を有効にすると、パブリックネットワークや他の VPC からの呼び出しリクエストは拒否されます。システムは
StatusCode403、ErrorCodeAccessDenied、およびエラーメッセージResource access is bound by VPC: VPC IDを返します。VPC バインディングは、プライベート HTTP エンドポイントでのみサポートされています。パブリックエンドポイントとプライベート HTTPS エンドポイントはサポートされていません。
[無効化]:関数がパブリックネットワークとすべての VPC から呼び出されることを許可します。
よくある質問 (FAQ)
Function Compute がデバッグのために VPC に接続できないのはなぜですか?
関数で VPC アクセスを有効にしているにもかかわらず接続に失敗する場合、考えられる原因は次のとおりです:
vSwitch をホストするサブネットに障害があるか、サブネットの IP アドレスが枯渇しています。VPC を設定する際に 2 つ以上の vSwitch ID を指定できます。この設定により、1 つのアベイラビリティーゾーンで障害が発生した場合でも、関数を他のアベイラビリティーゾーンで実行できるため、フォールトトレランスが向上します。
セキュリティグループの設定が正しくありません。セキュリティグループを次のように設定します:
VPC のセキュリティグループのインバウンドルールで、Function Compute のセキュリティグループからのアクセスを許可するように設定する必要があります。
セキュリティグループのアウトバウンドルールは、ICMP プロトコルを許可する必要があります。Function Compute は ICMP を使用して VPC のネットワーク接続性を確認します。
セキュリティグループの設定方法の詳細な手順については、「セキュリティグループルールの追加」をご参照ください。
ネットワークリソースが不足している場合はどうすればよいですか?
VPC ネットワークリソースを作成する際、自動設定では /24 のネットワークプレフィックスが提供され、252 個の利用可能な IP アドレスが提供されます。インスタンスが多すぎると、この制限を超える可能性があります。この場合、vSwitch の CIDR ブロックと対応するセキュリティグループを手動で調整する必要があります。
トラブルシューティング
Function Compute は vpcConfig を設定する際に VPC アクセス権限を確認できません。これらの権限は、関数の実行中にのみ確認されます。そのため、InvokeFunction API を使用して関数を呼び出す際に、新たな種類のエラーが発生する可能性があります。次の表は、VPC へのアクセス時に発生する一般的なエラーを示しており、問題を迅速にトラブルシューティングするのに役立ちます。
エラーコード | HTTP ステータスコード | 原因 | 解決策 |
InvalidArgument | 400 | Function Compute は、vSwitchId で指定された vSwitch のアベイラビリティーゾーンをサポートしていません。 | vSwitchId を更新します。詳細については、「サポートされているアベイラビリティーゾーン」をご参照ください。 |
vpcConfig の vpcId、vSwitchIds、または securityGroupId に対応するリソースが見つかりません。 | vpcConfig パラメーターの設定を確認してください。 | ||
指定された vSwitch またはセキュリティグループが、対応する VPC にありません。 | vpcConfig パラメーターの設定を確認し、vSwitchId および securityGroupId に対応するリソースが vpcId に対応する VPC 内にあることを確認してください。 | ||
AccessDenied | 403 | ENI に対する操作を実行する権限が付与されていません。 | 関数の権限を確認してください。詳細については、「関数ロールを使用した他のクラウドサービスへのアクセス」をご参照ください。 |
ResourceExhausted | 429 | vSwitch の CIDR ブロックに十分な IP アドレスがないため、Function Compute は追加の ENI を作成できません。 | より大きな CIDR ブロックを持つ vSwitch を作成し、vpcConfig の vSwitchId パラメーターを更新してください。 説明
|
関連ドキュメント
VPC 内のデータベースにアクセスするには、データベースの IP アドレスの許可リストを設定することを推奨します。許可リストには、このページで設定した vSwitch の CIDR ブロックを指定します。詳細については、「データベースへのアクセス」をご参照ください。
関数のパブリックネットワークへのエグレストラフィックを制御するには、固定 IP アドレスを使用する必要があります。詳細については、「固定パブリック IP アドレスの設定」をご参照ください。