[AWS] [お試し] AWS CodeConnections (旧称 AWS CodeStar Connections) のご紹介
概要
CodePipelineの2024年のアップデートを実際に試してみる記事その2です。アップデートの一覧はこちらの記事で紹介しています。
今回は2024/03/29に公開された「AWS CodeConnections (旧称 AWS CodeStar Connections) のご紹介」、といっても実態は既存のサービスのリネームです。
AWS CodeConnections (旧称 AWS CodeStar Connections) のご紹介
そもそもAWS CodeStar Connectionsとは、Gitベースのソースプロバイダ(GitHub, GitLabなど) と各種AWSサービス(CodePipelineなど)を統合し、プロバイダから取得したソースコードをもとにビルドやデプロイなどを行うことのできるサービスです。これをCodeConnectionsに改名したというものですが、単にドキュメント上の名前が変わっただけではなく、 ARNなどのリソース名や、IAMのポリシーに記載するアクション名の記載も変わっていることに注意が必要です。 とはいえ、過去の表記方法もサポートされており、改めての変更は不要ですが、IAMポリシーやリソースを新規作成する際には意識しましょう。ブログなどの古い記事では、古い形式で書かれて可能性があります。混乱を避けるため、頭の片隅に置いておき、自分の実装もできれば新しい形式に直したほうがよいでしょう。
なお、CodeStar Connectionsは元々CodeStarというサービスに関連するものとして、その名前を取っていたように見受けられます。ただ、そのCodeStarというサービス自体は2024/7/31で新規プロジェクトの作成などができなくなることが発表されています。とはいえ、Gitサービスと連携した本サービスは他サービスでも利用しており残す必要があるため、CodeStar
という名称を外しておく必要があったのでしょう。
CodeConnectionsの改称に関する変更内容の公式ドキュメントについては下記をご参照ください。
サービスのリネームとそれに伴なう過去の名称との互換性
表で概要をまとめると下記になります。
項目 | 概要 | 過去の名称との互換性 |
---|---|---|
Renamed service prefix | APIで指定するAWSサービスのPrefixが変更 (例) AWS CLIでは、aws codestar-connections -> aws codeconnecitons |
YES |
Renamed actions in IAM | IAMのポリシーに記載するアクション名が変更 (例) codestar-connections:CreateConnection -> codeconnections:CreateConnection |
YES |
New resource ARN | 新しく作成されたCodeConnectionsのリソースARNはARN内のサービス名としてcodeconnectionsを持つように変更 (例) arn:aws:codestar-connections:... -> arn:aws:codeconnections:... |
互換性について言及なし |
Affected service role policies | CodePipelineのCustomer ManagedのService RoleのPolicyと、AWSCodeStarServiceRole Policyは新しいprefix権限を持つように変更。 | YES |
New CloudFormation resource | AWS::CodeConnections::Connectionという新たなリソース種別が定義 | YES |
というわけで、基本的には古い表記や名前もサポートしておりますが、resource ARNは互換性について言及がなかったので、実際にCodeConnectionのリソースを作成した上で、API呼び出しで古いフォーマットでも動作するのかどうか試してみましょう。
- 新ARN形式 arn:aws:codeconnections:us-west-2:account-ID:connection/*
- 旧ARN形式 arn:aws:codestar-connections:us-west-2:account-ID:connection/*
下記が最近私が作成したcodeconnectionsのリソースで、UI上はARNのサービス名の箇所が、codeconnections=新ARN形式になっていることがわかります。
このサービス名の箇所をcodestar-connectinosで指定した場合、このリソースの情報を指すことになるのか、それとも失敗(リソースが存在しない)となるのかを試します。具体的には、AWS CLIのcodestarとcodeconnectionsサービスのget-connectionがARNを引数で取るため、こちらで実施してみましょう。例えば、下記のような形となります。
# codestar-connections
aws codestar-connections get-connection \
--connection-arn <ARN>
# codeconnections
aws codeconnections get-connection \
--connection-arn <ARN>
なお、該当するCLIのドキュメントはこちらになります。
CLIによるget-connectionの実験結果
下記が実験結果をまとめた表です。
CLIのService名 | 引数ARN中のService名 | 結果 |
---|---|---|
codestar | codestar-connections | NG (AccessDeniedException) |
codestar | codeconnections | OK |
codeconnections | codestar-connections | NG (AccessDeniedException) |
codeconnections | codeconnections | OK |
実際に実行したシェル上の結果はこちら。(Account IDだけ念の為置換しています。)
[cloudshell-user@ip-10-138-163-154 ~]$ aws codeconnections get-connection --connection-arn arn:aws:codeconnections:us-east-1:590184003537:connection/cba2067c-9f07-424d-b9d8-248cca6fbd2a
{
"Connection": {
"ConnectionName": "sandbox",
"ConnectionArn": "arn:aws:codeconnections:us-east-1:<ACCOUNT_ID>:connection/cba2067c-9f07-424d-b9d8-248cca6fbd2a",
"ProviderType": "GitHub",
"OwnerAccountId": "<ACCOUNT_ID>",
"ConnectionStatus": "AVAILABLE"
}
}
[cloudshell-user@ip-10-138-163-154 ~]$ aws codestar-connections get-connection --connection-arn arn:aws:codeconnections:us-east-1:<ACCOUNT_ID>:connection/cba2067c-9f07-424d-b9d8-248cca6fbd2a
{
"Connection": {
"ConnectionName": "sandbox",
"ConnectionArn": "arn:aws:codeconnections:us-east-1:<ACCOUNT_ID>:connection/cba2067c-9f07-424d-b9d8-248cca6fbd2a",
"ProviderType": "GitHub",
"OwnerAccountId": "<ACCOUNT_ID>",
"ConnectionStatus": "AVAILABLE"
}
}
[cloudshell-user@ip-10-138-163-154 ~]$ aws codeconnections get-connection --connection-arn arn:aws:codestar-connections:us-east-1:<ACCOUNT_ID>:connection/cba2067c-9f07-424d-b9d8-248cca6fbd2a
An error occurred (AccessDeniedException) when calling the GetConnection operation: Account <ACCOUND_ID> does not have access to connection arn:aws:codestar-connections:us-east-1:<ACCOUNT_ID>:connection/cba2067c-9f07-424d-b9d8-248cca6fbd2a
[cloudshell-user@ip-10-138-163-154 ~]$ aws codestar-connections get-connection --connection-arn arn:aws:codestar-connections:us-east-1:<ACCOUNT_ID>:connection/cba2067c-9f07-424d-b9d8-248cca6fbd2a
An error occurred (AccessDeniedException) when calling the GetConnection operation: Account <ACCOUNT_ID> does not have access to connection arn:aws:codestar-connections:us-east-1:<ACCOUNT_ID>:connection/cba2067c-9f07-424d-b9d8-248cca6fbd2a
[cloudshell-user@ip-10-138-163-154 ~]$
ARNについては、今のリソースが持つ新形式では当然動くものの、あえて旧形式のサービス名を指定した場合、アクセス拒否となりました。CLIのサービス名の箇所はcodestarであっても、codeconnectionsでも同様の挙動となりました。
まとめ
よくよく考えれば、CLIのサービス名の部分は"Renamed service prefix"で互換性維持されていることは明記されているので、明らかでしたね。
ARNの新旧互換性については、過去のものはcodestar-connections, 最近のものはcodeconnectionsと唯一のため、こちらはAPIの引数で与えられた際の読み替えのようなものが行われないのは、互換性云々ではなく当然だったかな(とやった後に思いました)。とはいえ、こういう実験をして初めて理解が深まることはあるので無駄ではなかったです(という言い訳)。
Discussion