💡

addPropertyOverride()を使ってAmplify overrideでアカウトIDやリージョンを参照する

2023/10/29に公開

はじめに

Amplify overrideでAmplifyで作成したCognitoのメール送信をSESに設定する際に、アカウントIDやリージョンをコード上にベタ書きを避ける方法を探していました。

export function override(
  resources: AmplifyAuthCognitoStackTemplate,
  amplifyProjectInfo: AmplifyProjectInfo
) {
  const domain = "example.com";
  // ↓ accountIdとregionをベタ書きしたくない。
  const accountId = "1234567890";
  const region = "ap-northeast-1";

  resources.userPool.emailConfiguration = {
    emailSendingAccount: "DEVELOPER",
    from: `no-reply@${domain}`,
    sourceArn: `arn:aws:ses:${region}:${accountId}:identity/${domain}`,
  }
}

Amplify overrideでアカウトIDやリージョンを参照する方法

以下のissueにやり方がありました。
https://github.com/aws-amplify/amplify-cli/issues/12401
addPropertyOverride()で素のCloudFormationテンプレートで設定を記述することができるため、CloudFormationの擬似パラメータ参照を使って参照するとのこと。

addPropertyOverride() を使ってアカウントIDとリージョンを取得する

はじめに で例として挙げた、Cognitoのメール送信をSESに設定するコードをaddPropertyOverride()を使って修正してみました。

export function override(
  resources: AmplifyAuthCognitoStackTemplate,
  amplifyProjectInfo: AmplifyProjectInfo
) {
  const domain = "example.com";
  
  resources.userPool.addPropertyOverride("EmailConfiguration", {
    EmailSendingAccount: "DEVELOPER",
    From: `no-reply@${domain}`,
    SourceArn: {
      "Fn::Join": [
        "",
        [
          "arn:aws:ses:",
          { Ref: "AWS::Region" },
          ":",
          { Ref: "AWS::AccountId" },
          `:identity/${domain}`,
        ],
      ],
    },
  });
}

これでアカウントIDとリージョンをベタ書きしなくてよくなりました。
同じようなことをしようとしている方がいれば是非参考にしてみてください。

Discussion