我想動態地在我的文件中創建一個ARN,但我需要獲取當前的AccountId。我怎樣才能將它作爲一個變量來訪問?如何將AccountId作爲serverless.yml文件中的變量獲取?
例如:
example: arn:aws:states:${region}:${accountId}:stateMachine:${self:service}-${self:custom.stage}-example
什麼是引用當前region
和accountId
的正確方法?
編輯:(解決方案)
我不是這個解決方案超級高興因醜陋和Fn::Join
解決方案的詳細程度,但我最後做的是做一個arns.yml
文件,它具有所有這些只有在這一個地方,然後參考其他地方的變量。
# arns.yml
example:
Fn::Join:
- ":"
- - arn
- aws
- states
- Ref: AWS::Region
- Ref: AWS::AccountId
- stateMachine
- ${self:service}-${self:custom.stage}-example
然後:
# serverless.yml
custom:
stage: "${opt:stage, self:provider.stage}"
functions:
foo:
handler: handler.foo
environment:
example_arn: ${file(arns.yml):example}
編輯2:(更好的解決方案)
這可能聽起來有點扯,但我結束了持續的解決方法就是硬編碼到我的自定義變量。其實我有兩個帳戶,我使用自定義生成步驟,以這兩個文件與帳戶的具體設置複製像這樣:
account.stag.yml
account.prod.yml
每個文件可能是這樣的:
# account.stag.yml
account: 123456789
region: ${opt:region, "us-east-1"}
domain: mycompany.qa
當我建立我指定一個帳戶,我用一口我所有的建築做:
gulp build --account stag
然後就是重命名我的帳戶特定的設置,以
build/account.yml
我可以引用它在我serverless.yml像這樣:
# 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
我還沒有審查過這個插件,但這似乎是老實說的最佳答案,轉而成爲正確的答案。 –