Imaginez que vous ayez une ressource aws telle que
Resources:
IdentityPool:
Type: "AWS::Cognito::IdentityPool"
Properties:
IdentityPoolName: ${self:custom.appName}_${self:provider.stage}_identity
CognitoIdentityProviders:
- ClientId:
Ref: UserPoolClient
La référence de "AWS :: Cognito :: IdentityPool" renvoie l'identifiant de cette ressource. Maintenant, disons que je veux référencer cet identifiant dans une chaîne multiligne. J'ai essayé
Outputs:
AmplifyConfig:
Description: key/values to be passed to Amplify.configure(config);
Value: |
{
'aws_cognito_identity_pool_id': ${Ref: IdentityPool}, ##<------ Error
'aws_sign_in_enabled': 'enable',
'aws_user_pools_mfa_type': 'OFF',
}
J'ai aussi essayé d'utiliser Fn: Sub mais sans chance.
AmplifyConfig:
Description: key/values to be passed to Amplify.configure(config);
Value:
Fn::Sub
- |
{
'aws_cognito_identity_pool_id': '${Var1Name}',
'aws_sign_in_enabled': 'enable',
}
- Var1Name:
Ref: IdentityPool
Une façon de faire ça?
J'ai découvert comment faire cela en utilisant Join
AmplifyConfig:
Description: key/values to be passed to Amplify.configure(config);
Value:
Fn::Join:
- ''
- - "{"
- "\n 'aws_cognito_identity_pool_id':"
- Ref : IdentityPool
- "\n 'aws_user_pools_id':"
- Ref : UserPool
- "\n 'aws_user_pools_web_client_id':"
- Ref : UserPoolClient
- ",\n 'aws_cognito_region': '${self:provider.region}'"
- ",\n 'aws_sign_in_enabled': 'enable'"
- ",\n 'aws_user_pools': 'enable'"
- ",\n 'aws_user_pools_mfa_type': 'OFF'"
- "\n}"
Cela fonctionne mais c'est un peu moche. Je vais laisser cette réponse inacceptable pendant un moment pour voir si quelqu'un peut montrer comment faire cela avec Fn :: Sub.
L'utilisation d'un symbole de canal |
dans YAML transforme toutes les lignes en retrait suivantes en une chaîne multiligne.
Un tuyau, combiné avec !Sub
vous permettra d'utiliser:
Ref
renvoient facilement la valeur telle que ${YourResource}
Fn::GetAtt
renvoient des valeurs avec seulement un point ${YourResource.TheAttribute}
${AWS:region}
Aussi simple que !Sub |
, sautez à la ligne suivante et ajoutez le retrait approprié. Exemple:
Resources:
YourUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: blabla
Outputs:
AmplifyConfig:
Description: key/values to be passed to Amplify.configure(config);
Value: !Sub |
{
'aws_cognito_identity_pool_id': '${YourUserPool}',
'aws_sign_in_enabled': 'enable',
'aws_user_pools_mfa_type': 'OFF',
}
AdvancedUsage:
Description: use Pseudo Parameters and/or resources attributes
Value: !Sub |
{
'aws_region': '${AWS::Region}',
'user_pool_arn': '${YourUserPool.Arn}',
}
En utilisant YAML, vous pouvez composer ceci simplement:
Outputs:
AmplifyConfig:
Description: key/values to be passed to Amplify.configure(config);
Value: !Sub '
{
"aws_cognito_identity_pool_id": "${IdentityPool}",
"aws_sign_in_enabled": "enable",
"aws_user_pools_mfa_type": "OFF",
}'