Virtual Private Cloud (VPC)は、Alibaba Cloud をベースに設置されたカスタムプライベートネットワークです。お客様専用の VPC 内にクラウドプロダクトのインスタンスを作成して使用することができます。通常は、インターネットからアクセスされないように、VPC 内でリソースを作成します。(デフォルトでは、Function Compute は VPC 内のリソースにアクセスできません。)VPC内のリソースにアクセスできるようになるため、VPC ID、セキュリティグループ ID、Vswitch ID などの設定情報を提供して、Function Compute でこの情報を弾性ネットワークインターフェイス(ENI)に設定し、ENI を介して VPC 内のリソースに安全にアクセスできます。
ここでは、主に以下の内容について紹介します。
VPC 設定
Function Compute で VPC にアクセスするための設定はサービスレベルであり、サービスがVPCにアクセスできるように設定されると、このサービスのすべての関数がVPC にアクセスできます。
権限の付与
Function Compute は ENI を介して VPC 内のリソースにアクセスするため、VPC へのアクセスを必要とする ENI サービスの作成、describe、および削除の権限を与える必要があります。権限についての詳細はRAMをご参照ください。
Function Compute に対応サービスロールに対して次の権限を付与する必要があります。
- vpc:DescribeVSwitchAttributes
- ecs:CreateNetworkInterface
- ecs:DeleteNetworkInterface
- ecs:DescribeNetworkInterfaces
- ecs:CreateNetworkInterfacePermission
- ecs:DescribeNetworkInterfacePermissions
RAMは、上記の権限を持つシステムテンプレート AliyunECSNetworkInterfaceManagementAccess
を提供しますので、VPCリソースサービスにアクセスするロールに AliyunECSNetworkInterfaceManagementAccess
をバインドするだけで権限付与できます。
VPC Config
サービスに vpcConfig
を設定すると、このサービスの下にあるすべての関数が VPC にアクセスできるようになります。 vpcConfig
の下には vpcId
, vSwitchIds
, securityGroupId
の3つのフィールドがあり、各フィールドは必須項目です。
vpcId
:アクセスする VPC IDvSwitchIds
: 一連のスイッチのリストです。少なくとも 1 つの vSwitchId を指定する必要があります。securityGroupId
: セキュリティグループ ID"vpcConfig": {
"vpcId": "string",
"vSwitchIds": [ "string" ],
"securityGroupId": "string"
}
その中に
vSwitchIds
は、Function Compute でアクセスできるサブネットを限定します。vSwitchIds
に複数のvSwitch
を設定することをお勧めします。一つのゾーンに障害が発生した場合や IP アドレスが不足している場合は、他のサブネットで関数を実行できます。securityGroupId
は、VPC で Function Compute のインバウンド/アウトバウンドのルールを制限します。VPC 設定はサービスレベルであるので、
vpcConfig
がサービスに設定されると、このサービスのすべての関数がVPCにアクセスできます。- 複数の
vSwitchId
がvSwitchIds
で指定されている場合、Function Compute では ENI を作成するときに一つがランダムに選択されます。 - Function Compute は ENI を介して VPC 内のリソースにアクセスします。セキュリティグループは、VPC 内の ENI のアクセス制御です。ユーザーがセキュリティグループの構成に関するすべての権限を持っています。セキュリティグループが正しく設定されていないと、Function Compute が VPC に正常にアクセスできなくなります。
ネットワークアクセス
Function Compute のサービスには、このサービスがパブリックネットワークにアクセスできるかどうかを示すために使用される Boolean 型の internetAccess
フィールドがあります。デフォルト値はtrue
で、このサービスがインターネットにアクセスできることを示します。internetAccess
フィールドを false
に設定する場合、ユーザーは、このサービスのすべての関数がインターネットに接続できないことを示します。
"internetAccess": boolean
ネットワークアクセス可能性
現在、関数は 4 種類のネットワークへのアクセスが可能です。 "internetAccess": true
を設定すると、関数はインタネットにアクセスでき、vpcConfig
を設定すると、関数が対応する VPC にアクセスできます。必要に応じて設定できます。
internetAccess | vpcConfig | ネットワークアクセス可能性 |
---|---|---|
True | 設定済 | 関数がインターネットにアクセスできており、vpc にもアクセスできます。 |
True | 未設定 | 関数がインターネットにアクセスできます。vpc にアクセスできません。 |
False | 設定済 | 関数がインターネットにアクセスせず、vpc にアクセスできます。 |
False | 未設定 | 関数がインターネットにアクセスできず、vpc にもアクセスできません。 |
注意事項
VPC 使用のシナリオ
VPC を使用するとオーバーヘッドが発生するため、VPCを設定する前に、このシナリオでは VPC を使用するか否かを判断する必要があります。次の図は、VPCを使用する必要があるかどうかを判断するのに役立ちます。
- VPC Config を使用すると、VPC 内のリソースにアクセスできるようになりますが、オーバーヘッドが発生します。RAM 認証を使用してアクセスできるリソースは、VPC Config を使用することは推奨されません。例えば、Function Compute はTable Store にアクセスします。 Function Compute に Table Store へのアクセス権を与えることによって行うことができます。この場合、VPC Config を使用することはお勧めしません。
問題診断
Function Compute は VPC デバッグに正常にアクセスできません。
サービスに vpcConfig
がすでに設定されていても、VPCに正常にアクセスできない場合は、次の理由が考えられます。以下の手順に従ってデバッグすることができます。
- スイッチに接続するサブネットに障害があるか、サブネット内の IP アドレスが使い尽くされている可能性があります。VPC を設定するときに 2 つ以上複数の
vSwitchIds
を指定することをお勧めします。一つのゾーンに障害が発生した場合は、他のゾーンで関数を実行できますので、耐障害性の向上に役立ちます。 - セキュリティグループ が正しく設定されていない可能性があります。
- まず、デフォルトのアウトバウンドルールを使用するセキュリティグループを提供します。デフォルトのアウトバウンド動作では、ENI は VPC 内のすべてのリソースにアクセスできます。
- 次に、使用するセキュリティグループのインバウンドルールを上記のセキュリティグループがアクセスできるように設定します。
エラーのタイプ
Function Compute では、vpcConfig を設定するときに VPC へのアクセス権限を検出することができず、関数を実行するときに検出する必要があるため、関数を呼び出すときに、新しいエラータイプが導入されます。以下では、VPC にアクセスする際の一般的なエラーについて説明します。
エラーコード | ステータスコード | 問題の原因 | ソリューション |
---|---|---|---|
InvalidArgument | 400 | Function Compute は、vSwitchId で指定されたゾーンをサポートしていません。 | vSwitchId を変更して設定します。 |
400 | vpcConfig の vpcId、vSwitchIds、または securityGroupIdのリソースが見つかりません。 | vpcConfig パラメータの設定を確認します。 | |
400 | 設定された VSwitch または security group は、対応するVPC にありません。 | vpcConfig パラメータ設定を確認して、vSwitchId およびsecurityGroupId に対応するリソースが vpcId に対応するVPC にあることを確認します。 | |
AccessDenied | 403 | ENI の操作を実行する権限がありません。 | サービスの権限を確認し、権限付与をご参照ください。 権限の付与 |
ResourceExhausted | 429 | VPC 内の ENI リソースが使い尽くされているため、Function Compute は新しい ENI を作成できません。 | 多くのENIを提供します。 |
使用例
例1. コンソールの使用例
コンソールサービス設定を使用して VPC 内のリソースにアクセスすることは、 サービスの作成 時または サービスの更新 時に設定されます。コンソールに応じて VPC の設定を行います。
例2. SDK の使用例
Python SDK を使用して、サービスの VPC Configを作成します。例:
def test_vpcConfig(self):
name = 'test_vpcConfig'
vpcConfig = {
'vpcId': 'my-vpcId',
'vSwitchIds': [ids],
'securityGroupId': 'my-securityGroupId'
}
# create vpcConfig when creating the service
logging.info('Create service: {0}'.format(name))
service = self.client.create_service(name, role=self.vpcRole, vpcConfig=vpcConfig)