Ich möchte ein ARN in meiner Datei dynamisch erstellen, aber ich muss meine aktuelle AccountId abrufen. Wie kann ich darauf als Variable zugreifen?Wie bekomme ich die AccountId als Variable in einer serverless.yml-Datei?
Zum Beispiel:
example: arn:aws:states:${region}:${accountId}:stateMachine:${self:service}-${self:custom.stage}-example
Was ist der richtige Weg, um die aktuellen region
und accountId
zu verweisen?
Edit: (Lösung)
ich mit dieser Lösung nicht super zufrieden bin wegen der Hässlichkeit und Ausführlichkeit der Fn::Join
Lösung, aber was ich am Ende tut, ist sie eine arns.yml
-Datei, die alle diese hat nur an diesem einen Ort dann referenzieren Sie dann durch Variable woanders.
# arns.yml
example:
Fn::Join:
- ":"
- - arn
- aws
- states
- Ref: AWS::Region
- Ref: AWS::AccountId
- stateMachine
- ${self:service}-${self:custom.stage}-example
Dann:
# serverless.yml
custom:
stage: "${opt:stage, self:provider.stage}"
functions:
foo:
handler: handler.foo
environment:
example_arn: ${file(arns.yml):example}
Edit 2: (bessere Lösung)
Dies kann lahm klingen, aber die Lösung, die ich mit ist los am Ende nur schwer Code es in meine Gewohnheit Variablen. Ich habe eigentlich zwei Konten und ich verwende eine benutzerdefinierte Build-Schritt die beiden Dateien mit Kontospezifischen Einstellungen zu kopieren, wie so:
account.stag.yml
account.prod.yml
Jede Datei kann wie folgt aussehen:
# account.stag.yml
account: 123456789
region: ${opt:region, "us-east-1"}
domain: mycompany.qa
Wenn ich baue ich angeben ein Konto und ich schluck alle meine Gebäude zu tun:
gulp build --account stag
Dann, dass umbenennt mein Konto spezifische Einstellungen
build/account.yml
Und ich kann es in meinem serverless.yml wie so Referenz:
# build/serverless.yml
custom: ${file(account.yml)}
functions:
foo:
handler: handler.foo
environment:
example_arn: arn:aws:states:${self:custom.region}:${self:custom.account}:${self:service}-${opt:stage}-example
Ich habe dieses Plugin noch nicht überprüft, aber das scheint die beste Antwort zu sein, um ehrlich zu sein, um die richtige Antwort zu sein. –