バケットの静的Webサイトホスティングを有効にし、ミラーリングベースのback-to-originルールを設定できます。 バケットで静的Webサイトをホストした後、バケットにアクセスしてWebサイトにアクセスできます。 指定したインデックスページまたはエラーページに自動的にリダイレクトされます。 ミラーリングベースのback-to-originルールを設定して有効にすると、ミラーリングベースのback-to-originを使用して、データをObject Storage Service (OSS) にシームレスに移行できます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
静的Webサイトホスティングまたはミラーリングベースのback-To-originを構成するには、
oss:PutBucketWebsite
権限が必要です。 静的Webサイトホスティング構成またはミラーリングベースのback-To-originルールを照会するには、oss:GetBucketWebsite
権限が必要です。 静的Webサイトホスティング設定またはミラーリングベースのback-To-originルールを削除するには、oss:DeleteBucketWebsite
権限が必要です。 詳細については、「RAMポリシーの一般的な例」をご参照ください。
静的 Web サイトホスティング
静的 Web サイトホスティングの設定
次のサンプルコードは、静的Webサイトホスティングを構成する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.SetBucketWebsiteRequestをインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // バケットの名前を指定します。 SetBucketWebsiteRequestリクエスト=新しいSetBucketWebsiteRequest(bucketName); // バケットでホストされている静的Webサイトのデフォルトのホームページを指定します。 request.setIndexDocument("index.html"); // バケットでホストされている静的Webサイトのデフォルトの404ページを指定します。 request.setErrorDocument("error.html"); ossClient.setBucketWebsite(request); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
静的Webサイトホスティング設定の照会
次のコードは、静的Webサイトホスティング設定を照会する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.BucketWebsiteResultをインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // バケットの名前を指定します。 BucketWebsiteResult結果=ossClient.getBucketWebsite(bucketName); // バケットでホストされている静的Webサイトのデフォルトのホームページとデフォルトの404ページを照会します。 System.out.println(result.getIndexDocument()); System.out.println(result.getErrorDocument()); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
静的 Web サイトホスティング設定の削除
次のサンプルコードは、静的Webサイトホスティング設定を削除する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // バケットの名前を指定します。 ossClient.de leteBucketWebsite(bucketName); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
ミラーリングベースのback-to-origin
ミラーリングベースのback-to-originを使用すると、データをOSSにシームレスに移行できます。 たとえば、サービスを中断することなく、自己管理オリジンまたは別のクラウドサービスからOSSにサービスを移行できます。 移行中にミラーリングベースのback-to-originルールを使用して、OSSに移行されていないデータを取得できます。 これにより、ビジネスの継続性が確保されます。
ミラーリングベースのback-to-originの設定
要求者が特定のバケット内のオブジェクトにアクセスしようとしても、そのオブジェクトが存在しない場合は、オリジンおよびback-to-origin条件でオブジェクトのURLを指定して、要求者がオリジンからオブジェクトを取得できるようにすることができます。 たとえば、examplebucketという名前のバケットは、中国 (杭州) リージョンにあります。 リクエスタがバケットのルートディレクトリのexamplefolderディレクトリにあるオブジェクトにアクセスしようとしたが、そのオブジェクトが存在しない場合、リクエスタはそのオリジンにリダイレクトされ、https://www.example.com/ オリジンのexamplefolderディレクトリに格納されている必要なオブジェクトにアクセスします。
次のサンプルコードは、前述のシナリオのミラーリングベースのback-to-originルールを設定する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.RoutingRuleをインポートします。com.aliyun.oss.mo del.SetBucketWebsiteRequestをインポートします。java.util.ArrayListをインポートします。java.util.HashMapをインポートします。java.util.Listをインポートします。java.util.Mapをインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { SetBucketWebsiteRequestリクエスト=新しいSetBucketWebsiteRequest(bucketName); // デフォルトのホームページが指定され、要求されたオブジェクトの名前がスラッシュ (/) で終わらず、オブジェクトが存在しない場合に実行する操作を指定します。 // request.setSubDirType(null); // サブディレクトリにアクセスしたときに、リクエスト元をサブディレクトリのデフォルトのホームページにリダイレクトするかどうかを指定します。 // request.setSupportSubDir(false); List<RoutingRule> routingRules = new ArrayList<RoutingRule>(); RoutingRule rule = new RoutingRule(); rule.setNumber(1); // オブジェクト名に含まれるプレフィックスを指定します。 指定されたプレフィックスを含む名前のオブジェクトのみがルールに一致します。 rule.getCondition().setKeyPrefixEquals("examplebucket"); // HTTPステータスコードを指定します。 指定されたオブジェクトがアクセスされ、HTTPステータスコード404が返された場合にのみ、ルールが一致します。 rule.getCondition().setHttpErrorCodeReturnedEquals(404); // リダイレクションタイプを指定します。 rule.getRedirect().setRedirectType(RoutingRule.RedirectType.Mirror); // ミラーリングベースのback-to-originルールのオリジンのURLを指定します。 例: https://www.example.com/. rule.getRedirect().setMirrorURL("<yourMirrorURL>"); // rule.getRedirect().setMirrorRole("AliyunOSSMirrorDefaultRole"); // リダイレクションルールまたはミラーリングベースのback-to-originルールの実行時にリクエストパラメーターを含めるかどうかを指定します。 rule.getRedirect().setPassQueryString(true); // このパラメーターは、PassQueryStringパラメーターと同じ方法で使用され、PassQueryStringパラメーターよりも高い優先度レベルが割り当てられます。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 rule.getRedirect().setMirrorPassQueryString(true); // リクエストがリダイレクトされたときのレスポンスでHTTPステータスコードを指定します。 このパラメーターは、RedirectTypeパラメーターをExternalまたはAliCDNに設定した場合にのみ有効になります。 // rule.getRedirect().setHttpRedirectCode(302); // リダイレクトに使用するドメイン名を指定します。 ドメイン名は、ドメイン名の命名規則に準拠している必要があります。 // rule.getRedirect().setHostName("oss.aliyuncs.com"); // リダイレクトに使用するプロトコルを指定します。 このパラメーターは、RedirectTypeパラメーターをExternalまたはAliCDNに設定した場合にのみ有効になります。 // rule.getRedirect().setProtocol(RoutingRule.Protocol.Https); // リクエストがリダイレクトされたときにオブジェクト名を置き換えるために使用する文字列を指定します。 このパラメーターを変数に設定できます。 // rule.getRedirect().setReplaceKeyWith("${key }.jpg"); // このパラメーターをtrueに設定すると、オブジェクト名のプレフィックスはReplaceKeyPrefixWithパラメーターで指定された値に置き換えられます。 rule.getRedirect().setEnableReplacePrefix(true); // リダイレクト時にオブジェクト名のプレフィックスを置き換えるために使用する文字列を指定します。 rule.getRedirect().setReplaceKeyPrefixWith("examplebucket"); // オリジンから返されるレスポンス本文のMD5ハッシュをチェックするかどうかを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 rule.getRedirect().setMirrorCheckMd5(true); RoutingRule.MirrorHeaders mirrorHeaders = new RoutingRule.MirrorHeaders(); // 次のヘッダーを除くすべてのリクエストヘッダーをオリジンに渡すかどうかを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 mirrorHeaders.setPassAll(false); リストパス=new ArrayList<String>(); passes.add("cache-control"); // オリジンに渡すヘッダーを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 mirrorHeaders.setPass (パス); リスト削除=new ArrayList<String>(); removes.add("content-type"); // オリジンに渡さないヘッダーを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 mirrorHeaders.setRemove (削除); リストセット=new ArrayList<Map<String, String>>(); Map header1 = new HashMap<String, String>(); header1.put("キー" 、"key1"); header1.put("Value" 、"value1"); Map header2 = new HashMap<String, String>(); header2.put("キー" 、"key2"); header2.put("Value" 、"value2"); sets.add(header1); sets.add(header2); // オリジンに渡すヘッダーを指定します。 指定されたヘッダーは、ヘッダーがリクエストに含まれているかどうかに関係なく、オリジンに渡されます。 mirrorHeaders.setSet (セット); // リクエストされたオブジェクトがオリジンから取得されたときに、レスポンスに含めるヘッダーを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 rule.getRedirect().setMirrorHeaders(mirrorHeaders); routingRules.add (ルール); request.setRoutingRules(routingRules); ossClient.setBucketWebsite(request); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
ミラーリングベースのback-to-origin設定の照会
次のコードでは、ミラーリングベースのback-to-origin構成を照会する方法の例を示します。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.BucketWebsiteResultをインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { BucketWebsiteResult結果=ossClient.getBucketWebsite(bucketName); result.getSubDirType(); // リダイレクションルールまたはミラーリングベースのback-to-originルールの一致と実行に使用されるシーケンス番号を照会します。 System.out.println(result.getRoutingRules().get(0).getNumber()); // ルールマッチングに使用されるプレフィックスを照会します。 System.out.println(result.getRoutingRules().get(0).getCondition().getKeyPrefixEquals()); // HTTPステータスコードを照会します。 System.out.println(result.getRoutingRules().get(0).getCondition().getHttpErrorCodeReturnedEquals()); // ルールマッチングに使用されるサフィックスを照会します。 System.out.println(result.getRoutingRules().get(0).getCondition().getKeySuffixEquals()); // リダイレクションタイプを照会します。 System.out.println(result.getRoutingRules().get(0).getRedirect().getRedirectType()); // リクエスト内のパラメーターを照会します。 System.out.println(result.getRoutingRules().get(0).getRedirect().getMirrorPassQueryString()); // ミラーリングベースのback-to-originのオリジンのURLを照会します。 System.out.println(result.getRoutingRules().get(0).getRedirect().getMirrorURL()); // レスポンス内のHTTPステータスコードを照会します。 System.out.println(result.getRoutingRules().get(0).getRedirect().getHttpRedirectCode()); // 渡されるヘッダーを照会します。 System.out.println(result.getRoutingRules().get(0).getRedirect().getMirrorHeaders().getPass().get(0)); // 通過できないヘッダーを照会します。 System.out.println(result.getRoutingRules().get(0).getRedirect().getMirrorHeaders().getRemove().get(0)); // リダイレクトに使用されるプロトコルを照会します。 System.out.println(result.getRoutingRules().get(0).getRedirect().getProtocol()); // リクエストのリダイレクト先のドメイン名を照会します。 System.out.println(result.getRoutingRules().get(0).getRedirect().getHostName()); // リクエストがリダイレクトされたときにオブジェクト名のプレフィックスを置き換えるために使用される文字列を指定します。 オブジェクトのプレフィックスが空の場合、この文字列はオブジェクト名の前にあります。 System.out.println(result.getRoutingRules().get(0).getRedirect().getReplaceKeyPrefixWith()); // リクエストがリダイレクトされたときにオブジェクト名を置き換えるために使用される文字列を指定します。 このパラメーターは変数に設定できます。 System.out.println(result.getRoutingRules().get(0).getRedirect().getReplaceKeyWith()); // レスポンス内のHTTPステータスコードを照会します。 System.out.println(result.getRoutingRules().get(0).getRedirect().getHttpRedirectCode()); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
ミラーリングベースのback-to-origin設定の削除
次のサンプルコードは、ミラーリングベースのback-to-origin設定を削除する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // バケットの名前を指定します。 ossClient.de leteBucketWebsite(bucketName); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
参考資料
静的Webサイトホスティングとミラーリングベースのback-to-originを設定するために使用される完全なサンプルコードについては、GitHubをご覧ください。
静的Webサイトホスティングまたはミラーリングベースのback-to-originを構成するために呼び出すことができるAPI操作の詳細については、「PutBucketWebsite」をご参照ください。
静的Webサイトホスティング構成またはミラーリングベースのback-to-originルールを照会するために呼び出すことができるAPI操作の詳細については、「GetBucketWebsite」をご参照ください。
静的Webサイトホスティング設定またはミラーリングベースのback-to-originルールを削除するために呼び出すことができるAPI操作の詳細については、「DeleteBucketWebsite」をご参照ください。