Blog
Teilen Sie Ihre Konfiguration über AWS-Konten hinweg

Es ist eine bewährte Methode, Ihre Umgebungen in separate AWS-Konten aufzuteilen. Es kostet Sie nichts extra und Sie können sicherstellen, dass Ihre Entwicklungsumgebung vollständig von den höheren Umgebungen isoliert ist. Bei dieser Einrichtung ist es auch üblich, ein Build- oder Tooling-Konto einzurichten, das für die Bereitstellung Ihrer Anwendung zuständig ist.
Aber es bringt auch einige andere Herausforderungen mit sich, zum Beispiel: Wenn Sie eine Webanwendung haben, hat diese in der Regel ein Frontend und eine API, die sie verwendet. Wenn Sie für die Bereitstellung dieser Komponenten separate Pipelines verwenden, brauchen Sie eine Möglichkeit, den Endpunkt gemeinsam zu nutzen. Sie könnten ein vorhersehbares Schema verwenden, um den Endpunkt programmatisch zu bestimmen, wenn Sie die Webanwendung erstellen. Dies funktioniert gut für eine URL, aber nicht für eine Cognito Client ID.
SSM-Parameter verwenden
SSM-Parameter sind ein Schlüssel/Wertespeicher, sie eignen sich perfekt für Konfigurationswerte. Wenn Sie Ihre API, den Cognito-Benutzerpool und den Client bereitstellen. Sie können den Wert in einem SSM-Parameter wie folgt speichern:
UserPoolClientIdParameter:
Type: AWS::SSM::Parameter
Properties:
Name: /<Environment>/cognito/user-pool-client-id
Tier: Advanced
Type: String
Value: !Ref AppClient
Als nächstes können Sie diesen Parameter für das Build/Tooling-Konto freigeben:
ShareUserPoolClientIdParameter:
Type: AWS::RAM::ResourceShare
Properties:
AllowExternalPrincipals: true
Name: UserPool Client ID - <Environment>
PermissionArns:
- arn:aws:ram::aws:permission/AWSRAMDefaultPermissionSSMParameterReadOnly
Principals:
# This is the account id of your build/tooling account
- 111122223333
ResourceArns:
- !Sub arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${UserPoolClientIdParameter}
Lösen Sie die Werte in CodeBuild auf
Nun, da wir die Konfiguration mit dem Build/Tooling-Konto geteilt haben. Wir müssen den Wert auflösen. Stellen Sie zunächst sicher, dass das Prinzip erlaubt ist, den Parameter aufzulösen:
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter",
"ssm:GetParameters"
],
"Resource": [
"arn:aws:ssm:eu-west-1:444455556666:parameter/<Environment>/cognito/user-pool-client-id"
]
}
Als nächstes müssen wir den Parameter zur Buildspec hinzufügen:
version: 0.2
env:
parameter-store:
USER_POOL_CLIENT_ID: arn:aws:ssm:eu-west-1:444455556666:parameter/<Environment>/cognito/user-pool-client-id
phases:
...
Theoretisch sollte das funktionieren... Aber dieser Parameter wird nicht aufgelöst. Ich nehme an, dass CodeBuild nur Parameter auflösen kann, die im selben Konto gespeichert sind. Aber Sie können dieses Problem einfach umgehen, indem Sie den Parameter selbst abrufen:
export USER_POOL_CLIENT_ID=$(aws ssm get-parameter --name arn:aws:ssm:eu-west-1:444455556666:parameter/<Environment>/cognito/user-pool-client-id --output text --query 'Parameter.Value')
Ich habe die native Lösung bevorzugt, aber leider funktioniert diese nicht. Bis es soweit ist, wäre dies meine empfohlene Lösung.
Fazit
Die Einhaltung bewährter Verfahren ist immer eine gute Idee. Aber sie können neue Herausforderungen mit sich bringen. In diesem Beispiel habe ich Ihnen gezeigt, wie Sie einen SSM-Parameter verwenden können, um die Konfiguration für mehrere Konten gemeinsam zu nutzen.
Foto von Mostafa Meraji
Verfasst von

Joris Conijn
Joris is the AWS Practise CTO of the Xebia Cloud service line and has been working with the AWS cloud since 2009 and focussing on building event-driven architectures. While working with the cloud from (almost) the start, he has seen most of the services being launched. Joris strongly believes in automation and infrastructure as code and is open to learning new things and experimenting with them because that is the way to learn and grow.
Unsere Ideen
Weitere Blogs
Contact



