La ressource ALIYUN::OSS::Bucket permet de créer un compartiment (bucket) Object Storage Service (OSS).
Syntaxe
{
"Type": "ALIYUN::OSS::Bucket",
"Properties": {
"AccessControl": String,
"RefererConfiguration": Map,
"ServerSideEncryptionConfiguration": Map,
"CORSConfiguration": Map,
"Tags": Map,
"LoggingConfiguration": Map,
"LifecycleConfiguration": Map,
"StorageClass": String,
"DeletionForce": Boolean,
"Policy": Map,
"BucketName": String,
"RedundancyType": String,
"VersioningConfiguration": Map,
"ResourceGroupId": String,
"EnableOssHdfsService": Boolean,
"WebsiteConfigurationV2": Map,
"BlockPublicAccess": Boolean
}
}
Propriétés
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
BucketName | String | Oui | Non | Nom du compartiment. | Le nom doit comporter entre 3 et 63 caractères. Il doit commencer et se terminer par une lettre minuscule ou un chiffre. Il ne peut contenir que des lettres minuscules, des chiffres et des traits d'union (-). Remarque Ce nom doit être unique à l'échelle mondiale. Utilisez AutoCompleteInput dans AssociationProperty pour générer automatiquement une chaîne aléatoire. Comment contrôler la longueur d'une chaîne aléatoire ? |
AccessControl | String | Non | Oui | Autorisations d'accès au compartiment. | Valeurs possibles :
|
CORSConfiguration | Map | Non | Oui | Configuration CORS (Cross-Origin Resource Sharing). | Pour plus d'informations, consultez la section Propriétés CORSConfiguration. |
DeletionForce | Boolean | Non | Oui | Indique s'il faut forcer la suppression des objets contenus dans le compartiment. | Valeurs possibles :
|
EnableOssHdfsService | Boolean | Non | Oui | Indique s'il faut activer le service OSS-HDFS. | Valeurs possibles :
|
BlockPublicAccess | Boolean | Non | Oui | Indique s'il faut bloquer l'accès public au compartiment. | Valeurs possibles :
|
LifecycleConfiguration | Map | Non | Oui | Configuration du cycle de vie des objets stockés dans le compartiment. | Pour plus d'informations, consultez la section Propriétés LifecycleConfiguration. |
LoggingConfiguration | Map | Non | Non | Configuration du stockage des journaux. | Pour plus d'informations, consultez la section Propriétés LoggingConfiguration. |
Policy | Map | Non | Oui | Stratégie du compartiment. | |
RedundancyType | String | Non | Non | Type de redondance des données pour le compartiment. | Valeurs possibles :
|
RefererConfiguration | Map | Non | Oui | Configuration de la protection contre le hotlinking. | Pour plus d'informations, consultez la section Propriétés RefererConfiguration. |
ResourceGroupId | String | Non | Non | ID du groupe de ressources. | Aucune |
ServerSideEncryptionConfiguration | Map | Non | Oui | Configuration du chiffrement côté serveur. | Pour plus d'informations, consultez la section Propriétés ServerSideEncryptionConfiguration. |
StorageClass | String | Non | Non | Classe de stockage du compartiment. | Valeurs possibles :
|
Tags | Map | Non | Oui | Étiquettes du compartiment. Chaque étiquette est une paire clé-valeur. | Vous pouvez configurer jusqu'à 20 étiquettes. La clé doit comporter entre 1 et 64 caractères. Elle ne peut pas commencer par La valeur doit comporter entre 0 et 128 caractères et être encodée en UTF-8. |
VersioningConfiguration | Map | Non | Oui | Conteneur qui stocke l'état du versioning. | Pour plus d'informations, consultez la section Propriétés VersioningConfiguration. |
WebsiteConfigurationV2 | Map | Non | Non | Configuration du site web statique. | Pour plus d'informations, consultez la section Propriétés WebsiteConfigurationV2. |
Syntaxe CORSConfiguration
"CORSConfiguration": {
"CORSRule": List,
"ResponseVary": Boolean
}
Propriétés CORSConfiguration
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
CORSRule | List | Non | Oui | Règle CORS. | Pour plus d'informations, consultez la section Propriétés CORSRule. |
ResponseVary | Boolean | Non | Oui | Spécifie s'il faut retourner l'en-tête | Valeurs possibles :
Remarque Vous ne pouvez pas configurer ce champ seul. Vous devez configurer au moins une règle CORS pour que ce champ prenne effet. |
Syntaxe CORSRule
"CORSRule": [
{
"MaxAgeSeconds": Number,
"AllowedMethod": List,
"ExposeHeader": List,
"AllowedOrigin": List,
"AllowedHeader": List
}
]
Propriétés CORSRule
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
AllowedHeader | List | Non | Oui | En-têtes autorisés dans les requêtes cross-origin. | Valeurs possibles :
|
AllowedMethod | List | Non | Oui | Méthodes HTTP autorisées dans les requêtes cross-origin. | Valeurs possibles :
|
AllowedOrigin | List | Non | Oui | Origines autorisées dans les requêtes cross-origin. | Aucune |
ExposeHeader | List | Non | Oui | En-têtes de réponse accessibles par les utilisateurs depuis les applications. | L'astérisque (*) n'est pas autorisé. |
MaxAgeSeconds | Number | Non | Oui | Durée pendant laquelle les navigateurs mettent en cache les résultats des requêtes OPTIONS pour des ressources spécifiques. | Aucune |
Syntaxe LifecycleConfiguration
"LifecycleConfiguration": {
"Rule": List
}
Propriétés LifecycleConfiguration
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
Rule |
List |
Oui |
Non |
Règle de cycle de vie. |
Pour plus d'informations, consultez la section Propriétés Rule. |
Syntaxe Rule
"Rule": [
{
"Status": String,
"AbortMultipartUpload": Map,
"Expiration": Map,
"Prefix": String,
"ID": String,
"Filter": Map,
"Transition": List
}
]
Propriétés Rule
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
Prefix | String | Oui | Non | Préfixe auquel la règle s'applique. | Seuls les objets dont les noms correspondent au préfixe sont affectés par la règle. |
AbortMultipartUpload | Map | Non | Non | Paramètres d'expiration pour les téléchargements multipart incomplets. | Pour plus d'informations, consultez la section Propriétés AbortMultipartUpload. |
Expiration | Map | Non | Non | Paramètres d'expiration des objets. | Pour plus d'informations, consultez la section Propriétés Expiration. |
ID | String | Non | Non | Identifiant unique de la règle. | L'identifiant peut comporter jusqu'à 255 caractères. Si vous ne spécifiez pas d'identifiant ou si vous le laissez vide, OSS en génère un automatiquement. |
Status | String | Non | Oui | Active ou désactive la règle. | Valeurs possibles :
|
Filter | Map | Non | Non | Cette règle d'exclusion prend en charge une seule condition. | Pour plus d'informations, consultez la section Propriétés Filter. |
Transition | List | Non | Non | Liste des tâches de transition de classe de stockage. | Pour plus d'informations, consultez la section Propriétés Transition. |
Syntaxe Transition
"Transition": [
{
"CreatedBeforeDate": String,
"Days": Integer,
"IsAccessTime": Boolean,
"ReturnToStdWhenVisit": Boolean,
"AllowSmallFile": Boolean,
"StorageClass": String
}
]
Propriétés Transition
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
CreatedBeforeDate | String | Non | Non | Spécifiez une date. OSS applique la règle de cycle de vie aux objets dont l'heure de dernière modification est antérieure à cette date. | La date doit respecter le format ISO 8601 et correspondre à minuit (00:00:00) en temps UTC. |
Days | Integer | Non | Non | Spécifiez le nombre de jours après la dernière mise à jour de l'objet avant que la règle de cycle de vie ne prenne effet. | Valeurs possibles : entiers positifs, tels que 30, 90 et 180. |
IsAccessTime | Boolean | Non | Non | Indique si la règle de cycle de vie s'applique en fonction de la dernière heure d'accès à l'objet. |
|
ReturnToStdWhenVisit | Boolean | Non | Non | Indique s'il faut reconvertir les objets non standard vers la classe de stockage Standard lors de l'accès. | Cette option prend effet uniquement lorsque IsAccessTime est défini sur true. |
AllowSmallFile | Boolean | Non | Non | Indique si l'opération se base sur la dernière heure d'accès à l'objet. | Modifie la classe de stockage en IA, Archive ou Cold Archive pour les objets de moins de 64 Ko. |
StorageClass | String | Non | Non | Classe de stockage vers laquelle l'objet est converti. | Valeurs possibles :
|
Syntaxe Filter
"Filter":{
"Not": Map
}
Propriétés Filter
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
Not |
Map |
Non |
Non |
Règle d'exclusion. |
Pour plus d'informations, consultez la section Propriétés Not. |
Syntaxe Not
"Not":{
"Tag": List,
"Prefix": String
}
Propriétés Not
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
Tag | List | Non | Non | Étiquette pour la règle d'exclusion. | Cette règle d'exclusion s'applique à au plus une étiquette d'objet. |
Prefix | String | Non | Non | Préfixe pour la règle. | Les conditions de préfixe d'objet suivantes s'appliquent à cette règle d'exclusion :
Le préfixe Not doit être un sous-ensemble du préfixe Rule parent et ne peut pas lui être identique, sauf si une étiquette est également configurée. |
Syntaxe Expiration
"Expiration":{
"Days": Number,
"CreatedBeforeDate": String,
"ExpiredObjectDeleteMarker": Boolean
}
Propriétés Expiration
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
CreatedBeforeDate | String | Non | Non | Spécifiez une date. OSS applique la règle aux objets dont l'heure de dernière modification est antérieure à cette date. | La date doit respecter le format ISO 8601 et correspondre à minuit (00:00:00) en temps UTC. Exemple : |
Days | Number | Non | Non | Spécifiez le nombre de jours après la dernière modification de l'objet avant que la règle ne prenne effet. | OSS calcule le nombre de jours à partir de l'heure de dernière modification de l'objet. Une fois le nombre de jours spécifié écoulé, OSS supprime l'objet. Par exemple, si vous définissez le nombre de jours sur 30, OSS supprimera un objet dont la date de dernière modification est le 1er janvier 2016 le 31 janvier 2016. |
ExpiredObjectDeleteMarker | Boolean | Non | Non | Spécifie s'il faut supprimer automatiquement les marqueurs de suppression expirés. | Valeurs possibles :
|
Syntaxe AbortMultipartUpload
"AbortMultipartUpload": {
"CreatedBeforeDate": String,
"Days": Number
}
Propriétés AbortMultipartUpload
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
CreatedBeforeDate |
String |
Non |
Non |
Spécifiez la date avant laquelle la règle prend effet. |
La date doit respecter le format ISO 8601 et correspondre à minuit (00:00:00) en temps UTC. Exemple : |
|
Days |
Number |
Non |
Non |
Spécifiez le nombre de jours après la dernière modification de l'objet avant que la règle ne prenne effet. |
OSS calcule le nombre de jours à partir de l'heure de dernière modification de l'objet. Une fois le nombre de jours spécifié écoulé, OSS supprime l'objet. Par exemple, si vous définissez le nombre de jours sur 30, OSS supprimera un objet dont la date de dernière modification est le 1er janvier 2016 le 31 janvier 2016. |
Syntaxe LoggingConfiguration
"LoggingConfiguration": {
"TargetBucket": String,
"TargetPrefix": String
}
Propriétés LoggingConfiguration
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
TargetBucket |
String |
Non |
Non |
Compartiment où sont stockés les journaux d'accès. |
Aucune |
|
TargetPrefix |
String |
Non |
Non |
Préfixe pour les fichiers de journaux d'accès enregistrés. |
Aucune |
Syntaxe WebsiteConfigurationV2
"WebsiteConfiguration":{
"RoutingRules": List,
"IndexDocument": Map,
"ErrorDocument": Map
}
Propriétés WebsiteConfigurationV2
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
ErrorDocument |
Map |
Non |
Non |
Page d'erreur statique hébergée sur le compartiment. |
Aucune |
|
IndexDocument |
Map |
Non |
Non |
Page d'accueil statique hébergée sur le compartiment. |
Aucune |
|
RoutingRules |
List |
Non |
Non |
Liste des règles de routage. |
Longueur maximale : 20. |
Syntaxe IndexDocument
"IndexDocument":{
"Suffix": String,
"Type": String,
"SupportSubDir": String
}
Propriétés IndexDocument
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
Suffix | String | Oui | Non | Page d'index par défaut. | Après avoir configuré la page d'index par défaut, si vous accédez à un objet dont le nom se termine par une barre oblique (/), OSS renvoie cette page d'index par défaut. |
Type | String | Non | Non | Spécifiez le comportement lorsque vous essayez d'accéder à un objet qui n'existe pas et dont le nom ne se termine pas par une barre oblique (/) après avoir configuré la page d'index par défaut. | Cette règle prend effet uniquement lorsque SupportSubDir est défini sur true, et s'applique après RoutingRule mais avant ErrorFile. Supposons que la page d'index par défaut soit index.html. Lorsque vous accédez à bucket.oss-cn-hangzhou.aliyuncs.com/abc et que l'objet abc n'existe pas, le comportement pour différentes valeurs de Type est le suivant :
|
SupportSubDir | String | Non | Non | Spécifie s'il faut rediriger vers la page d'accueil par défaut d'un sous-répertoire lorsque vous accédez au sous-répertoire. | Valeurs possibles :
|
Syntaxe RoutingRules
"RoutingRules":[{
"Redirect": Map,
"Condition": Map,
"RuleNumber": Integer
}]
Propriétés RoutingRules
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
Redirect |
Map |
Oui |
Non |
Spécifiez l'action à effectuer lorsque la règle correspond. |
Pour plus d'informations, consultez la section Propriétés Redirect. |
|
Condition |
Map |
Oui |
Non |
Condition de correspondance. |
Cette règle prend effet uniquement lorsque toutes les conditions spécifiées sont remplies. Une correspondance est réussie uniquement lorsque toutes les conditions de ce conteneur sont satisfaites. Pour plus d'informations, consultez la section Propriétés Condition. |
|
RuleNumber |
Integer |
Oui |
Non |
Numéro de séquence de la règle de routage à faire correspondre et exécuter. OSS fait correspondre les règles dans l'ordre de ce numéro de séquence. |
Si une correspondance est réussie, OSS exécute cette règle et arrête l'exécution des règles suivantes. |
Syntaxe Condition
"Condition":{
"KeyPrefixEquals": String,
"HttpErrorCodeReturnedEquals": String,
"IncludeHeaders": List,
"KeySuffixEquals": String
}
Propriétés Condition
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
KeyPrefixEquals |
String |
Non |
Non |
Préfixe du nom de l'objet à faire correspondre. |
Aucune. |
|
HttpErrorCodeReturnedEquals |
String |
Non |
Non |
Code d'état HTTP qui doit être renvoyé lors de l'accès à l'objet spécifié pour que la règle corresponde. |
Ce champ doit être 404 lorsque la règle de redirection utilise la méthode de retour à l'origine par miroir. |
|
IncludeHeaders |
List |
Non |
Non |
La règle correspond uniquement lorsque la requête contient l'en-tête spécifié et que sa valeur correspond à la valeur spécifiée. |
Vous pouvez configurer jusqu'à 10 conditions de ce type. Pour plus d'informations, consultez la section Propriétés IncludeHeaders. |
|
KeySuffixEquals |
String |
Non |
Non |
Suffixe du nom de l'objet à faire correspondre. |
Aucune. |
Syntaxe IncludeHeaders
"IncludeHeaders": [
{
"Equals": String,
"Key": String
}
]
Propriétés IncludeHeaders
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
Equals |
String |
Non |
Non |
Valeur de l'en-tête. |
Aucune |
|
Key |
String |
Oui |
Non |
Nom de l'en-tête. |
Aucune |
Syntaxe RefererConfiguration
"RefererConfiguration":{
"AllowEmptyReferer": String,
"RefererList": List
}
Propriétés RefererConfiguration
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
AllowEmptyReferer | Boolean | Non | Non | Spécifie s'il faut autoriser les requêtes avec un en-tête Referer vide à accéder au compartiment. | Valeurs possibles :
|
RefererList | List | Non | Non | Liste blanche des en-têtes Referer. | Aucune |
Syntaxe Redirect
"Redirect":{
"MirrorFollowRedirect": Boolean,
"MirrorURL": String,
"PassQueryString": Boolean,
"MirrorPassQueryString": Boolean,
"ReplaceKeyWith": String,
"Protocol": String,
"HttpRedirectCode": String,
"ReplaceKeyPrefixWith": String,
"RedirectType": String,
"MirrorHeaders": Map,
"MirrorCheckMd5": Boolean,
"EnableReplacePrefix": Boolean,
"HostName": String
}
Propriétés Redirect
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
MirrorFollowRedirect | Boolean | Non | Non | Spécifie s'il faut continuer la redirection vers l'emplacement spécifié pour récupérer les données lorsque le résultat d'une requête de retour à l'origine par miroir renvoie un code d'état 3xx. | Ce paramètre prend effet uniquement lorsque RedirectType est défini sur Mirror. Par exemple, lorsque vous effectuez un retour à l'origine par miroir vers le serveur d'origine, ce dernier renvoie un code d'état 302 avec un en-tête Location.
|
MirrorURL | String | Non | Non | URL du serveur d'origine pour le retour à l'origine par miroir. | Ce paramètre prend effet uniquement lorsque RedirectType est défini sur Mirror. L'URL d'origine doit commencer par http:// ou https:// et se terminer par une barre oblique (/). OSS ajoute le nom de l'objet à cette URL pour former l'URL finale. Par exemple, si le nom de l'objet est myobject et que vous définissez ce paramètre sur http://example.com/, l'URL de retour à l'origine est http://example.com/myobject. Si vous définissez ce paramètre sur http://example.com/dir1/, l'URL de retour à l'origine est http://example.com/dir1/myobject. |
PassQueryString | Boolean | Non | Non | Spécifie s'il faut inclure les paramètres de requête lors de l'exécution d'une redirection ou d'un retour à l'origine par miroir. | Par exemple, si un utilisateur accède à OSS avec les paramètres de requête a=b&c=d et que PassQueryString est défini sur true, les paramètres de requête sont ajoutés à l'en-tête Location pour une redirection 302, comme Location: example.com?a=b&c=d. Si le type de règle est le retour à l'origine par miroir, les paramètres de requête sont également inclus dans la requête de retour à l'origine. Valeurs possibles : true, false (par défaut). |
MirrorPassQueryString | Boolean | Non | Non | Identique à PassQueryString, mais prend priorité sur PassQueryString. Ce paramètre prend effet uniquement lorsque RedirectType est défini sur Mirror. | Valeur par défaut : false. |
ReplaceKeyWith | String | Non | Non | Lorsque vous utilisez une règle de redirection, le nom de l'objet est remplacé par la valeur spécifiée par ReplaceKeyWith. Cela vous permet d'utiliser des variables. | La seule variable prise en charge est {key}, qui représente le nom de l'objet dans la requête. Par exemple, si vous souhaitez accéder à un objet nommé test et définir ReplaceKeyWith sur prefix/{key}, l'en-tête Location pointe vers http://example.com/prefix/test.suffix. Cela signifie que lorsqu'un client demande l'objet original (par exemple, test), le serveur redirige la requête vers un nouvel emplacement. Le chemin du nouvel emplacement est généré dynamiquement en fonction du modèle défini par ReplaceKeyWith. Dans cet exemple, le nouveau chemin ajoute « prefix/ » avant le nom de l'objet original (test), ce qui donne l'URL de redirection finale « http://example.com/prefix/test.suffix ». La partie « .suffix » est fixe, tandis que « ${key} » est remplacée avec succès par le nom de l'objet « test ». |
Protocol | String | Non | Non | Protocole utilisé pour la redirection. | Cette règle s'applique uniquement lorsque RedirectType est défini sur External ou AliCDN. Par exemple, si vous souhaitez accéder à un fichier nommé test et le rediriger vers example.com en utilisant HTTPS, l'en-tête Location dans la réponse HTTP doit être défini sur « https://example.com/test ». Valeurs possibles : http, https. |
HttpRedirectCode | String | Non | Non | Code d'état HTTP renvoyé lors de la redirection. | S'applique uniquement lorsque RedirectType est défini sur External ou AliCDN. Valeur par défaut : 302. Valeurs possibles : 301, 302, 307. |
ReplaceKeyPrefixWith | String | Non | Non | Valeur qui remplace le préfixe du nom de l'objet dans la redirection. Si le préfixe est vide, cette chaîne est insérée avant le nom de l'objet. | Remarque Vous ne pouvez utiliser que la propriété ReplaceKeyWith ou ReplaceKeyPrefixWith. Par exemple, si le nom de l'objet est ABC/test.TXT, KeyPrefixEquals est défini sur ABC/ et ReplaceKeyPrefixWith est défini sur def/, l'en-tête Location pointe vers http://example.com/def/test.txt. |
RedirectType | String | Oui | Non | Type de redirection. | Valeurs possibles :
|
MirrorHeaders | Map | Non | Non | En-têtes à transmettre en miroir au serveur d'origine. | Ce paramètre prend effet uniquement lorsque RedirectType est défini sur Mirror. Pour plus d'informations, consultez la section Propriétés MirrorHeaders. |
MirrorCheckMd5 | Boolean | Non | Non | Spécifie s'il faut vérifier le hachage MD5 des données récupérées depuis le serveur d'origine. | Ce paramètre prend effet uniquement lorsque RedirectType est défini sur Mirror. Lorsque MirrorCheckMd5 est défini sur true, si le serveur d'origine renvoie un en-tête Content-MD5 dans la réponse, OSS vérifie si le hachage MD5 des données récupérées correspond à l'en-tête. S'ils ne correspondent pas, OSS n'enregistre pas les données dans OSS. Valeur par défaut : false. |
EnableReplacePrefix | Boolean | Non | Non | Si la valeur est true, le préfixe du nom de l'objet est remplacé par la valeur spécifiée par ReplaceKeyPrefixWith. Si ce champ n'est pas spécifié ou est vide, le préfixe du nom de l'objet est tronqué. | Remarque : ce champ ne peut pas être défini sur true lorsque ReplaceKeyWith n'est pas vide. Valeur par défaut : false. |
HostName | String | Non | Non | Nom de domaine pour la redirection. | Le nom de domaine doit respecter les conventions relatives aux noms de domaine. Par exemple, si le nom du fichier est test, le protocole est défini sur https et le nom d'hôte est défini sur example.com, l'en-tête Location est https://example.com/test. |
Syntaxe MirrorHeaders
"MirrorHeaders":{
"Remove": List,
"PassAll": Boolean,
"Sets": List,
"Pass": List
}
Propriétés MirrorHeaders
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
Remove | List | Non | Non | Désactive la transmission des en-têtes spécifiés au serveur d'origine. | S'applique uniquement lorsque RedirectType est défini sur Mirror. Chaque en-tête peut avoir une longueur maximale de 1 024 octets et ne peut contenir que les caractères 0-9, a-z, A-Z et le trait d'union (-). Vous pouvez spécifier jusqu'à 10 en-têtes. |
PassAll | Boolean | Non | Non | Spécifie s'il faut transmettre tous les en-têtes, à l'exception de ceux énumérés ci-dessous, au serveur d'origine. | S'applique uniquement lorsque RedirectType est défini sur Mirror. Les en-têtes à exclure comprennent les suivants : - content-length, authorization2, authorization, range, date et autres en-têtes généraux - en-têtes commençant par oss-, x-oss- ou x-drs- Valeur par défaut : false Cela signifie que ces en-têtes spécifiques sont transmis à la source miroir par défaut. Pour modifier ce comportement, définissez cette valeur sur true pour empêcher la transmission de ces en-têtes. |
Sets | List | Non | Non | Définit un en-tête pour le serveur d'origine. Cet en-tête est défini lorsque la requête est envoyée au serveur d'origine, que l'en-tête spécifié soit inclus ou non dans la requête. | Cette fonctionnalité s'applique uniquement lorsque RedirectType est défini sur Mirror. Vous pouvez configurer jusqu'à 10 ensembles d'en-têtes. Pour plus d'informations, consultez la section Propriétés Sets. |
Pass | List | Non | Non | Transmet les en-têtes spécifiés au serveur d'origine. | S'applique uniquement lorsque RedirectType est défini sur Mirror. Chaque en-tête peut avoir une longueur maximale de 1 024 octets et ne peut contenir que les caractères 0-9, a-z, A-Z et le trait d'union (-). Vous pouvez spécifier jusqu'à 10 en-têtes. |
Syntaxe Sets
"Sets": [
{
"Value": String,
"Key": String
}
]
Propriétés Sets
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
Value |
String |
Oui |
Non |
Définit la valeur de l'en-tête sur un maximum de 1 024 octets, en excluant \r\n. |
Ce paramètre s'applique uniquement lorsque RedirectType est défini sur Mirror. |
|
Key |
String |
Oui |
Non |
Définit la clé de l'en-tête sur un maximum de 1 024 octets. Le jeu de caractères est identique à celui de Pass. |
Ce paramètre s'applique uniquement lorsque RedirectType est défini sur Mirror. |
Syntaxe ErrorDocument
"ErrorDocument":{
"Key": String,
"HttpStatus": String
}
Propriétés ErrorDocument
|
Nom de la propriété |
Type |
Obligatoire |
Mise à jour autorisée |
Description |
Contrainte |
|
Key |
String |
Oui |
Non |
Page d'erreur par défaut. |
Si vous spécifiez une page d'erreur, OSS renvoie cette page d'erreur lorsque l'objet demandé n'existe pas. |
|
HttpStatus |
String |
Non |
Non |
Code d'état HTTP pour la page d'erreur. |
Valeurs possibles : 200, 404 (par défaut). |
Syntaxe ServerSideEncryptionConfiguration
"ServerSideEncryptionConfiguration":{
"KMSMasterKeyID": String,
"SSEAlgorithm": String
}
Propriétés ServerSideEncryptionConfiguration
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
SSEAlgorithm | String | Oui | Non | Méthode de chiffrement côté serveur par défaut. | Valeurs possibles :
|
KMSMasterKeyID | String | Non | Non | ID de la clé. | Requis uniquement lorsque SSEAlgorithm est défini sur KMS et que vous utilisez une clé spécifique pour le chiffrement. |
Syntaxe VersioningConfiguration
"VersioningConfiguration":{
"Status": String
}
Propriétés VersioningConfiguration
Nom de la propriété | Type | Obligatoire | Mise à jour autorisée | Description | Contrainte |
Status | String | Oui | Non | État du versioning. | Valeurs possibles :
|
Valeurs de retour
Fn::GetAtt
Name : nom du compartiment. Le nom doit être unique à l'échelle mondiale.
DomainName : nom de domaine utilisé pour accéder au compartiment via le réseau public.
InternalDomainName : nom de domaine utilisé pour accéder au compartiment via le réseau interne.
Arn : Alibaba Cloud Resource Name (ARN).
Exemples
Scénario 1 : Créer un compartiment OSS.
ROSTemplateFormatVersion: '2015-09-01'
Description: Creates a simple oss bucket
Parameters:
BucketName:
AssociationProperty: AutoCompleteInput
AssociationPropertyMetadata:
Length: 5
Prefix: simple-oss-bucket
CharacterClasses:
- Class: lowercase
min: 1
Type: String
Label:
en: Bucket Name
Outputs:
BucketDomainName:
Value:
Fn::GetAtt:
- MyBucket
- DomainName
Resources:
MyBucket:
Type: ALIYUN::OSS::Bucket
Properties:
AccessControl: private
BucketName:
Ref: BucketName
Metadata: {}
{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": "Creates a simple oss bucket",
"Parameters": {
"BucketName": {
"Type": "String",
"Label": {
"en": "Bucket Name"
},
"AssociationProperty": "AutoCompleteInput",
"AssociationPropertyMetadata": {
"Length": 5 ,
"Prefix": "simple-oss-bucket",
"CharacterClasses": [
{
"Class": "lowercase",
"min": 1
}
]
}
}
},
"Metadata": {
},
"Resources": {
"MyBucket": {
"Type": "ALIYUN::OSS::Bucket",
"Properties": {
"AccessControl": "private",
"BucketName": {
"Ref": "BucketName"
}
}
}
},
"Outputs": {
"BucketDomainName": {
"Value": {
"Fn::GetAtt": [
"MyBucket",
"DomainName"
]
}
}
}
}Scénario 2 : Créer un compartiment OSS, activer l'accélération CDN, configurer la résolution de nom de domaine et optimiser les stratégies de distribution de fichiers pour prendre en charge l'accès global et des règles de mise en cache personnalisées.
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: Create an OSS bucket and enable CDN acceleration, configure domain name resolution, and optimize file distribution strategies to support global access and custom caching rules.
en: Create an OSS bucket and enable CDN acceleration, configure domain name resolution, and optimize file distribution strategies to support global access and custom caching rules.
Parameters:
Scope:
Type: String
Label:
zh-cn: Acceleration area
en: Acceleration area
Description:
zh-cn: Select the acceleration area. If the acceleration region is Chinese mainland only or Global, the service domain name must have an ICP filing.
en: Select the acceleration area. When the acceleration region is only in mainland China and the world, the service domain name must be filed.
Default: domestic
AllowedValues:
- domestic
- overseas
- global
DomainName:
Type: String
Label:
zh-cn: Accelerated domain name
en: Accelerated domain name
Description:
zh-cn: An accelerated domain name is a domain name that is added to CDN to accelerate access to the origin server. Enter a domain name under your account.
en: Accelerated domain name refers to the domain name of the access CDN used to accelerate the source site. Please fill in the domain name under your account.
BucketName:
Type: String
Label:
en: Bucket Name
zh-cn: Bucket Name
Description:
en: The name must be 3 to 63 bytes in length, The name must start and end with a lowercase letter or digit. The name can contain only lowercase letters, digits, and hyphens (-).;<b>note: <font color='blue'>A bucket name must be globally unique within OSS. Bucket names cannot be changed after the bucket is created.</font>
zh-cn: The name must be 3 to 63 characters in length. It must start and end with a lowercase letter or digit. It can contain only lowercase letters, digits, and hyphens (-).<b>Note:<font color='blue'>The bucket name must be globally unique. You cannot create a bucket with an existing name.</font>
AssociationProperty: AutoCompleteInput
AssociationPropertyMetadata:
Length: 6
Prefix: image-example-
CharacterClasses:
- Class: lowercase
min: 1
Resources:
OssBucket:
Type: ALIYUN::OSS::Bucket
DependsOn: AutoEnableOSS
Properties:
BucketName:
Ref: BucketName
DeletionForce: true
AutoEnableCDN:
Type: ALIYUN::ROS::AutoEnableService
Properties:
ServiceName: CDN
AutoEnableOSS:
Type: ALIYUN::ROS::AutoEnableService
Properties:
ServiceName: OSS
Domain:
Type: ALIYUN::CDN::Domain
Properties:
Sources:
Fn::Sub:
- '[{"content":"${content}", "type":"oss", "priority":"20", "port":80, "weight":"10"}]'
- content:
Fn::GetAtt:
- OssBucket
- DomainName
CdnType: web
Scope:
Ref: Scope
DomainName:
Ref: DomainName
DependsOn: AutoEnableCDN
DomainRecord:
Type: ALIYUN::DNS::DomainRecord
Properties:
Type: CNAME
RR:
Fn::Select:
- 0
- Fn::Split:
- .
- Ref: DomainName
Value:
Fn::GetAtt:
- Domain
- Cname
DomainName:
Fn::Join:
- .
- Fn::Select:
- '1:'
- Fn::Split:
- .
- Ref: DomainName
DependsOn: Domain
DomainConfig:
Type: ALIYUN::CDN::DomainConfig
Properties:
FunctionList:
- FunctionArgs:
- ArgName: file_type
ArgValue: jpg,png,jpeg
- ArgName: weight
ArgValue: '99'
- ArgName: ttl
ArgValue: '7776000'
FunctionName: filetype_based_ttl_set
- FunctionArgs:
- ArgName: private_oss_auth
ArgValue: 'on'
- ArgName: perm_private_oss_tbl
ArgValue: ''
FunctionName: l2_oss_key
- FunctionArgs:
- ArgName: filetype
ArgValue: jpeg
- ArgName: webp
ArgValue: 'off'
- ArgName: orient
ArgValue: 'off'
- ArgName: slim
ArgValue: '90'
- ArgName: enable
ArgValue: 'on'
FunctionName: image_transform
DomainNames:
Ref: Domain
DependsOn: DomainRecord
Outputs:
Cname:
Description: CNAME
Value:
Fn::GetAtt:
- Domain
- Cname
DomainName:
Description: DomainName
Value:
Ref: Domain
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- Scope
- DomainName
- BucketName
{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": {
"zh-cn": "Create an OSS bucket and enable CDN acceleration, configure domain name resolution, and optimize file distribution strategies to support global access and custom caching rules.",
"en": "Create an OSS bucket and enable CDN acceleration, configure domain name resolution, and optimize file distribution strategies to support global access and custom caching rules."
},
"Parameters": {
"Scope": {
"Type": "String",
"Label": {
"zh-cn": "Acceleration area",
"en": "Acceleration area"
},
"Description": {
"zh-cn": "Select the acceleration area. If the acceleration region is Chinese mainland only or Global, the service domain name must have an ICP filing.",
"en": "Select the acceleration area. When the acceleration region is only in mainland China and the world, the service domain name must be filed."
},
"Default": "domestic",
"AllowedValues": [
"domestic",
"overseas",
"global"
]
},
"DomainName": {
"Type": "String",
"Label": {
"zh-cn": "Accelerated domain name",
"en": "Accelerated domain name"
},
"Description": {
"zh-cn": "An accelerated domain name is a domain name that is added to CDN to accelerate access to the origin server. Enter a domain name under your account.",
"en": "Accelerated domain name refers to the domain name of the access CDN used to accelerate the source site. Please fill in the domain name under your account."
}
},
"BucketName": {
"Type": "String",
"Label": {
"en": "Bucket Name",
"zh-cn": "Bucket Name"
},
"Description": {
"en": "The name must be 3 to 63 bytes in length. The name must start and end with a lowercase letter or digit. The name can contain only lowercase letters, digits, and hyphens (-).;<b>note: <font color='blue'>A bucket name must be globally unique within OSS. Bucket names cannot be changed after the bucket is created.</font>",
"zh-cn": "The name must be 3 to 63 characters in length. It must start and end with a lowercase letter or digit. It can contain only lowercase letters, digits, and hyphens (-).<b>Note:<font color='blue'>The bucket name must be globally unique. You cannot create a bucket with an existing name.</font>"
},
"AssociationProperty": "AutoCompleteInput",
"AssociationPropertyMetadata": {
"Length": 6,
"Prefix": "image-example-",
"CharacterClasses": [
{
"Class": "lowercase",
"min": 1
}
]
}
}
},
"Resources": {
"OssBucket": {
"Type": "ALIYUN::OSS::Bucket",
"DependsOn": "AutoEnableOSS",
"Properties": {
"BucketName": {
"Ref": "BucketName"
},
"DeletionForce": true
}
},
"AutoEnableCDN": {
"Type": "ALIYUN::ROS::AutoEnableService",
"Properties": {
"ServiceName": "CDN"
}
},
"AutoEnableOSS": {
"Type": "ALIYUN::ROS::AutoEnableService",
"Properties": {
"ServiceName": "OSS"
}
},
"Domain": {
"Type": "ALIYUN::CDN::Domain",
"Properties": {
"Sources": {
"Fn::Sub": [
"[{\"content\":\"${content}\", \"type\":\"oss\", \"priority\":\"20\", \"port\":80, \"weight\":\"10\"}]",
{
"content": {
"Fn::GetAtt": [
"OssBucket",
"DomainName"
]
}
}
]
},
"CdnType": "web",
"Scope": {
"Ref": "Scope"
},
"DomainName": {
"Ref": "DomainName"
}
},
"DependsOn": "AutoEnableCDN"
},
"DomainRecord": {
"Type": "ALIYUN::DNS::DomainRecord",
"Properties": {
"Type": "CNAME",
"RR": {
"Fn::Select": [
0,
{
"Fn::Split": [
".",
{
"Ref": "DomainName"
}
]
}
]
},
"Value": {
"Fn::GetAtt": [
"Domain",
"Cname"
]
},
"DomainName": {
"Fn::Join": [
".",
{
"Fn::Select": [
"1:",
{
"Fn::Split": [
".",
{
"Ref": "DomainName"
}
]
}
]
}
]
}
},
"DependsOn": "Domain"
},
"DomainConfig": {
"Type": "ALIYUN::CDN::DomainConfig",
"Properties": {
"FunctionList": [
{
"FunctionArgs": [
{
"ArgName": "file_type",
"ArgValue": "jpg,png,jpeg"
},
{
"ArgName": "weight",
"ArgValue": "99"
},
{
"ArgName": "ttl",
"ArgValue": "7776000"
}
],
"FunctionName": "filetype_based_ttl_set"
},
{
"FunctionArgs": [
{
"ArgName": "private_oss_auth",
"ArgValue": "on"
},
{
"ArgName": "perm_private_oss_tbl",
"ArgValue": ""
}
],
"FunctionName": "l2_oss_key"
},
{
"FunctionArgs": [
{
"ArgName": "filetype",
"ArgValue": "jpeg"
},
{
"ArgName": "webp",
"ArgValue": "off"
},
{
"ArgName": "orient",
"ArgValue": "off"
},
{
"ArgName": "slim",
"ArgValue": "90"
},
{
"ArgName": "enable",
"ArgValue": "on"
}
],
"FunctionName": "image_transform"
}
],
"DomainNames": {
"Ref": "Domain"
}
},
"DependsOn": "DomainRecord"
}
},
"Outputs": {
"Cname": {
"Description": "CNAME",
"Value": {
"Fn::GetAtt": [
"Domain",
"Cname"
]
}
},
"DomainName": {
"Description": "DomainName",
"Value": {
"Ref": "Domain"
}
}
},
"Metadata": {
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
{
"Parameters": [
"Scope",
"DomainName",
"BucketName"
]
}
]
}
}
}Scénario 3 : Créer une instance ECS et un compartiment OSS, installer une application et mettre en œuvre des services de conversion texte-image et d'amélioration de portrait.
ROSTemplateFormatVersion: '2015-09-01'
Mappings: {}
Parameters:
DashScopeApiKey:
NoEcho: true
Label:
zh-cn: DashScope API-KEY
en: DashScope API-KEY
Type: String
Description:
zh-cn: Activate DashScope and obtain an API key. For more information, see <a href="https://www.alibabacloud.com/help/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key" target="_blank">Activate DashScope and create an API key</a>.
en: 'Activate DashScope and obtain the API-KEY. Please refer to: <a href="https://www.alibabacloud.com/help/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key" target="_blank">Activate DashScope and create API-KEY</a>.'
AssociationProperty: ALIYUN::DashScope::ApiKey
CommonName:
Default: wanxiang
Type: String
InstancePassword:
Description:
zh-cn: The logon password for the server. It must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
Default: Null
Type: String
Label:
zh-cn: Instance Password
en: Instance Password
NoEcho: true
AssociationProperty: ALIYUN::ECS::Instance::Password
ConstraintDescription:
zh-cn: The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
ZoneId:
AssociationPropertyMetadata:
AutoSelectFirst: true
Default: Null
Required: true
Label:
zh-cn: Availability Zone
en: Availability Zone
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Type: String
BucketName:
AssociationPropertyMetadata:
Length: 5
Prefix: drawing-with-tongyi-wanxiang-
CharacterClasses:
- Class: lowercase
min: 1
Description:
zh-cn: The name must be 3 to 63 characters in length. It cannot start or end with a hyphen (-). It can contain lowercase letters, digits, and hyphens (-).Note: <font color='blue'><b>The bucket name must be globally unique. You cannot create a bucket with an existing name.</font>
en: '3 to 63 characters, not beginning and ending with a hyphen (-), can contain lowercase letters, Numbers and hyphens (-);Note: <font color=''blue''><b>need whole network uniqueness, already existing can not be created.</font>'
MinLength: 3
Label:
zh-cn: Bucket Name
en: Bucket Name
AllowedPattern: ^[a-z0-9]+[a-z0-9\-]*[a-z0-9]+$
Type: String
MaxLength: 63
AssociationProperty: AutoCompleteInput
ConstraintDescription:
zh-cn: The name must be 3 to 63 characters in length. It cannot start or end with a hyphen (-). It can contain lowercase letters, digits, and hyphens (-).
en: 3 to 63 characters, not beginning and ending with a hyphen (-), can contain lowercase letters, Numbers and hyphens (-)
InstanceType:
AssociationPropertyMetadata:
SystemDiskCategory: cloud_essd
InstanceChargeType: PostPaid
ZoneId: ${ZoneId}
Default: Null
Required: true
Label:
zh-cn: Instance Type
en: Instance Type
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
Type: String
Outputs:
EcsLoginAddress:
Description:
zh-cn: The logon address for the ECS instance.
en: Ecs login address.
Value:
Fn::Sub: https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs®ionId=${ALIYUN::Region}&instanceId=${EcsInstance}
ExperienceAddress:
Description:
zh-cn: The experience address.
en: Experience address.
Value:
Fn::Sub:
- http://${PublicIp}/wanx-demo
- PublicIp:
Fn::Select:
- 0
- Fn::GetAtt:
- EcsInstance
- PublicIps
Description:
zh-cn: Create a Virtual Private Cloud (VPC), an Elastic Compute Service (ECS) instance, and an Object Storage Service (OSS) bucket. Configure security groups and Resource Access Management (RAM) permissions. Install Java and an application to implement text-to-image and portrait enhancement services.
en: Create a Virtual Private Cloud (VPC), Elastic Compute Service (ECS) instances, Object Storage Service (OSS) buckets, configure Security Groups and Resource Access Management (RAM) permissions, install Java and applications, and implement text drawing and portrait beautification services.
Conditions: {}
Resources:
CustomPolicy:
Type: ALIYUN::RAM::ManagedPolicy
Properties:
PolicyName:
Fn::Sub: create_by_solution-${ALIYUN::StackId}
PolicyDocument:
Version: '1'
Statement:
- Action:
- oss:GetObject
- oss:PutObject
Resource:
- Fn::Sub: acs:oss:oss-${ALIYUN::Region}:${ALIYUN::TenantId}:${BucketName}/*
Effect: Allow
InstallApp:
Type: ALIYUN::ECS::RunCommand
Properties:
CommandContent:
Fn::Sub: |-
#!/bin/bash
cat << EOF >> ~/.bash_profile
export DASHSCOPE_API_KEY=${DashScopeApiKey}
export OSS_ACCESS_KEY_ID=${AccessKey.AccessKeyId}
export OSS_ACCESS_KEY_SECRET=${AccessKey.AccessKeySecret}
export WANX_DEMO_OSS_BUCKET=${BucketName}
export WANX_DEMO_OSS_ENDPOINT=https://oss-${ALIYUN::Region}.aliyuncs.com
EOF
source ~/.bash_profile
wget https://help-static-aliyun-doc.aliyuncs.com/demos/wanx-demo-0.0.1-SNAPSHOT.jar
nohup java -jar wanx-demo-0.0.1-SNAPSHOT.jar > wanx-demo.log 2>&1 &
Type: RunShellScript
Sync: true
InstanceIds:
- Ref: EcsInstance
Timeout: 3600
DependsOn:
- ModuleInstallJava.Install
AccessKey:
Type: ALIYUN::RAM::AccessKey
Properties:
UserName:
Ref: User
Bucket:
Type: ALIYUN::OSS::Bucket
Properties:
BucketName:
Ref: BucketName
DeletionForce: true
SecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupIngress:
- PortRange: 80/80
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
VpcId:
Ref: Vpc
SecurityGroupName:
Fn::Sub: ${CommonName}-sg
ModuleInstallJava.Install:
Type: ALIYUN::OOS::Execution
Properties:
SafetyCheck: Skip
Parameters:
action: install
packageName: ACS-Extension-java-1853370294850618
regionId:
Ref: ALIYUN::Region
targets:
ResourceIds:
- Ref: EcsInstance
RegionId:
Ref: ALIYUN::Region
Type: ResourceIds
parameters: Null
TemplateName: ACS-ECS-BulkyConfigureOOSPackageWithTemporaryURL
Metadata:
ALIYUN::ROS::Module:
LogicalIdHierarchy: ModuleInstallJava
TypeHierarchy: MODULE::ACS::OOS::Extension
User:
Type: ALIYUN::RAM::User
Properties:
UserName:
Fn::Sub: create_by_solution-${ALIYUN::StackId}
PolicyAttachments:
Custom:
- Ref: CustomPolicy
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
VpcName:
Fn::Sub: ${CommonName}-vpc
CidrBlock: 192.168.0.0/16
VSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName:
Fn::Sub: ${CommonName}-vsw
VpcId:
Ref: Vpc
CidrBlock: 192.168.0.0/24
ZoneId:
Ref: ZoneId
EcsInstance:
Type: ALIYUN::ECS::InstanceGroup
Properties:
SystemDiskCategory: cloud_essd
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: SecurityGroup
ImageId: aliyun_3_9_x64_20G_alibase_
InternetMaxBandwidthOut: 5
VSwitchId:
Ref: VSwitch
Password:
Ref: InstancePassword
InstanceName:
Fn::Sub: ${CommonName}-ecs
InstanceType:
Ref: InstanceType
ZoneId:
Ref: ZoneId
MaxAmount: 1
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- DashScopeApiKey
- BucketName
- ZoneId
- InstanceType
- InstancePassword
Hidden:
- CommonName
{
"ROSTemplateFormatVersion": "2015-09-01",
"Mappings": {},
"Parameters": {
"DashScopeApiKey": {
"NoEcho": true,
"Label": {
"zh-cn": "DashScope API-KEY",
"en": "DashScope API-KEY"
},
"Type": "String",
"Description": {
"zh-cn": "Activate DashScope and obtain an API key. For more information, see <a href=\"https://www.alibabacloud.com/help/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key\" target=\"_blank\">Activate DashScope and create an API key</a>.",
"en": "Activate DashScope and obtain the API-KEY. Please refer to: <a href=\"https://www.alibabacloud.com/help/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key\" target=\"_blank\">Activate DashScope and create API-KEY</a>."
},
"AssociationProperty": "ALIYUN::DashScope::ApiKey"
},
"CommonName": {
"Default": "wanxiang",
"Type": "String"
},
"InstancePassword": {
"Description": {
"zh-cn": "The logon password for the server. It must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/",
"en": "Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)"
},
"Default": null,
"Type": "String",
"Label": {
"zh-cn": "Instance Password",
"en": "Instance Password"
},
"NoEcho": true,
"AssociationProperty": "ALIYUN::ECS::Instance::Password",
"ConstraintDescription": {
"zh-cn": "The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/",
"en": "Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)"
}
},
"ZoneId": {
"AssociationPropertyMetadata": {
"AutoSelectFirst": true
},
"Default": null,
"Required": true,
"Label": {
"zh-cn": "Availability Zone",
"en": "Availability Zone"
},
"AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
"Type": "String"
},
"BucketName": {
"AssociationPropertyMetadata": {
"Length": 5,
"Prefix": "drawing-with-tongyi-wanxiang-",
"CharacterClasses": [
{
"Class": "lowercase",
"min": 1
}
]
},
"Description": {
"zh-cn": "The name must be 3 to 63 characters in length. It cannot start or end with a hyphen (-). It can contain lowercase letters, digits, and hyphens (-).Note: <font color='blue'><b>The bucket name must be globally unique. You cannot create a bucket with an existing name.</font>",
"en": "3 to 63 characters, not beginning and ending with a hyphen (-), can contain lowercase letters, Numbers and hyphens (-);Note: <font color='blue'><b>need whole network uniqueness, already existing can not be created.</font>"
},
"MinLength": 3,
"Label": {
"zh-cn": "Bucket Name",
"en": "Bucket Name"
},
"AllowedPattern": "^[a-z0-9]+[a-z0-9\\-]*[a-z0-9]+$",
"Type": "String",
"MaxLength": 63,
"AssociationProperty": "AutoCompleteInput",
"ConstraintDescription": {
"zh-cn": "The name must be 3 to 63 characters in length. It cannot start or end with a hyphen (-). It can contain lowercase letters, digits, and hyphens (-).",
"en": "3 to 63 characters, not beginning and ending with a hyphen (-), can contain lowercase letters, Numbers and hyphens (-)"
}
},
"InstanceType": {
"AssociationPropertyMetadata": {
"SystemDiskCategory": "cloud_essd",
"InstanceChargeType": "PostPaid",
"ZoneId": "${ZoneId}"
},
"Default": null,
"Required": true,
"Label": {
"zh-cn": "Instance Type",
"en": "Instance Type"
},
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"Type": "String"
}
},
"Outputs": {
"EcsLoginAddress": {
"Description": {
"zh-cn": "The logon address for the ECS instance.",
"en": "Ecs login address."
},
"Value": {
"Fn::Sub": "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs®ionId=${ALIYUN::Region}&instanceId=${EcsInstance}"
}
},
"ExperienceAddress": {
"Description": {
"zh-cn": "The experience address.",
"en": "Experience address."
},
"Value": {
"Fn::Sub": [
"http://${PublicIp}/wanx-demo",
{
"PublicIp": {
"Fn::Select": [
0,
{
"Fn::GetAtt": [
"EcsInstance",
"PublicIps"
]
}
]
}
}
]
}
}
},
"Description": {
"zh-cn": "Create a Virtual Private Cloud (VPC), an Elastic Compute Service (ECS) instance, and an Object Storage Service (OSS) bucket. Configure security groups and Resource Access Management (RAM) permissions. Install Java and an application to implement text-to-image and portrait enhancement services.",
"en": "Create a Virtual Private Cloud (VPC), Elastic Compute Service (ECS) instances, Object Storage Service (OSS) buckets, configure Security Groups and Resource Access Management (RAM) permissions, install Java and applications, and implement text drawing and portrait beautification services."
},
"Conditions": {},
"Resources": {
"CustomPolicy": {
"Type": "ALIYUN::RAM::ManagedPolicy",
"Properties": {
"PolicyName": {
"Fn::Sub": "create_by_solution-${ALIYUN::StackId}"
},
"PolicyDocument": {
"Version": "1",
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:PutObject"
],
"Resource": [
{
"Fn::Sub": "acs:oss:oss-${ALIYUN::Region}:${ALIYUN::TenantId}:${BucketName}/*"
}
],
"Effect": "Allow"
}
]
}
}
},
"InstallApp": {
"Type": "ALIYUN::ECS::RunCommand",
"Properties": {
"CommandContent": {
"Fn::Sub": "#!/bin/bash\n\ncat << EOF >> ~/.bash_profile\nexport DASHSCOPE_API_KEY=${DashScopeApiKey}\nexport OSS_ACCESS_KEY_ID=${AccessKey.AccessKeyId}\nexport OSS_ACCESS_KEY_SECRET=${AccessKey.AccessKeySecret}\nexport WANX_DEMO_OSS_BUCKET=${BucketName}\nexport WANX_DEMO_OSS_ENDPOINT=https://oss-${ALIYUN::Region}.aliyuncs.com\nEOF\n\nsource ~/.bash_profile \nwget https://help-static-aliyun-doc.aliyuncs.com/demos/wanx-demo-0.0.1-SNAPSHOT.jar\nnohup java -jar wanx-demo-0.0.1-SNAPSHOT.jar > wanx-demo.log 2>&1 &"
},
"Type": "RunShellScript",
"Sync": true,
"InstanceIds": [
{
"Ref": "EcsInstance"
}
],
"Timeout": 3600
},
"DependsOn": [
"ModuleInstallJava.Install"
]
},
"AccessKey": {
"Type": "ALIYUN::RAM::AccessKey",
"Properties": {
"UserName": {
"Ref": "User"
}
}
},
"Bucket": {
"Type": "ALIYUN::OSS::Bucket",
"Properties": {
"BucketName": {
"Ref": "BucketName"
},
"DeletionForce": true
}
},
"SecurityGroup": {
"Type": "ALIYUN::ECS::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"PortRange": "80/80",
"SourceCidrIp": "0.0.0.0/0",
"IpProtocol": "tcp"
}
],
"VpcId": {
"Ref": "Vpc"
},
"SecurityGroupName": {
"Fn::Sub": "${CommonName}-sg"
}
}
},
"ModuleInstallJava.Install": {
"Type": "ALIYUN::OOS::Execution",
"Properties": {
"SafetyCheck": "Skip",
"Parameters": {
"action": "install",
"packageName": "ACS-Extension-java-1853370294850618",
"regionId": {
"Ref": "ALIYUN::Region"
},
"targets": {
"ResourceIds": [
{
"Ref": "EcsInstance"
}
],
"RegionId": {
"Ref": "ALIYUN::Region"
},
"Type": "ResourceIds"
},
"parameters": null
},
"TemplateName": "ACS-ECS-BulkyConfigureOOSPackageWithTemporaryURL"
},
"Metadata": {
"ALIYUN::ROS::Module": {
"LogicalIdHierarchy": "ModuleInstallJava",
"TypeHierarchy": "MODULE::ACS::OOS::Extension"
}
}
},
"User": {
"Type": "ALIYUN::RAM::User",
"Properties": {
"UserName": {
"Fn::Sub": "create_by_solution-${ALIYUN::StackId}"
},
"PolicyAttachments": {
"Custom": [
{
"Ref": "CustomPolicy"
}
]
}
}
},
"Vpc": {
"Type": "ALIYUN::ECS::VPC",
"Properties": {
"VpcName": {
"Fn::Sub": "${CommonName}-vpc"
},
"CidrBlock": "192.168.0.0/16"
}
},
"VSwitch": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"VSwitchName": {
"Fn::Sub": "${CommonName}-vsw"
},
"VpcId": {
"Ref": "Vpc"
},
"CidrBlock": "192.168.0.0/24",
"ZoneId": {
"Ref": "ZoneId"
}
}
},
"EcsInstance": {
"Type": "ALIYUN::ECS::InstanceGroup",
"Properties": {
"SystemDiskCategory": "cloud_essd",
"VpcId": {
"Ref": "Vpc"
},
"SecurityGroupId": {
"Ref": "SecurityGroup"
},
"ImageId": "aliyun_3_9_x64_20G_alibase_",
"InternetMaxBandwidthOut": 5,
"VSwitchId": {
"Ref": "VSwitch"
},
"Password": {
"Ref": "InstancePassword"
},
"InstanceName": {
"Fn::Sub": "${CommonName}-ecs"
},
"InstanceType": {
"Ref": "InstanceType"
},
"ZoneId": {
"Ref": "ZoneId"
},
"MaxAmount": 1
}
}
},
"Metadata": {
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
{
"Parameters": [
"DashScopeApiKey",
"BucketName",
"ZoneId",
"InstanceType",
"InstancePassword"
]
}
],
"Hidden": [
"CommonName"
]
}
}
}